Wicket + Maven なアプリを Google App Engine で動かす

 ミッションは、Wicket の QuickStart で作成した Maven プロジェクトにできるだけ手を加えることなく Google App Engine で動かすことです。

 修正または作成しなければならない点は以下の 2 つです。

  • セッションストアを変更する。
  • appengine-web.xml を作成する。

 なお、この記事の内容は Wicket 1.4-rc4 で試しました。

セッションストアを変更する

 Wicket では、デフォルトでは org.apache.wicket.protocol.http.SecondLevelCacheSessionStore というのを通してセッションをディスクに保存するようなことをやっています。Google App Engine ではファイル I/O は認められていませんので、このままではエラーになってしまいます。

 これを変更するには WicketApplication クラスで newSessionStore() メソッドをオーバーライドします。

import org.apache.wicket.protocol.http.HttpSessionStore;

// 〜 snip 〜

    @Override
    protected ISessionStore newSessionStore() {
        return new HttpSessionStore(this);
    }

appengine-web.xml を作成する

 このファイルは Google App Engine のためのデプロイメントディスクリプタと言えば良いでしょうか。以下のようはファイルを WEB-INF 下に appengine-web.xml というファイル名で作成します。以下の例はアプリケーション ID を hoge とした場合です。ポイントは、システムプロパティで「wicket.configuration」を指定して Wicket を deployment モードで稼働させることです。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <!-- アプリケーション ID -->
    <application>hoge</application>
    <!-- バージョン -->
    <version>1</version>
	
    <!-- システムプロパティの設定 -->
    <system-properties>
        <!-- Wicket を deployment モードで動かす。 -->
        <property name="wicket.configuration" value="deployment"/>
    </system-properties>

    <!-- セッションを使用する -->
    <sessions-enabled>true</sessions-enabled>
</appengine-web-app>

デプロイ

 Maven を使ったデプロイはまだ試してません。公式サイトには Ant でのデプロイ法が書いてあってので少なくとも Ant を介せば Maven でもデプロイできると踏んでます。

 ということで、今回はコマンドで。Eclipse プラグインはあえて使いません。

 まずは何はともあれ、成果物を生成しましょう。

mvn clean package

 いよいよデプロイです。Google App Engine SDK for Java を解凍して、中の bin フォルダにパスが通っているものとします。

 まずは、target フォルダ(Maven の成果物が入っているフォルダ)をカレントにします。中にはアーティファクトと同じ名前のフォルダがあるはずです。アーティファクト ID が hoge、バージョンが 1.0 なら hoge-1.0 フォルダがあるはずです。そして、これをめがけてデプロイコマンドを実行します。UNIX/Linux なら

appcfg.sh update hoge-1.0

Windows なら

appcfg.cmd update hoge-1.0

です。途中メールアドレスやアカウントのパスワードを聞かれますので適切に答えてください。

これで、終わりです。