ステップ再試行処理
トランザクション・バッチ・ジョブにおいて processJobStep メソッドでエラーが発生したときは、ステップ再試行処理を使用してジョブ・ステップを再試行します。ステップ再試行ポリシーは xJCL で指定します。
それぞれのジョブ・ステップに、その独自のステップ再試行ポリシー構成があります。 ステップ再試行処理を有効にするには、xJCL の com.ibm.batch.step.retry.count ジョブ・ステップ・プロパティーにゼロ以外の値を指定します。
ステップ失敗時にどのような例外を再試行できるのかを指定する com.ibm.batch.step.retry.include.exception.class.<n> プロパティーや、ステップ失敗時にどのような例外を再試行できないのかを指定する com.ibm.batch.step.retry.exclude.exception.class.<n> プロパティーを使用することで、ステップ再試行処理の詳細を指定できます。 この 2 つのプロパティーは互いに排他的です。
バッチ・フレームワークは、ローカルのジョブ状況データベースでステップごとにステップ再試行処理を追跡します。 ステップ処理の終わりに、ジョブ・ログにメッセージが書き込まれます。 このメッセージでは、ステップが再試行された回数と、ステップが使用した合計クロック時間を示します。クロック時間の形式は HH:MM:SS:MMM です。ここで、HH は時間、 MM は分、SS は秒、MMM はミリ秒です。
以下のリストに、ステップ再試行プロパティーとその説明を示します。
- com.ibm.batch.step.retry.count
processJobStep メソッドのステップ処理でエラーが発生した場合にステップを何回再試行できるのかを指定します。 この限界回数に達すると、ステップ・エラーはそれ以上再試行されません。
BatchJobStepInterface.processJobStep メソッドは、throws java.lang.Exception 節をサポートしています。 processJobStep メソッドで発生したすべての例外が、ステップ再試行処理の対象になります。
ステップを再試行することは、ステップを再始動することと同じです。 BatchJobStepInterface.destroyJobStep メソッドは、ステップ・エラーの後で呼び出されます。 ステップを再始動する前にチェックポイント・トランザクションがロールバックされます。 BatchJobStepInterface.createJobStep メソッドは、ステップが再試行される際に呼び出されます。 ステップと関連付けられているすべてのバッチ・データ・ストリームが閉じられ、再試行時に再オープンされます。
ステップの再試行限度に達した後にステップでエラーが発生すると、 ステップは失敗し、ジョブは再始動可能状態で終了します。
ジョブ・ステップのコンテキストに再試行リスナーを登録すると、その再試行リスナーは、再試行可能な例外が発生するたびに制御権を受け取ります。 RetryListener.onError(Throwable t) メソッドは、失敗したステップが destroyJobStep メソッドに入る前、およびチェックポイント・トランザクションがロールバックされる前に呼び出されます。 RetryListener.onRetry(Throwable t) メソッドは、ステップが再試行される際、BatchJobStepInterface.createJobStep メソッドが呼び出される前に制御権を受け取ります。
RetryListener.onRetry メソッドが呼び出されるとすぐに、再試行リスナーは登録解除されます。 バッチ・アプリケーションでそれ以降もステップの再試行を listen するには、再試行リスナーを再登録します。
ステップの再試行可能回数を数える動作は、チェックポイントごとにゼロにリセットされます。 これは、再試行限界回数が事実上チェックポイントごとの限界回数であることを意味します。
ステップ再試行処理はデフォルトでは無効になっています。
- com.ibm.batch.step.retry.delay.time
ステップを再試行するまでの待機時間をミリ秒数で指定します。 この遅延動作は、失敗したステップで destroyJobStep メソッドが実行された後、およびチェックポイント・トランザクションがロールバックされた後に実行されます。 ただし、この遅延動作は、RetryListener.onRetry メソッドが呼び出される前に実行されます。
- com.ibm.batch.step.retry.include.exception.class.<n>
ステップが失敗した際に再試行可能な例外のリストを指定します。
<n> は整数です。 この変数は 1 から開始し、例外ごとに 1 ずつ増分してください。
例外を指定しなかった場合は、デフォルトとしてすべての例外がリストに組み込まれます。
このプロパティーの使用例を以下に示します。
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.include.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 ジョブ・ステップは、構造化照会言語 (SQL) 例外の場合にジョブ・ステップを再試行します。
- com.ibm.batch.step.retry.exclude.exception.class.<n>
ステップが失敗した際に再試行できない例外のリストを指定します。
変数 <n> は整数です。 この変数は 1 から開始し、例外ごとに 1 ずつ増分してください。
例外を指定しなかった場合は、デフォルトとしてどの例外もリストから除外されません。
このプロパティーの使用例を以下に示します。
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.exclude.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 ジョブ・ステップは、構造化照会言語 (SQL) 例外の場合にジョブ・ステップを再試行しません。
再試行リスナー
JobStepContext メソッドに再試行リスナーを登録して、例外の再試行を listen することができます。 再試行リスナーは、再試行可能な例外が発生し、ステップが再試行されるたびに制御権を受け取ります。
JobStepContextMgr.getContext().addRetryListener(new MyRetryListener());