1. 概要

1.1. 典型的なバッチ開発フロー

WebOTX Batch Serverでは、典型的なバッチの開発フローとして下記図のような流れを想定しています。

典型的な開発フロー
図1.1-1

まず、ジョブネットと呼ばれる複数のジョブからなる一連の処理フローを設計し、そのジョブネット内の各ジョブ(単位ジョブ)について設計を行います。
単位ジョブ設計では、その単位ジョブで実施すべき処理の内容と、その内容をどのようなステップ(ジョブステップ)に分解するかを決定します。その結果作成された単位ジョブ設計書、および、ジョブステップ設計書に基づいてジョブとジョブステップを実装します。

本書では、主に単位ジョブ実装とジョブステップ実装時のジョブ定義方法、および、ステップ定義方法について説明します。また、どのような場合にJavaのソースを作成する方法があるか、また、その場合の実装方法について説明します。

1.1.1. ジョブ

WebOTX Batch Server により定義するジョブは、複数のジョブステップをもち、ジョブの定義中に記載されたフローに基づいて順次 ジョブステップを実行します。

例えば、下記のように3つのジョブステップをもつジョブ1において、ステップ2が成功した場合はジョブ1を終了するが、ステップ2が失敗した場合はステップ3を実行してからジョブ1を終了するような定義を行うことが可能です。

ジョブ内のステップフロー
図1.1.1-1

単位ジョブ設計の際にはジョブをどのようなジョブステップに分解し、どのようなフローで実行するのかを決定します。

1.1.2. ステップ

WebOTX Batch Serverによって実行することが可能なジョブステップとして下記3種類のステップを提供しています。

ジョブステップ設計においては、初めにどの種類のステップとして定義するのかを決定します。

以下にそれぞれの種類についての概要を説明します。

1.1.2.1. レコード処理ステップ

レコード処理ステップはデータベースやファイルといったリソース に対して順次レコードの読み書きを行うステップです。

ItemReader、ItemProcessor、ItemWriterというJavaインタフェースを介して処理を実行します。

レコード処理ステップ
図1.1.2.1-1

ItemReaderと呼ばれるレコード読込部品が順次指定されたリソースからデータを読み出し、全てのレコードを読み出すまで処理を繰り返します。

この繰り返し処理は下記図のとおり、あらかじめ指定したサイズのチャンク毎にレコードの読込や、トランザクションのコミット、または、ファイルリソースへの書き出しを行います。

レコード処理シーケンスとトランザクション
図1.1.2.1-2

読込んだレコードはJavaのオブジェクトに変換する必要があります 。作成するジョブステップの要件やレコードデータに応じたJavaのコーディングを行います。

変換されたオブジェクトはItemProcessorによって適切なデータに加工し、ItemWriterによって加工済みデータを出力リソースに書き込みます。

各処理中に例外が発生した場合にその処理をリトライ、または、スキップするかどうかを設定することができます。これら設定を行わない場合、例外が発生したステップは失敗したものと判断されます。

1.1.2.2. Javaメソッド実行ステップ

Javaメソッド実行ステップは、指定したJavaのメソッドを一度だけ呼び出すステップです。

レコード処理ステップのような繰り返し処理は行いません。

呼び出したJavaのメソッドで例外が発生すると、リトライやスキップ等の処理は行われず、そのステップが失敗したものと判断します。

また、このステップはトランザクションを実行しないため、必要に応じて指定したメソッド内部で独自にトランザクションを開始させる必要があります。

例えば、ストアド・プロシージャの呼び出し等を行うためのステップとして利用することが可能です。

Spring FrameworkのJdbcTemplateと組み合わせることで、SQL文の指定のみでJavaのコーディングをすることなくステップを定義できます。

1.1.2.3. コマンド実行ステップ

コマンド実行ステップは、指定した外部コマンドを一度だけ呼び出すステップです。

レコード処理ステップのような繰り返し処理、リトライ、スキップは行いません。

コマンドの戻り値を判定してステップの成功・失敗を判断する部品を利用者の手で設定する必要があります。