バッチの記述

バッチの記述はグラフのような形なので、どういう記述がわかりやすいか、作りやすいかと悩みました。
今のところはこんな風に記述仕様と思ってます。

JobManager jobManager = new JobManager("hoge.dicon");
jobManager.addStage("firstStage").addStage("secondStage").addStage("thirdStage").execute();

この例だと、firstStage、secondStage、thirdStageと順番にデータが受け渡されます。
addStage("ステージ名")とすると、最後に追加したステージにつながるようにしています。
具体的には、firstStageでデータを読み込み、secondStageでデータを加工し、thirdStageでDBに格納といったことを想定しています。

JobManager jobManager = new JobManager("hoge.dicon");
jobManager.addStage("firstStage").addStage("secondStage1")
                                 .addStage("secondStage2", "firstStage").execute();

この例はfirstStageにsecondStage1、secondStage2がつながっています。
secondStage2を追加するところでは、どこにつなげるかを引数で指定しています。この場合、先の例のように最後に追加したステージ(secondStage1)ではなく、最初のステージ(firstStage)につなげたいのでこのような指定穂法になっています。
具体的にはfirstStageでデータを読み込み、secondStage1でDBにデータを格納、secondStage2でCSVファイルに出力といったことを想定しています。

JobManager jobManager = new JobManager("hoge.dicon");
jobManager.addStage("firstStage").addStage("secondStage", "firstStage", "queue").execute();

この例はfirstStageとsecondStageとの間にあるキューに特別なものを指定したい場合の記述方法です。
デフォルトのキューではどうしてもいやだといった場合にはこのような指定をすることになります。

ちなみに、JobManagerのコンストラクタで指定する"hoge.dicon"は内部でSeasar2を使っているためで、
ステージとかは基本的にはDIコンテナで管理したものをひっぱてくるようにしています。
そのためDIコンテナにステージを登録するときは"singleton"はNGとなります。
また、StageオブジェクトをそのままaddStage()することもできるようにはしています。