Wicket1.5 をJavaEE6環境で動かす!

Wicket1.5はすでにリリースされているのですが、JavaEE6(正確にはServlet3.0)で導入された機能にはまだデフォルトでは対応していません。*1
しかしWicket1.5を使っている人の中には「web.xmlなんか書きたくねー!」とか「どうせやるなら最新のJavaEE環境でしょ」と言う人ももしかしたらいるかもしれない。そんな人にうってつけなのがWicket-stuffの1モジュールであるwicket-servlet3です。こいつを使えばweb.xmlなしで快適なWicket生活を送れること間違いなし!

ということで使い方です(maven前提)

まずはpom.xmlwicket-stuffのrepositoryの追加をします。

    <repositories>
        <repository>
            <id>wicketstuff-core-releases</id>
            <url>https://oss.sonatype.org/content/repositories/releases</url>
            <releases>
                <enabled>true</enabled>
            </releases>		
        </repository>	
    </repositories>

次に依存関係の追加。

    <dependencies>
	<!--  WICKET DEPENDENCIES -->
        <dependency>
            <groupId>org.apache.wicket</groupId>
            <artifactId>wicket-core</artifactId>
            <version>1.5.2</version>
        </dependency>
        
        <!-- こっからがwicket-stuffの設定 -->
        <dependency>
            <groupId>org.wicketstuff</groupId>    
            <artifactId>wicket-servlet3</artifactId>
            <version>1.5-RC5.1</version>
            <!-- 依存モジュール(wicket-core等)のバージョンに差異がでるのでexclude -->
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>wicket-core</artifactId>
                    <groupId>org.apache.wicket</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>servlet-api</artifactId>
                    <groupId>org.mortbay.jetty</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>wicket</artifactId>
                    <groupId>org.apache.wicket</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    <dependencies>

やることはwicket-servlet3の依存関係を追加してやることだけなのですが、残念ながらこのモジュールはまだバージョンが1.5-RC5.1です。なので当然依存するwicket-coreのバージョンも1.5-RC5.1です。なので一応exclusion設定をしておきます。

んで、今度は独自Filterの作成です。
継承元はwicket-servlet3のWicketFilter3というクラスです。
んで、Servlet3.0の仕様に沿ってアノテーション付けたりとかそこらへんをやります。(指定するパラメータはweb.xmlに書いてるのと同じ)

@WebFilter(value="/*",initParams={@WebInitParam(name="applicationClassName",
                          value="com.mycompany.wicketjavaee6.MyWebApplication")})
public class MyFilter extends WicketFilter3{
}

以上です。あとはWicketのPageクラスつくったりWebApplicationクラスのサブクラスを作ったりといういつもの流れでコーディングした後にGlassfishなりtomcatなりのServlet3.0対応コンテナにデプロイすればOKです。

「web.xmlが減った代わりにFilterクラスが増えただけで、別になにも便利になってなくね??」という想いは心にしまって、JavaEE6環境でWicketアプリを動かしてるという優越感にしばし浸るのが健康的かと思います。

*1:例えばアノテーションによってweb.xmlを定義しなくていいとか