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