2014年7月4日金曜日

[Seasar2] S2Chronos1.0.0 のセットアップが公式通りだとうまくいかない

"Seasar2に対応したJavaオブジェクトスケジューリングフレームワーク"、S2Chronosの有用性検証を依頼されたのでセットアップ。

公式を見ながら行ったのだが、diconファイルの読み込みあたりでClassNotFoundExceptionなんかが頻発。。いくつかのblogを参考にしてみると公式に記載の無い設定が必要だったりした。

以下、インストールに要した全作業。

1. S2Choronosのjarファイルを↓からダウンロード。WEB-INF/lib に配置し、ビルドパスに加える。
 http://s2chronos.sandbox.seasar.org/ja/download.html

 ソースは下記から。
 http://maven.seasar.org/maven2/org/seasar/chronos/s2chronos-core/1.0.0/
 http://maven.seasar.org/maven2/org/seasar/chronos/s2chronos-extension/1.0.0/


2.chronosCustomize.dicon を作成し、 src/main/resource に配置する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <component name="schedulerConfiguration" class="org.seasar.chronos.core.SchedulerConfiguration">
        <property name="hotdeployDisable">true</property>
        <property name="daemon">true</property>
        <property name="autoFinish">false</property>
        <property name="autoFinishTimeLimit">5000L</property>
        <property name="taskScanIntervalTime">2000L</property>
        <property name="threadPoolType">@org.seasar.chronos.core.ThreadPoolType@CACHED</property>
    </component>
</components>
※ chronosCustomizer.dicon ではないので要注意。
※ パッケージ名のorg.seasar.chronos.coreが公式だと org.seasar.chronos.core.model になっている。1.0.0ではmodelというパッケージは存在しないので修正する。

3. creator.dicon の<components>タグ中に下記を追記する。
<component class="org.seasar.chronos.core.creator.TaskCreator"/>
<component class="org.seasar.chronos.core.creator.TriggerCreator"/>
4. customizer.dicon の<components>タグ中に下記を追記する。
 <component name="taskSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
   <initMethod name="addInterceptorName">
    <arg>"aop.traceInterceptor"</arg>
   </initMethod>
   <property name="pointcut">"do.*, initialize, destroy"</property>
 </component>
 <component name="taskCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
   <arg>taskSupportAspectCustomizer</arg>
  </initMethod>
 </component>
 <component name="triggerSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
  <initMethod name="addInterceptorName">
   <arg>"aop.traceInterceptor"</arg>
  </initMethod>
  <property name="pointcut">".*"</property>
 </component>
 <component name="triggerCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addCustomizer">
   <arg>triggerSupportAspectCustomizer</arg>
  </initMethod>
 </component>
5. app.diconの<components>タグ中に下記を追記する。
<include path="chronos-extension.dicon"/>
※ 公式に記述なし。

6. web.xml の<web-app>タグ中に下記を追記する。
<servlet>
    <servlet-name>chronosServlet</servlet-name>
    <servlet-class>org.seasar.chronos.extension.servlet.S2ChronosServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
</servlet>
※ 公式に記述なし。

これでTomcatを起動する。記述に間違いがある場合はコンソールにログが出力されるので確認する。当たり前だが、エラー発生時にはException名よりもどのファイルの読み込み時に落ちているのかに着目して追うと原因を突き止めやすい。

【環境】

Java SE7
Seasar2.4.45
S2Chronos1.0.0
※ そもそもJava SE5までしかサポートしていない模様。

0 件のコメント:

コメントを投稿