Skip to content
Yusaku Tabei edited this page Nov 22, 2013 · 1 revision

Webapp Runner allows you to launch an application in a Tomcat container on any computer that has a JRE installed. No previous steps to install Tomcat are required when using Webapp Runner. It's just a jar file that can be executed and configured using the java command.

Webapp RunnerはJREがインストールされているコンピュータ上のTomcatにアプリケーションを起動する事を可能にします。Webapp Runnerを使う際に、Tomcatをインスートルするまでの手順は必要ありません。Webapp Runnerはjavaのコマンドを使用して、実行され、構成され得るjarファイルです。

This article will walk you through building an application that launches with Webapp Runner and deploying that application to Heroku.

この記事では、Webapp Runnerで立ち上げたアプリケーションをビルドし、そしてHerokuにそのアプリケーションをデプロイする方法を説明します。

Follow each step to build an app from scratch, or skip to the end get the source for this article. You can also use almost any existing Maven webapp project.

ゼロからアプリを構築するか、この記事の最後にあるソースを取得するか、各々のステップに従ってください。 また、既存の全てのMavenwebアプリケーションプロジェクトを使用する事も出来ます。

Java on Herokuについてなにか質問がある際には, Java on Heroku forumsにて質問してください。

事前準備/前提条件

  • JVM,Mavenを含むJava、またGitの基礎的な知識。

Webapp Runnerの動作

When using Webapp Runner you'll launch your application locally and on Heroku with a command like this:

Webapp Runnerを使用する場合、あなたはローカル環境およびHerokuで以下のようなコマンドを使い、アプリケーションを立ち上げます。

$ java -jar webapp-runner.jar application.war
deploying app from: /Users/johnsimone/dev/gitrepos/devcenter-webapp-runner/target/webappRunnerSample.war
Feb 14, 2012 5:21:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Feb 14, 2012 5:21:44 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Feb 14, 2012 5:21:44 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.40
Feb 14, 2012 5:21:44 PM org.apache.catalina.startup.ContextConfig webConfig
INFO: No global web.xml found
Feb 14, 2012 5:21:44 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]

Webapp Runner will then launch a Tomcat instance with the given war deployed to it. This takes advantage of Tomcat's embedded APIs and is similar to an option that Jetty offers: Jetty Runner. Webapp Runner is open source so you can view or contribute to the source code.

Webapp Runnerはデプロイされたwarファイルと共に、Tomcatのインスタンスを起動します。これはTomcatの組み込みAPIの利点であり、Jettyが提供する Jetty Runnerに似ています。ソースコードを見る、または貢献できるようにWebapp Runnerはopen sourceになっています。

アプリケーションがまだない場合、作成します。

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
...
[INFO] Generating project in Interactive mode
Define value for property 'groupId': : com.example
Define value for property 'artifactId': : helloworld

('groupId','artifactId'はどんなものでもかまいません). Javaのウェブアプリケーションが helloworld ディレクトリに作成されました。

##Webapp Runnerをダウンロードするよう、Mavenを設定する。

Although not necessary for using Webapp Runner it's a good idea to have your build tool download Webapp Runner for you since your application will need it to run. You could, of course, just download Webapp Runner and use it to launch your application without doing this. However having all of your dependencies defined in your build descriptor is important for application portability and repeatability of deployment. In this case we're using Maven so we'll use the dependency plugin to download the jar. Add the following plugin configuration to your pom.xml:

WebappRunnerを使用する為には必要ではないが、アプリケーションは実行する為にビルドツールを必要とするので、WebappRunnerをダウンロードするビルドツールを持つ事を推奨します。もちろん、ただWebapp Runnerをダウンロードし、これをすることなく、アプリケーションを立ち上げる事もできるでしょう。しかしながら、ビルド記述子の中に、定義されている全ての依存関係を持つことは、アプリケーションの移植性と展開の再現性のために重要です。こういった場合、jarファイルをダウンロードするために依存プラグインを使用するので、Mavenを使用します。 以下のプラグイン構成をpom.xmlに追加します。

<build>
    ...
    <plugins>
        ...    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>7.0.40.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

アプリケーションの実行

アプリケーションをビルドするために以下を実行します:

$ mvn package

javaのコマンドを使って、アプリを実行します:

