技術メモブログ

技術ネタの備忘録的なブログ。技術ネタ以外にも気になったことをつらつら書きます

jbatch

jBatch を扱う必要が出たので、試した内容のメモ書き

jBatch については以下のサイトを読めば概要は理解できるかと

待望のバッチ処理機能がJava EE 7で標準化。「jBatch」で何ができるのか、どう使うのか? - builder by ZDNet Japan

 

更に詳細な内容をつかむならこっち、上記の記事の上妻氏のスライドっぽい

(割りと古く、異なる内容もあるので参考程度としたほうがよい)

www.slideshare.net

 

で、スライド中にも出てくるいくつかの機能について動作を実施してみた

今回確認したのは以下の5つ

  • batchlet
  • chunk
  • decider
  • flow
  • listener

ジョブ XML の記載方法については以下のサイトを参考にさせて頂いた

The Java EE 7 TutorialのjBatchの章をテキトーに訳した - kagamihogeの日記

 

動作の検証は JAX-RS で実行を行うように

起動クラスのリソースクラスはこんなかんじ

 

また jBatch で必要となる、ジョブ XML の先頭、名前空間なんかには次のように記載を加えると、XML の要素候補などが出せるようになるので楽になる

(schemaLocation とかの部分)

gist04e2e6f97bc5787594f4

 

batchlet

使用するソースコード

使用するジョブ XML

 

実行結果は以下

batchlet_result

 

ジョブ XML の Step 定義で指定されたクラスが動作しただけ

至ってシンプルなので、特に説明することもなし

 

chunk

使用するソースコード

使用するジョブ XML

 

実行結果は以下 

chunk_result

 

chunk も特に説明することはなし

先頭のリンクのサイトで説明されている通り

 

decider

使用するソースコード

使用するジョブ XML

 

実行結果は以下

decider_result

 

decider 分岐は、XML 定義に記載したように、「to2」が返却されたときの step2(MyBatchlet2)が動作している。

(step3 の MyBatchlet3 は動作していない)

 

今回は next 要素しか試していないが、「end / fail / stop」なんかも同じようにすれば、指定する内容に沿った動作を行うことができる。

 

flow

 使用するソースコード

使用するジョブ XML

 

実行結果は以下

flow_result

 

flow は chunk と batchlet の組み合わせ。単に連続して動いているので、何が違うのかわかりにくいが、flow はグループ化なので、flow 内で定義する step から外の step を指定して動作させることはできない。

(flowStep1-1 の次に step2 を動作といったことはできない。複数の step を定義するが、そのうちの幾つかは連続してやらなければならない、といった場合に使用するものだと思う) 

 

listener

使用するソースコード

使用するジョブ XML

 

実行結果は以下

listener_result

 

listener も特に難しい内容はない

が、リスナークラスの実行順序は開始、終了時ともに、XMLで記述した上からとなっている。

(個人的には終了時の実行順序は、開始の逆ってのが使いやすいように思えるんだが)

 

 

次回は並列処理なんかを説明したい