以下のような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"); } }