Google App Engine for Java 入門 + Struts2 デプロイ手順

前回のエントリで作成した Struts2 のサンプルプログラムのデモを OpenshiftAppFogHeroku といった Java の動く PaaS で公開できないかなぁとちょっと調べてみたのですが、Eclipse で開発したらその場でポンっとデプロイできる Google App Engine が一番手軽でいいんじゃないか・・・と言うことで約4年ぶりに Google App Engine をさわってみました。
そんな訳で Google App Engine for Java の導入手順と合わせ、Struts2 のデプロイ手順もまとめてみました。

開発環境の準備

32ビット版 Windows 環境に開発環境を構築します。以下については「2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門」の導入手順を参照ください。

  • Eclipse Kepler(4.3)
  • Pleiades(Eclipse の日本語化プラグイン)
  • JDK(Java SE 7u51)
  • Struts2(2.3.16)

次にGoogle App エンジンの SDK と Eclipse プラグインを準備します。

  • Google App エンジン Java SDK(1.9.0)
  • Google プラグイン Eclipse

App エンジン SDK / Eclipse プラグインの導入

Eclipse を起動します。

install

ツールバーの[ヘルプ][新規ソフトウェアのインストール]を選択すると設定画面が表示されるので、[作業対象] に [http://dl.google.com/eclipse/plugin/4.3] と入力してエンターキーを押します。プラグインの一覧が表示されるので、以下を選択し[次へ]をクリックします。

  • Google プラグイン Eclipse(required)
  • Google App エンジン Java SDK 1.9.0

install

[次へ]をクリックします。

install

[使用条件の条項に同意します] を選択し [完了] をクリックします。

install

インストールが始まります。

ダウロードして導入する方法

上記手順でエラーが出てしまう場合は、マニュアルでダウンロードしたのちインストールします。

サーブレットを動かしてみる

first app

ツールバーにグーグルのアイコンができるのでこれをクリックし「新規 Web アプリケーションプロジェクト」を選択します。

first app

設定画面が表示されるので、[プロジェクト名] に [HelloGae]、[パッケージ] に [hello]、[Google Web ツールキットを使用] のチェックをはずします。また、SDK名が「App Engine – x.x.x」と表示されてない場合(手動でダウンロード時)は、[SDKの構成]をクリックし、ローカルディスク上にある SDK のパスを指定します。[完了]をクリックするとアプリケーションの雛形が生成されます。

first app

プロジェクトエクスプローラの [HelloGae] を選択した状態で右クリック、[実行][Web アプリケーション]を選択します。

first app

http://localhost:8888/ にアクセスすると [HelloGae] というリンクが表示されるのでクリック。hello パッケージの HelloGaeServlet.java 実行され [Hello, world] と表示されます。

App エンジンにデプロイ領域を作成する

https://appengine.google.com/ にアクセスします。

app setting

[Create Application] をクリックします。

app setting

[国] に [日本]、[携帯サービス会社] に 自分の携帯電話会社のドメイン、[メールアドレス] に @以降を除いた値を入力し、[確認コードを送信] をクリックします。

app setting

携帯電話に確認コードが送信されてくるので、[確認コード] を入力し、[確認] をクリックします。

app setting

[Application Identifier] に アプリケーション URL の一部となる有効な ID を指定します(ここでは my-hello-gae と入力)。[Check Availability] をクリックすることで使用可能かチェックできます。
[Application Title] にアプリケーションのタイトルを指定します。
[I accept these terms.] をチェックし、[Create Application] をクリックします。

app setting

作成完了のメッセージが表示されます。https://appengine.google.com/ にアクセスします。

app setting

作成したアプリケーション名がリストに表示され、追加作成可能なアプリケーション数が表示されます。

App エンジンにデプロイする

Eclipse から App エンジンにアプリケーションをデプロイします。

deploy

プロジェクトエクスプローラの [HelloGae] を選択した状態で右クリック、[プロパティ]を選択します。設定画面が表示されるので [Google][App エンジン]を選択し、[アプリケーションID] に App エンジン上で作成したアプリケーション ID を指定します(ここでは my-hello-gae)。

deploy

プロジェクトエクスプローラの [HelloGae] を選択した状態で右クリック、[Google][App エンジンへデプロイ]を選択します。

deploy

Google へのログイン画面が表示されるので、ログインします。

deploy

[承認する]をクリックします。

deploy

[Launch app in browser after successful deploy] のチェックをはずし、[配置]をクリックします。

deploy

https://appengine.google.com/ にアクセスすると、[Status] が [Running] なっているのでこれをクリックします。

deploy

App エンジン上でアプリケーションが実行されてることが確認できます。

Struts2 を App エンジン用にカスタマイズする

2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門」で作成した Struts2 のサンプルプログラムをApp エンジンで動くようにカスタマイズします。 まずはローカル環境で動くようにします。

struts2

グーグルのアイコンから「新規 Web アプリケーションプロジェクト」を選択し、[プロジェクト名] に [HelloGaeStruts2]、[パッケージ] に [hello]、[Google Web ツールキットを使用] のチェックをはずしプロジェクトを作成します。

src フォルダの hello パッケージ内の [HelloGaeStruts2Servlet.java]と、war フォルダ直下の [index.html] を削除します。

2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門」で使用したファイルを以下のようコピーし、jar ファイルについてはビルドパスに追加します。

  • [WebContent] 直下に作成した jsp ファイル → [war] 直下にコピー
  • [WebContent/WEB-INF/lib] 直下の asm-3.3.jar を除く jar ファイル → [war/WEB-INF/lib] 直下にコピー
  • jar ファイル全てを選択した状態で右クリックし、[ビルドパス][ビルドパスに追加]を選択
  • [Java リソース/src] 直下の struts.properties、struts.xml → [src] 直下にコピー
  • [Java リソース/src/hello] 直下の java ファイル → [src/hello] 直下にコピー

パッケージ名を freemakeer.core とし TextBlock.java を作成します。ソースが長いので内容については以下リンク先をご覧ください。

TextBlock.java のソース

パッケージ名を listener とし OgnlListener.java を作成します。

  1. package listener;
  2.  
  3. import javax.servlet.ServletContextEvent;
  4. import javax.servlet.ServletContextListener;
  5. import ognl.OgnlRuntime;
  6.  
  7. public class OgnlListener implements ServletContextListener{
  8.  
  9. @Override
  10. public void contextDestroyed(ServletContextEvent arg0){
  11. }
  12.  
  13. @Override
  14. public void contextInitialized(ServletContextEvent arg0){
  15. OgnlRuntime.setSecurityManager(null);
  16. }
  17. }

[war/WEB-INF/appengine-web.xml] を以下のよう変更します。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  3. <application>hello-gae-struts2</application>
  4. <version>1</version>
  5. <threadsafe>true</threadsafe>
  6. <system-properties>
  7. <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  8. <property name="file.encoding" value="UTF-8" />
  9. <property name="DEFAULT_ENCODING" value="UTF-8" />
  10. </system-properties>
  11. <sessions-enabled>true</sessions-enabled>
  12. <ssl-enabled>true</ssl-enabled>
  13. </appengine-web-app>

[war/WEB-INF/web.xml] を以下のよう変更します。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  7. <display-name>Hello Struts2</display-name>
  8. <filter>
  9. <filter-name>struts2</filter-name>
  10. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  11. <init-param>
  12. <param-name>actionPackages</param-name>
  13. <param-value>hello</param-value>
  14. </init-param>
  15. </filter>
  16. <filter-mapping>
  17. <filter-name>struts2</filter-name>
  18. <url-pattern>/*</url-pattern>
  19. </filter-mapping>
  20. <listener>
  21. <listener-class>listener.OgnlListener</listener-class>
  22. </listener>
  23. </web-app>

以下のような構成になります。

struts2

プロジェクトエクスプローラの [HelloGaeStruts2] を選択した状態で右クリック、[実行][Web アプリケーション]を選択します。

struts2

http://localhost:8888/login.action にアクセスすると Struts2 のアプリケーションが実行されます。

Struts2 を App エンジンにデプロイする

https://appengine.google.com/ にアクセス後、[Create Application] をクリックし、Struts2 アプリ用のデプロイ領域を作成します(ここでは [Application Idenfifier] を hello-gae-struts2 、[Application Title] を Hello Struts2 とします)。

Eclipse を一旦終了し、eclipse.ini をテキストエディタで開きます。

struts2

[-vmargs] と記述されてる箇所の1行上に、以下のよう JDK の javaw.exe のパスを記述します(この記述が無いとデプロイ時に jsp がコンパイルエラーになります)。

  1. -vm
  2. C:\IDE\jdk1.7.0_51\bin\javaw.exe

テキストエディタを閉じ、Eclipse を実行します。

プロジェクトエクスプローラの [HelloGae] を選択、右クリック[プロパティ][Google][App エンジン]を選択し、[アプリケーションID] に App エンジン上で作成したアプリケーション ID を指定(ここでは hello-gae-struts2)。
同様に右クリック [Google][App エンジンへデプロイ]でデプロイします。

struts2

http://hello-gae-struts2.appspot.com/login.action にアクセスすると App エンジン上で Struts2 のアプリケーションが実行されます。

サンプルソース

こちらからどうぞ。App エンジンで Struts2 を使用する場合はこれを雛形にすると楽かと思います。

参考にしたサイト