S2Chronosを動かす ようやくS2Chronosのモジュールを組み込む編

ようやくようやくS2Chronosのモジュールを組み込むまで到達


公式サイトのように設定ファイルを組み込む
公式の手順の通りやる。

  • S2Choronosのjarファイルをビルドパスに加える.
<dependency>
	<groupId>org.seasar.chronos</groupId>
	<artifactId>s2chronos-extension</artifactId>
	<version>1.0.0</version>
</dependency>

これで何とかなるだろう。

  • chronosCustomize.diconを適宜編集しビルドパスに加える.

 公式の表示してあるものをそのままコピペ

  • creator.diconに以下を追加する.

 公式の表示してあるものをそのままコピペ

  • customizer.diconに以下を追加する.

 公式の表示してあるものをそのままコピペ


インストールガイドはこれしかないので、
これだけやってtomcatを起動。

DEBUG 2010-11-23 23:12:53,515 [main] S2Containerを作成します。path=hotdeploy.dicon
DEBUG 2010-11-23 23:12:53,515 [main] S2Containerを作成します。path=convention.dicon
DEBUG 2010-11-23 23:12:53,781 [main] S2Containerを作成しました。path=convention.dicon
DEBUG 2010-11-23 23:12:53,781 [main] S2Containerを作成します。path=customizer.dicon
DEBUG 2010-11-23 23:12:53,781 [main] S2Containerを作成します。path=default-customizer.dicon
DEBUG 2010-11-23 23:12:53,781 [main] S2Containerを作成します。path=std-customizer.dicon
DEBUG 2010-11-23 23:12:53,796 [main] S2Containerを作成します。path=std-customizer-tiger.dicon
DEBUG 2010-11-23 23:12:53,859 [main] S2Containerを作成しました。path=std-customizer-tiger.dicon
DEBUG 2010-11-23 23:12:53,875 [main] S2Containerを作成しました。path=std-customizer.dicon
DEBUG 2010-11-23 23:12:53,875 [main] S2Containerを作成しました。path=default-customizer.dicon
DEBUG 2010-11-23 23:12:53,906 [main] S2Containerを作成しました。path=customizer.dicon
DEBUG 2010-11-23 23:12:53,906 [main] S2Containerを作成します。path=creator.dicon
DEBUG 2010-11-23 23:12:53,937 [main] S2Containerを作成しました。path=creator.dicon
DEBUG 2010-11-23 23:12:53,937 [main] S2Containerを作成しました。path=hotdeploy.dicon
DEBUG 2010-11-23 23:12:54,031 [main] S2Containerを作成します。path=app.dicon
DEBUG 2010-11-23 23:12:54,031 [main] S2Containerを作成します。path=convention.dicon
DEBUG 2010-11-23 23:12:54,046 [main] S2Containerを作成しました。path=convention.dicon
DEBUG 2010-11-23 23:12:54,046 [main] S2Containerを作成します。path=aop.dicon
DEBUG 2010-11-23 23:12:54,109 [main] S2Containerを作成しました。path=aop.dicon
DEBUG 2010-11-23 23:12:54,109 [main] S2Containerを作成します。path=j2ee.dicon
DEBUG 2010-11-23 23:12:54,109 [main] S2Containerを作成します。path=jta.dicon
DEBUG 2010-11-23 23:12:54,156 [main] S2Containerを作成しました。path=jta.dicon
DEBUG 2010-11-23 23:12:54,156 [main] S2Containerを作成します。path=jdbc.dicon
DEBUG 2010-11-23 23:12:54,203 [main] S2Containerを作成しました。path=jdbc.dicon
DEBUG 2010-11-23 23:12:54,218 [main] S2Containerを作成しました。path=j2ee.dicon
DEBUG 2010-11-23 23:12:54,218 [main] S2Containerを作成します。path=s2jdbc.dicon
DEBUG 2010-11-23 23:12:54,218 [main] S2Containerを作成します。path=s2jdbc-internal.dicon
DEBUG 2010-11-23 23:12:54,234 [main] S2Containerを作成しました。path=s2jdbc-internal.dicon
DEBUG 2010-11-23 23:12:54,343 [main] S2Containerを作成しました。path=s2jdbc.dicon
DEBUG 2010-11-23 23:12:54,343 [main] S2Containerを作成しました。path=app.dicon

chronosCustomize.dicon を読み込むログは出ない。
まぁそうか。
サンプルの用に、
app.dicon
に、

これがあるので、これを追加。

DEBUG 2010-11-23 23:15:18,015 [main] S2Containerを作成します。path=chronos-extension.dicon
DEBUG 2010-11-23 23:15:18,015 [main] S2Containerを作成します。path=chronos-core.dicon
DEBUG 2010-11-23 23:15:18,015 [main] S2Containerを作成します。path=chronos-base.dicon
DEBUG 2010-11-23 23:15:18,031 [main] S2Containerを作成します。path=chronosCustomize.dicon
DEBUG 2010-11-23 23:15:18,046 [main] S2Containerを作成しました。path=chronosCustomize.dicon
DEBUG 2010-11-23 23:15:18,234 [main] S2Containerを作成しました。path=chronos-base.dicon
DEBUG 2010-11-23 23:15:18,343 [main] S2Containerを作成しました。path=chronos-core.dicon
DEBUG 2010-11-23 23:15:18,343 [main] S2Containerを作成しました。path=chronos-extension.dicon

