Java EE 7 バッチ標準仕様について調べてみた

JavaOne2012でセッションを聞いてから、ずーっとさぼっていたがやっと調べた。

Batch Applications for the Java Platform (JSR352)

Javaバッチフレームワークの標準仕様がJava EE 7に向けて策定が進められている。
Spring Batchをベースに策定され、現在のステータスはPublic Reviewが終わった段階。上半期中には最終仕様が出てくると思う。詳細についてはJCPのページから確認できる。

なぜJavaでバッチ?

バッチというと、COBOLとか汎用機とかベテランとかそんな言葉が思い浮かぶが、やはり同じ開発プロジェクトでオンラインとバッチを両方開発するとき、プログラミング言語が変わるとメンバも変わってきて、コミュニケーションにも影響してくるからではないだろうか。

プログラミング言語は適材適所』という考え方ももちろんあると思うが、チーム構成と標準化を意識すると、1つのプロジェクトのなかでは開発言語が統一されているとやりやすいと思う。オンライン処理(Webアプリ)はJava EE 6でだいぶ省力化できるようになっているが、バッチ処理はOSSを使ったり、要件に応じて自分で共通フレームワークを開発することも多いのでは。そんなところに出てきたのはJava Batchだ。

Java Batchって何ができるのか?

主な機能としては以下がある(Public Review時点)。

1. 処理の流れを定義する (job/step の考え方)
2. 分割コミット : 一気にロールバックされないように、少しずつコミット
3. エラーハンドリング : ゴミデータが入っていても、落ちないバッチ
4. 並行処理 : マルチスレッド、複数マシンでの並行処理

色々調べたメモをSlide Shareにアップロードした。仕様書だけではうまく理解できなかった部分は、Spring Batchの仕様を参考にして書いている。そのため、実装 - Glass Fish が出てきたときには、記載している内容と動きが異なる場合があるのでご了承を(特にエラーハンドリング周り)。

マルチスレッド周りは『ステップ・パーティショニング』という、1つのステップを分割して実行する考え方があるようだが、うまく理解できなかった。実装が出てから動かしながら調べて、資料に反映したいと思う。