バッチ・アプリケーションのタスクはバッチ・ステップに分割できます。
バッチ・ステップは、com.ibm.websphere.batch.BatchJobStepLocalInterface をビジネス・インターフェースとして
指定する Enterprise JavaBeans (EJB) に管理されるローカル側コンテナーとして実装されます。
バッチ・ジョブ・ステップは順番に実行されます。
BatchJobStepLocalInterface のコールバック・メソッドにより、Compute Grid エンドポイントは
バッチ・ジョブを実行するときバッチ・ステップを稼働できます。
バッチ・ステップ EJB は、一部のバッチ・ジョブのために実行するバッチ可能なビジネス・ロジックを含みます。
通常、バッチ・ステップはバッチ・データ・ストリームからレコードを読み取るコードを含んでおり、
そのレコードでビジネス論理を実行し、続いて、次のレコードの読み取りを継続します。
バッチ・ステップ EJB の processJobStep メソッドは、バッチ・ループで Compute Grid エンドポイント に呼び出されます。
このメソッドには、バッチ処理でデータを処理できるすべてのロジックが含まれています。
Compute Grid エンドポイントは、グローバル・トランザクションの下でバッチ・ステップ EJB メソッドを呼び出します。このグローバル・トランザクションは Compute Grid エンドポイント によって管理されます。
トランザクション・タイムアウトまたはトランザクション・コミット間隔などのトランザクションの動作は、
ステップが属するバッチ・ジョブに関連するチェックポイント・アルゴリズムによって制御されます。
以下の
Compute Grid エンドポイント・コールバック・メソッドは、
BatchJobStepLocalInterface にあり、以下にリストされている順序で
Compute Grid エンドポイントによって呼び出されます。
- setProperties(java.util.Properties properties): java.util.Properties オブジェクトの
バッチ・ステップに使用可能な XML ジョブ制御言語 (xJCL) で定義されたプロパティーを作成します。
このメソッドはグローバル・トランザクション内で呼び出されます。
- void createJobStep(): ステップに対してステップが初期化済みであることを示します。
バッチ・データ・ストリームへのハンドルを検索するなどの、初期化ロジックをここに置くことができます。
このメソッドはグローバル・トランザクション内で呼び出されます。
- int processJobStep(): このメソッドの戻りコードの整数がステップが処理を終了したことを示すまで、
バッチ・ループの Compute Grid エンドポイントによって繰り返し呼び出されます。
戻される戻りコードについては、バッチ API の BatchConstants を参照してください。
BatchConstants.STEP_CONTINUE の戻りコードは、
バッチ・ループでこのメソッドの呼び出しを続けることを Compute Grid エンドポイントに
シグナル通知します。
BatchConstants.STEP_COMPLETE の戻りコードは、ステップが完了したことを
Compute Grid エンドポイントに指示します。
ここで、呼び出しによって destroyJobStep が呼び出されます。
- int destroyJobStep(): ステップに対してステップが完了したことを示します。
このメソッドの整数の戻りコードは任意であり、バッチ・アプリケーション開発者が選択できます。
戻りコードは Compute Grid エンドポイント データベースに保存され、バッチ・ステップの戻りコードを表します。
結果アルゴリズムは、バッチ・ジョブに関連付けられているため、
この戻りコードは、そのバッチ・ジョブに渡されます。
バッチ・ジョブの xJCL に戻りコードに基づく条件ロジックがある場合、Compute Grid エンドポイントは、そのロジックを評価するために、この戻りコードを
使用します。
BatchJobStepLocalInterface の getProperties() メソッドは、現在、Compute Grid エンドポイントによって呼び出されていません。
このメソッドは、対称性および将来考えられる利用のためにインターフェースに組み込まれています。
バッチ開発のトラブルシューティング
- バッチ・コントローラー Bean のデプロイメント記述子は、
バッチ・アプリケーションの Enterprise JavaBeans (EJB) デプロイメント記述子で宣言される必要があり、
また、バッチ・アプリケーションで使用されるステップ・エンタープライズ Bean に対するローカル側 EJB 参照
が組み込まれていなければなりません。
各バッチ・アプリケーションにつき 1 つのコントローラー Bean のみ定義できます。
- すべてのバッチ・ステップ・メソッドのトランザクションの属性は必須に設定します。
- バッチ・アプリケーション開発者は、バッチ・ステップ・コールバック・メソッド内で行われる
トランザクション処理が Compute Grid エンドポイントによって開始される
グローバル・トランザクションを継承するようにしなければなりません。
このアクションにより、バッチ・ステップの下で実行される処理のみが各チェックポイントでコミットされ、
ステップが失敗した場合に確実にロールバックされます。
- バッチ・ステップがバッチ・データ・ストリーム (BDS) を使用し、そのデータが
バッチ・アプリケーションがデプロイされるアプリケーション・サーバーの
ファイル・システムに対してローカルである場合には、ジョブ再始動シナリオをサポートするステップを実行する必要があります。
そのようなバッチ・アプリケーションが複数のマシンで実行できるアプリケーション・サーバーに
デプロイされる場合、再始動要求がバッチ・ジョブが元々実行されていたマシンで受け入れられるという保証はありません。そのようなことが発生するのは、複数のノード・メンバーを持つノード・グループに存在する動的クラスターにバッチ・アプリケーションがデプロイされ、そのようなアプリケーションに対して実行されるバッチ・ジョブが取り消されて、その後、再始動される場合です。このシナリオでは、この配置により、異なるマシンで実行されるアプリケーション・サーバーに対して再始動要求が送信されます。
したがって、ファイルを基にしたアフィニティーが必要な場合、ジョブの再始動シナリオをサポートする
ために以下の解決策を適用できます。
- データが、バッチ・アプリケーションを開始できるすべてのマシンで等しく使用可能であることを確認します。
この例では、ネットワーク・ファイル・システムを使用します。
このアクションを使用して、アプリケーションのパフォーマンスが低下する可能性があります。
- ローカル・データが存在するマシンでのみ実行できる
アプリケーション・サーバーにアプリケーションをデプロイします。
このようにするには、1 つのメンバー・ノードしか持っていないノード・グループに存在する
動的クラスターにアプリケーションをデプロイします。