かとじゅんの技術日誌

技術の話をするところ

ジョブスケジューラを作ってみます

以下のようなPOJOなジョブクラスを扱えるジョブスケジューラを実装してみようかと思います。名前はChronos。
スケジューラはDIxAOPコンテナのSeasar2上に実装し、ジョブにはジョブメソッドを定義しそのフローを制御できる仕組みを提供します。ベースラインができたら、sourceforge.jpにでもソースを公開します。

package jp.grandtech.pegasus.chronos.job;

import jp.grandtech.pegasus.chronos.annotation.job.Group;
import jp.grandtech.pegasus.chronos.annotation.job.Next;

import org.seasar.framework.log.Logger;

public class PojoJob {

	private Logger log = Logger.getLogger(PojoJob.class);

	// エントリメソッド
	// 最初に実行するジョブもしくはジョブグループを指定します。
	@Next("groupA")
	public void initialize() {
		log.info("initialize");
	}

	// ------------------- JOB GROUP A
	// メソッドグループが開始したときに呼ばれます
	@Next("jobA")
	public void startGroupA() {
		log.info("startGroupA");
	}

	// ジョブメソッドA
	@Group("groupA")
	@Next("jobB")
	public void doJobA() {
		log.info("doJobA");
	}

	// ジョブメソッドB
	@Group("groupA")
	public void doJobB() {
		log.info("doJobB");
	}

	// メソッドグループが終了したときに呼ばれます
	@Next("groupB")
	public void endGroupA() {
		log.info("endGroupA");
	}

	// ------------------- JOB GROUP B
	// メソッドグループが開始したときに呼ばれます
	@Next("jobC")
	public void startGroupB() {
		log.info("startGroupB");
	}

	// ジョブメソッドC
	@Group("groupB")
	@Next("jobD")
	public void doJobC() {
		log.info("doJobC");
	}

	// ジョブメソッドD
	@Group("groupB")
	public void doJobD() {
		log.info("doJobD");
	}

	// メソッドグループが終了したときに呼ばれます
	@Next("jobE")
	public void endGroupB() {
		log.info("endGroupB");
	}

	// ------------------- JOB E
	// ジョブE
	@Next("jobF")
	public void doJobE() {
		log.info("doJobE");
	}

	// ------------------- JOB F
	// ジョブF
	public void doJobF() {
		log.info("doJobF");
	}

	// ジョブが破棄されるときに呼ばれます
	public void destroy() {
		log.info("destroy");
	}

}