Verarbeitung für Abschnittswiederholungen
Verwenden Sie die Verarbeitung für Abschnittswiederholungen, um Jobabschnitte zu wiederholen, wenn bei der Ausführung der Methode "processJobStep" in einem transaktionsorientierten Stapeljob Fehler auftreten. Geben Sie die Richtlinien für Abschnittswiederholungen in der xJCL an.
Jeder Jobabschnitt hat eine eigene Richtlinienkonfiguration für Abschnittswiederholungen. Sie aktivieren die Verarbeitung für Abschnittswiederholungen, indem Sie für die Jobabschnittseigenschaft "com.ibm.batch.step.retry.count" in der xJCL einen Wert ungleich null angeben.
Sie können die Verarbeitung für Abschnittswiederholungen mit Eigenschaften optimieren. Mit der Eigenschaft "com.ibm.batch.step.retry.include.exception.class.<n>" legen Sie fest, welche Ausnahmen wiederholt werden können, wenn ein Abschnitt scheitert, und mit der Eigenschaft "com.ibm.batch.step.retry.exclude.exception.class.<n>" legen Sie fest, welche Ausnahmen beim Scheitern eines Abschnitts nicht wiederholt werden können. Die beiden Eigenschaften schließen sich gegenseitig aus.
Das Stapelframework verfolgt die Verarbeitung für Abschnittswiederholungen auf Abschnittsbasis in der lokalen Jobstatusdatenbank. Am Ende der Abschnittsverarbeitung wird eine Nachricht in das Jobprotokoll geschrieben. Die Nachricht gibt an, wie oft der Abschnitt wiederholt wurde, und die insgesamt für den Abschnitt benötigte Systemzeit. Das Format der Systemzeit ist HH:MM:SS:MMM, wobei HH die Stunden, MM die Minuten, SS die Sekunden und MMM die Millisekunden angeben.
Die folgende Liste enthält die Eigenschaften für die Verarbeitung für Abschnittswiederholungen und deren Beschreibungen.
- com.ibm.batch.step.retry.count
Gibt an, wie oft ein Abschnitt nach einem Fehler bei der Abschnittsverarbeitung für die Methode "processJobStep" wiederholt werden kann. Wenn der Grenzwert erreicht wird, werden die Wiederholungen eingestellt.
Die Methode "BatchJobStepInterface.processJobStep" unterstützt die java.lang.Exception-Klausel "Throws". Jede Ausnahme der Methode "processJobStep" kommt für die Verarbeitung für Abschnittswiederholungen infrage.
Die Wiederholung eines Abschnitts ist äquivalent zum Starten des Abschnitts. Die Methode "BatchJobStepInterface.destroyJobStep" wird nach dem Abschnittsfehler aufgerufen. Die Prüfpunkttransaktion wird vor dem Neustart des Abschnitts rückgängig gemacht. Die Methode "BatchJobStepInterface.createJobStep" wird aufgerufen, wenn ein Abschnitt wiederholt wurde. Alle Stapeldatenströme, die dem Abschnitt zugeordnet sind, werden geschlossen und bei der Wiederholung erneut geöffnet.
Wenn ein Fehler für den Abschnitt auftritt, nachdem der Wiederholungsgrenzwert für einen Abschnitt erreicht wurde, wird der Abschnitt als fehlgeschlagen eingestuft und der Job in einem wieder anlauffähigen Status beendet.
Wenn Sie einen Wiederholungslistener im Jobabschnittskontext registrieren, erhält der Wiederholungslistener die Steuerung bei jeder Ausnahme, die wiederholt werden kann. Die Methode "RetryListener.onError(Throwable t)" wird aufgerufen, bevor der fehlgeschlagene Abschnitt die Methode "destroyJobStep" aufruft und bevor die Prüfpunkttransaktion rückgängig gemacht wird. Die Methode "RetryListener.onRetry(Throwable t)" erhält die Steuerung, wenn der Abschnitt wiederholt wird, aber bevor die Methode "BatchJobStepInterface.createJobStep" aufgerufen wird.
Die Registrierung des Wiederholungslisteners wird unmittelbar nach Aufruf der Methode "RetryListener.onRetry" aufgehoben. Wenn die Stapelanwendung für weitere Abschnittswiederholungen empfangsbereit sein soll, registrieren Sie den Wiederholungslistener erneut.
Die laufende Wiederholungsanzahl für einen Abschnitt wird bei jedem Prüfpunkt auf null zurückgesetzt. Das bedeutet, dass das Wiederholungslimit eigentlich ein prüfpunktbasierter Grenzwert ist.
Die Verarbeitung für Abschnittwiederholungen ist standardmäßig inaktiviert.
- com.ibm.batch.step.retry.delay.time
Gibt an, wie lange (in Millisekunden) gewartet wird, bevor der Abschnitt wiederholt wird. Die Verzögerung tritt ein, nachdem der fehlgeschlagene Abschnitt mit der Methode "destroyJobStep" verarbeitet und die Prüfpunkttransaktion rückgängig gemacht wurde. Die Verzögerung tritt jedoch vor dem Aufruf der Methode "RetryListener.onRetry" ein.
- com.ibm.batch.step.retry.include.exception.class.<n>
Gibt eine Liste mit Ausnahmen an, die wiederholt werden können, wenn ein Abschnitt fehlschlägt.
Die Variable <n> ist eine ganze Zahl. Beginnen Sie mit dem Variablenwert 1, und erhöhen Sie den Wert bei jeder Ausnahme um jeweils eins.
Wenn Sie keine Ausnahmen angeben, werden standardmäßig alle Ausnahmen in die Liste aufgenommen.
Im folgenden Beispiel wird die Eigenschaft verwendet:
<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>
Der Jobabschnitt "WCGStep1" wiederholt einen Jobabschnitt beim Eintreten einer SQL-Ausnahme (Structured Query Language).
- com.ibm.batch.step.retry.exclude.exception.class.<n>
Gibt eine Liste mit Ausnahmen an, die nicht wiederholt werden können, wenn ein Abschnitt fehlschlägt.
Die Variable <n> ist eine ganze Zahl. Beginnen Sie mit dem Variablenwert 1, und erhöhen Sie den Wert bei jeder Ausnahme um jeweils eins.
Wenn Sie keine Ausnahmen angeben, werden standardmäßig keine Ausnahmen aus der Liste ausgeschlossen.
Im folgenden Beispiel wird die Eigenschaft verwendet:
<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>
Der Jobabschnitt "WCGStep1" wiederholt einen Jobabschnitt beim Eintreten einer SQL-Ausnahme (Structured Query Language) nicht.
Wiederholungslistener
Sie können einen Wiederholungslistener bei der Methode "JobStepContext" registrieren, um auf zu wiederholende Ausnahmen zu warten. Der Wiederholungslistener erhält die Steuerung, wenn eine Ausnahme, die wiederholt werden kann, eintritt und der Abschnitt wiederholt wird.
JobStepContextMgr.getContext().addRetryListener(new MyRetryListener());