トップ «前の日記(2009-04-27) 最新 次の日記(2009-05-06)» 編集

Ussy Diary


2009-05-01

[Java]Cubby 2.0.0-beta2

更新されたので beta1 から pom.xml のバージョンを書き換えてインストールしてみました。

ビルドしてみると app-cubby.dicon で cubby-handlers.dicon が存在しないと言われエラーに。どうやら cubby-s2-2.0.0-beta1.jar から取り除かれたようです。 app-cubby.dicon の以下の記述を削除。

<include path="cubby-handlers.dicon"/>

エラーを取り除いて実行。

[ESSR0046]コンポーネント(requestParsers)が見つかりません

サンプルを見てみると app-cubby.dicon が修正されていました。

<component name="multipartRequestParser" class="org.seasar.cubby.controller.impl.MultipartRequestParser" />
<component name="defaultRequestParser" class="org.seasar.cubby.controller.impl.DefaultRequestParser" />
<component name="requestParsers">
    { multipartRequestParser, defaultRequestParser }
</component>

修正して実行。アクセスしてみると別のエラーに変わりました。

java.lang.IllegalArgumentException: サービス interface org.seasar.cubby.spi.PathResolverProvider を提供するプラグインがありません

ここでようやく修正内容を確認すると(遅い!)、プラグイン機構が見直されたようです。

CubbyServlet からプラグインを初期化する仕組みになったので、 web.xml に CubbyServlet をロードしてあげるようにすることで動作するようになりました。

 <servlet>
   <servlet-name>cubby</servlet-name>
   <servlet-class>org.seasar.cubby.servlet.CubbyServlet</servlet-class>
   <load-on-startup>2</load-on-startup>
 </servlet>

少しコードを追っかけてみると Cubby 内の ServiceLoader クラスが META-INF/services/org.seasar.cubby.Plugin を読みに行ってプラグインをロードする仕組みになっていました。 JDK 1.6 から搭載された ServiceLoader をエミュレートした形になっているといえます。

「Java SE 6完全攻略」第11回 コンポーネントのロードを行うServiceLoader:ITpro