Google App Engine for Java SDKで開発をする 〜 Spring MVCでアプリを作成する
「Google App Engine for Java SDKで開発をする 〜 プロジェクトの作成」では、「初めてのGAEプロジェクト」以来、実に3年ぶりにGAEプロジェクを作成した。
3年前はtwitterのbotを作成して、GAE上にデプロイして動かしていた。今も動いているが、放置しっぱなしw。
さて、今回は、「EclipseにインストールしたSpring Test SuiteでSpringMVCプロジェクトを作成する」で紹介したのと同様に、Spring MVCで作成したアプリをGAEで作成してデプロイするところまでを目標とする。
1.とりあえずSpringで作成したコントローラをGAEにコピーする
もちろん、spring関連のjarが無いのでコンパイルエラーの嵐となる。
2.jarを追加する
GAEプロジェクトにはpomが無いので、war\WEB-INF\libにSpringプロジェクトで参照しているjar類を置く*1。
また、バージョンは異なるが、下記も配置。
antlr-3.3-complete.jar
asm-3.3.1.jar
asm-commons-3.3.1.jar
commons-logging-1.1.1.jar
他にも色々配置する必要があったので、1つ1つ配置していきながらコンパイルエラーを解消。
3.クライアントサイドコンテンツを配置する
WEB-INF配下の資源を配置する。
元のSpring MVC+Tomcatで作成したプロジェクトのWEB-INF配下を、そのままGAEのプロジェクトにコピーする。
4.web.xmlの編集
Springプロジェクトのweb.xmlには、主に次の設定が記載されている。
・root-context.xml :コンテキストパラメータの定義ファイル
・DispatcherServlet :ディスパッチャーサーブレットの定義
・servlet-context.xml :コンテキスト設定
これら(下記)をAppエンジンのweb.xmlに追加する。
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
特に問題なくGAEで動作した。
GAEに乗せる前にwebappフォルダに配置されていたものは、GAEではwarフォルダに配置することに注意すれば、jarの読み込みが面倒なことはあっても、Google App Engine SDKを使用した開発であっても特に詰まる作業は無かった。
ただ、「Appエンジンへデプロイ」する際に、「java-sdk-1.7.5でJSPが含まれるプロジェクトをデプロイできない」問題にぶち当たりました。ただ、これもGoogle Groupで提示されているとおりに、「eclipse.iniでVMを強制的にjdkに指定する」と解決した。
GAEは動作が遅いが、無事にAppエンジンへデプロイできた。
(ここからGAE上のサンプルアプリにアクセス可能)