この辺が出たので、読み込まれているのだろう。
ただ、プロセスを見てもChronosのプロセルは動いていない。



ここから起動させるまでが異様に時間がかかった。


web.xmlS2Chronosサーブレット登録をしないといけないっぽい。

<!-- for S2Chronos -->
<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起動

DEBUG 2010-11-23 23:25:59,593 [main] スケジューラ を 開始します.
WARN  2010-11-23 23:25:59,593 [main] ルートパッケージ(rootpackage.task)に対応するリソースがクラスパスから見つかりませんでした。
DEBUG 2010-11-23 23:25:59,593 [main] スケジューラ を 開始しました.

って言うのが出たので、
どうやらこれでいいのだろう。
しかし、なぜセットアップのところに
org.seasar.chronos.extension.servlet.S2ChronosServlet
の記述のことが一切書いていないのだろうか。
TomcatだからServletを登録するのは当たり前なのかな。
でも、別にwebとして表示するためのものじゃないし、
プロセス立ち上げるには、別途記述しておかないと分からない気がするなぁ。


1つくらいタスクを作ってみるか。

package rootpackage.task;

import org.apache.log4j.Logger;
import org.seasar.chronos.core.annotation.task.Task;
import org.seasar.chronos.core.annotation.trigger.CronTrigger;

@Task
@CronTrigger(expression = "0 */1 * * * ?")
public class OneMinuteTask {

	Logger logger = Logger.getLogger( OneMinuteTask.class );
	
	public void doExecute() {
		logger.debug( this );
	}
}

こんなTaskを作成

DEBUG 2010-11-23 23:36:54,484 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:36:54,484 [chronos-pool-1-daemonthread-1] cronExpression = 0 */1 * * * ?
DEBUG 2010-11-23 23:36:54,515 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:36:56,515 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:36:56,515 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:36:58,515 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:36:58,515 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:37:00,515 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:37:00,515 [chronos-pool-1-daemonthread-1] タスク (rootpackage.task.OneMinuteTask) を 開始します.
DEBUG 2010-11-23 23:37:00,515 [chronos-pool-1-daemonthread-2] タスク (rootpackage.task.OneMinuteTask) を 開始しました.
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-3-thread-1] BEGIN rootpackage.task.OneMinuteTask#doExecute()
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-3-thread-1] rootpackage.task.OneMinuteTask$$EnhancedByS2AOP$$8b9df2@13a848
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-3-thread-1] END rootpackage.task.OneMinuteTask#doExecute() : null
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-1-daemonthread-2] タスク (rootpackage.task.OneMinuteTask) を 終了します.
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-1-daemonthread-2] タスク (rootpackage.task.OneMinuteTask) を 終了しました.
DEBUG 2010-11-23 23:37:00,546 [chronos-pool-1-daemonthread-2] HOT deployを終了しました
WARN  2010-11-23 23:37:02,515 [chronos-pool-1-daemonthread-1] HOT deploy対象クラス(rootpackage.task.OneMinuteTask)が非対象クラスから参照されて通常のクラスローダにロードされています。
DEBUG 2010-11-23 23:37:02,515 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:37:02,546 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:37:04,546 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:37:04,546 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:37:06,546 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:37:06,546 [chronos-pool-1-daemonthread-1] HOT deployを終了しました
DEBUG 2010-11-23 23:37:08,546 [chronos-pool-1-daemonthread-1] HOT deployを開始します
DEBUG 2010-11-23 23:37:08,546 [chronos-pool-1-daemonthread-1] HOT deployを終了しました

ログが出た。

DEBUG 2010-11-23 23:37:00,546 [chronos-pool-3-thread-1] rootpackage.task.OneMinuteTask$$EnhancedByS2AOP$$8b9df2@13a848

これが出たので、成功だろう。


ただ、2秒ごとにデバッグログが出る。
chronosCustomize.dicon

2000L
の設定のためだろう。
どうやら


設定秒数ごとに登録されているタスクを全部見て、
起動するポイントだったら起動させる。


という感じだろうな。
なんかピンポイントで起動させるのかなぁと思っていたけど、
まぁ、よく考えたらそうだよなぁ
時の神なのですばらしいと思うほどの期待があっただけに、
意外と普通なことだったので、なんか残念だなぁ。
いや、まぁもちろんすごいのには変わりないんだけど。


自分で、「毎時分秒で起動するようなバッチ」を自分で作るのとどっちがいいのかなぁ。
まぁ、起動する部分や時間のトリガーを自分で作ったりしなくて良い分、
こっちを使うほうがいいなぁ。
一番気になっていたTomcatに組み込むということだが、
j5ik2oさんが2年も前wに、mainで呼び出せばバッチ処理ができると下記の記事で書いている
id:j5ik2o:20080916:1221535006
この辺を自分のバッチとしてプロジェクト作るのが一番よさそうだなぁ。