java の batch 処理 を main メソッド に、

public static void main(String[] args) {
    // 頑張る...
}
いう方式で、実装していたのですが、さすがに10本も超えてくると、いやこれはちょっと厳しいような気がしてきました。根性で実装しても良かったのですが、心がポッキリ折れてしまいましたので、java のバッチフレームを何か使おうという気持ちになりました。

Web 検索してみたところ、j-easy/easy-batch: The simple, stupid batch framework for Javaいうバッチフレームワークを見つけたので、どのような機能があるのか調べてみました。
調べた結果を記載します。


留意事項

この記事は、2015年12月に作成した後、2017年10月に補足説明を記載しました。
リンク切れ箇所等がありましたので、各種リンク先の修正を行なっています。


Java Batch FrameWork について

フレームワークについてまとめている方がいましたので、記事へのリンクを貼っておきます。
Javaバッチ処理 フレームワーク(OSS)ざっくりまとめ - ぬるすぺいす遍在 記事中 に 記載されているものは以下になります。
これらは、Job の構造を規定した framework フレームワークで、スケジュール実行、Job ネット構築については、他のライブラリやミドルウェアに任せる形になるかと思います。

Batch FrameWork という言葉だと、スケジューラ機能を持つ framework と、Job の構造を規定した framework が一緒くたになってヒットする気がします。
その他見つけたのは、スケジューラに関するものでした。

スケジューラ系

EasyBatch の説明


1. 概要

java の Batch フレームワークです。
Spring-Batch、JBatch と似たような機能を持っています。
サイトのどこかに機能比較ページがありましたが、Error 時にどこまで処理したか覚えておき、Retry 時にそこから実行する機能等は持ってなさそうです。1

2017年10月時点だと、Jeasy : Jeasus, it’s easy.. 配下のライブラリになっており、その他以下のライブラリが存在します。
ルールエンジンがStar数が多いですね。


2. サイト

リンクが切れていたため、2017年10月にリンク先を変更しました。


3. コア機能

以下は、2015年12月時点で、TopPage に記載されていた内容です。

  • LIGHTWEIGHT FRAMEWORK
    依存ライブラリがなく、ライブラリサイズが小さい。

  • POJO-CENTRIC DEVELOPMENT
    POJO 中心。
    RecordReader、Mapper、Processer 等が POJO 。
    戻り値として、カスタム DTO を用いることができる。2

  • DECLARATIVE DATA VALIDATION
    Validation によるデータ検証機能。

  • PARALLEL EXECUTION
    JOB を並列に実行する機能。

  • JMX MONITORING
    バッチ実行状況を JMX interface でモニタリングができる。

  • MODULAR ARCHITECTURE
    Batch 処理自体がモジュールの組み合わせで動作するため、モジュール単体を他の Batch で流用使用できる。 3


4. 公式なチュートリアルコード

リンクが切れていたため、2017年10月にリンク先を変更しました。
easy-batch/easybatch-tutorials at master · j-easy/easy-batch


使ってみようと思った経緯

使うに至る経緯を時系列で記載します。
1. public static void main(String[] args)直に Batch を書くのが辛くなってきた。
2. google で java batch framework検索したら、Spring Batch、jBatch がヒット。
3. glassfish 上で動かす想定なので、jBatch で試しに実装をしてみる。
4. xml を書くのが、辛いと感じるが頑張る。
5. EntityManager を DI しようとしたら、guice が使えない。
6. java - JSR-352 in Google Guice’d standalone batch - Stack Overflow見る限り今のところ、やはり、CDI のみサポートしている。
7. google で java batch framework light weight検索したら、EasyBatch がヒット。
8. guice で DI ができそう。且つ、xml 不要。

まとめると

DI に guice を使っていて、JBatch だと 今のところ CDI しか使えなさそうな雰囲気を感じとり、EasyBatch を使うことにしました。4


実際書いたコード

後日、example を作成し記事にしました。version が 4.0.0ものですが、よろしければご確認ください。
Java EasyBatch 実装サンプルを作成してみました。 | Monotalk

以上です。


  1. Spring Batch、jBatch の方が多機能です。 

  2. この部分の訳はあまり自信がありません。 

  3. Spring Batch の chunk と同じような機能です。 

  4. guice 使えたら J2EE 標準 なので JBatch でよいかなと思います。 

コメント