$ java -jar target/dependency/webapp-runner.jar target/*.war

That's it. Your application should start up on port 8080.

アプリケーションは8080ポートで起動するべきです。

Note: if you need your WAR file to be expanded before launching you can add the --expand-war option before target/*.war

Note: 起動する前に展開されたWARファイルを必要とする場合、target/*.warの前に--expand-warのオプションを追加します。

Herokuにアプリケーションをデプロイする

Procfileを作成する

You declare how you want your application executed in Procfile in the project root. Create this file with a single line:

プロジェクトルートの Procfileでどのようにアプリケーションを実行したいか宣言します。以下のようにファイルを作成します。

web:    java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

###Herokuにデプロイする

Gitにコミットします:

$ git init
$ git add .
$ git commit -m "Ready to deploy"

アプリを作成します:

$ heroku create
Creating high-lightning-129... done, stack is cedar
http://high-lightning-129.herokuapp.com/ | [email protected]:high-lightning-129.git
Git remote heroku added

コードをデプロイします:

$ git push heroku master
Counting objects: 227, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (117/117), done.
Writing objects: 100% (227/227), 101.06 KiB, done.
Total 227 (delta 99), reused 220 (delta 98)

-----> Heroku receiving push
-----> Java app detected
-----> Installing Maven 3.0.3..... done
-----> Installing settings.xml..... done
-----> executing .maven/bin/mvn -B -Duser.home=/tmp/build_1jems2so86ck4 -s .m2/settings.xml -DskipTests=true clean install
       [INFO] Scanning for projects...
       [INFO]                                                                         
       [INFO] ------------------------------------------------------------------------
       [INFO] Building webappRunnerSample Maven Webapp 1.0-SNAPSHOT
       [INFO] ------------------------------------------------------------------------
       ...
       [INFO] ------------------------------------------------------------------------
       [INFO] BUILD SUCCESS
       [INFO] ------------------------------------------------------------------------
       [INFO] Total time: 36.612s
       [INFO] Finished at: Tue Aug 30 04:03:02 UTC 2011
       [INFO] Final Memory: 19M/287M
       [INFO] ------------------------------------------------------------------------
-----> Discovering process types
       Procfile declares types -> web
-----> Compiled slug size is 4.5MB
-----> Launching... done, v5
       http://pure-window-800.herokuapp.com deployed to Heroku

Congratulations! Your web app should now be up and running on Heroku. Open it in your browser with: おめでとうございます!Heroku上でWebアプリケーションが起動しているはずです。ブラウザで開きます:

$ heroku open

Use distributed HTTP sessions with Memcache

Explicitly storing session state in a database or other backend data store is a more scalable alternative to using distributed HTTP sessions. To find out if distributed HTTP sessions are the best design choice for your application see the article on distributed HTTP sessions.

データベースまたは他のバックエンドデータストア内に明示的に格納されているセッション状態は、分散HTTPセッションを使用することに対して、よりスケーラブルな代替手段です。分散HTTPセッションがアプリケーションに最適な設計上の選択であるかどうかを調べるには、distributed HTTP sessionsを参照してください。

Webapp runner supports the memcached-session-manager for Tomcat. In order to enable memcache backed sessions you need to make the configuration for your memcache instance available through environment variables and then enable the sesssion manager.

Webapp runnerはTomcatへのmemcached-session-managerをサポートします。Memcacheバックアップセッションを利用するために、環境変数を介してMemcacheインスタンスの構成を利用可能にする必要があります、そしてその後セッションマネージャーを利用可能にします。

Memcache構成を利用可能に設定する

The Heroku Memcachier Add On will set the required environment variables for you. Once you have an existing app get the add on by running:

Heroku Memcachier Add On は要求された環境変数をセットします。既存のアプリケーションを起動して、アドオンを取得します:

$ heroku addons:add memcachier:dev

Note: you may have to verify your account before you can add this add on.

Note:アドオンを追加するまえにアカウント認証を行わなければならないかもしれません。

When running locally you can either set up a local install of memcache or connect to the remote memcache service provisioned for you by the Heroku add on.

ローカルで実行するときは、memcacheののローカルインストールを設定するか、Herokuのアドオンでプロビジョニングされたリモートmemcacheのサービスに接続するかのどちらかです。

When used with webapp runner the memcache backed session manager looks for 3 environment variables: MEMCACHIER_SERVERS, MEMCACHIER_USERNAME, MEMCACHIER_PASSWORD. You can set these to point to a local memcache install or connect to the remote memcache service provisioned for you by the Heroku add on by running heroku config and copying the values into local environment variables.

Webapp runnerで使用された場合は Memcacheバックアップセッションマネージャーは、MEMCACHIER_SERVERS, MEMCACHIER_USERNAME, MEMCACHIER_PASSWORDの3つの環境変数を探します。これらを、接続するローカルのmemcacheを指すように設定することができます。もしくはheroku config を実行する、そしてローカル環境に値をコピーする事により、Herokuのアドオンによってプロビジョニングされたリモートmemcacheのサービスに接続することができます。

memcached-session-managerを利用可能にする

To enable memcache backed sessions with webapp runner you include the following flag: --session-store memcache

webappのランナーとmemcacheのバックアップセッションを有効にするには、以下の手順で行います

So if launching locally your command would now look like:

ローカルで起動する場合のコマンドは以下のようになります:

$ java -jar target/dependency/webapp-runner.jar --session-store memcache target/*.war

Or your Procfile would look like:

Procfileは以下のようになります:

web:    java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT --session-store memcache target/*.war

ソースをクローンする

If you want to skip the creation steps you can clone the finished sample (without memcache backed session):

作成手順をスキップしたい場合は、完成されたサンプルをクローンしてください。

$ git clone [email protected]:heroku/devcenter-webapp-runner.git

Herokuアプリとしてクローンする

One of the tempalates available at java.heroku.com uses Webapp Runner with Spring MVC. You can clone this template into your Heroku account by going here.

java.heroku.com で利用可能なテンプレートの1つとして、Spring MVCと共にWebappランナーを使用しているものがあります。hereでHerokuアカウントにクローンできます。

Clone this wiki locally