jBatch on JBoss EAP7 で、バッチ処理を実行する

jBatch on JBoss EAP7 で、バッチ処理を実行する

今回は、JBoss EAP7 での JavaEE7 バッチ処理である「Java EE 7 jBatch on EAP7」の設定について覗いてみます。JavaEE7 では、バッチ処理が標準化されてサポートされました。既存のバッチシステムを Java に置き換えて行く事が今後想像されます。この機会に少し学んでみましょう。

jBatchとは?

jBatch とは、JSR352(Batch Applications for Java Platform)で規定され、JavaEE7 で導入された Javaのバッチ処理の標準仕様 です。バッチ処理が標準化され、JavaEE7に準拠した環境 であればどこでも利用する事が出来ます。

バッチアプリケーション は、一連の処理を表す ジョブ の中に、個別のプロセスやスレッドを使用して、順次または同時に実行する一連の ステップ を記述することで構成されます。
各ステップは、チャンク指向 または、タスク指向 で開発することができます。

チャンク指向とタスク指向

チャンク指向、タスク指向とは何でしょうか?

チャンク指向 のステップは、主に、売上の集計処理や請求処理といった、比較的 実行時間がかかる処理 の実装に使用されます。リソースからの情報を処理するため、長く実行されますが、一般的に実行が長くなる事から 進捗を失わないようにチェックポイントを設けて中断された実行を再開する事が可能 です。チャンク指向のステップは、Reader、Process、Writer で構成されます。

タスク指向 では、チャンク指向のステップと異なり、ファイルシステム内の古いファイルを削除したり、電子メールの更新など、比較的短時間で実行するもの に使用されます。タスク指向のステップは、Batchlet で構成されます。

このコラムでは jBatch のプログラム詳細についての記載は省略しますが、ここでは、jBatch でチャンク指向・タスク指向の両方の方法で開発が可能ということを覚えていただけたらと思います。

JBatchのJobイメージ

Batch SubSystem

EAP7では、Batch Subsystem で、バッチジョブを構成する事ができます。Batch Subsystem は JBeret (Jベレー) に基づいています。
Batch Subsystem は Thread Pool と Job-Repository で構成されます。

Thread Pool は Job の各ステップを実行するためのスレッドを提供 します。

Job-Repository は Job を実行した時の実行状態、開始時点、終了時点など Job に関するログ情報を格納 します。EAP7の格納タイプは2種類あり、RAM上に記録する in-Memory タイプ と、DB 上に記録する JDBCタイプ を選択することが出来ます。in-Memory タイプは、サーバの再起動などで記録された情報は失われる ので、使用には注意が必要です。デフォルトは in-Memory タイプ です。

BatchSubSystemのイメージ

Web コンソール EAP7 BatchSubsystem

Web コンソール の EAP7 BatchSubsystem では以下の設定を行う事が出来ます。

  • Defaults      :デフォルトで使用するリポジトリやスレッドプールの指定をします。
  • In Memory    :In Memory リポジトリの追加
  • JDBC       :DBリポジトリ設定の追加
  • Thread Factories :Thread を作成する Factory の追加
  • Thread Pools   :Thread Pool の追加と設定

EAP7 BatchSubsystem Web コンソール

Batch の操作

Batch の操作は CLI を使用して操作する事が出来ます。

Batch Application の Deploy

deploy test-batch-job.war

Batch 起動

/deployment=test-batch-job.war/subsystem=batch-jberet:start-job(job-xml-name=testjob)

Batch 停止

/deployment=test-batch-job.war/subsystem=batch-jberet:stop-job(job-xml-name=testjob)

Batch 結果確認

/deployment=test-batch-job.war/subsystem=batch-jberet:read-resource(recursive=true,include-runtime=true)

Batch実行の成功した結果例

{
    "outcome" => "success",
    "result" => {"job" => {"test-batch-job.war" => {
        "instance-count" => 1,
        "running-executions" => 0,
        "execution" => {"1" => {
            "batch-status" => "COMPLETED",
            "create-time" => "2017-02-07T14:17:15.587-0500",
            "end-time" => "2017-02-07T14:17:15.602-0500",
            "exit-status" => "COMPLETED",
            "instance-id" => 1L,
            "last-updated-time" => "2017-02-07T14:17:15.602-0500",
            "start-time" => "2017-02-07T14:17:15.594-0500"
        }}
    }}}
}

まとめ

以上、EAP7 の jBatch と、Batch Subsystem の紹介でした。バッチ処理自体はそれほど複雑な仕組みではなく、非常にシンプルに利用することができる便利な機能です。ぜひ、試してみてはいかがでしょうか。

実際の操作や演習はトレーニングコースで取り扱っています。興味のある方は、ぜひご受講ください。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。