Batchverarbeitung in JEE7 - Teil 4

Ablaufsteuerung eines Jobs

Die Konfiguration eines Jobs (siehe Batchverarbeitung in JEE7 - Teil 3) zeigt, wie ein Job konfiguriert wird. Damit sind einfache Jobs zu konfigurieren.

Die Ablaufsteuerung eines Jobs befasst sich einerseits mit der Ausführung eines Jobs und anderseits mit dem Übergang zwischen den einzelnen Steps.

Im Standardfall werden Steps sequentiell und innerhalb eines Threads verarbeitet. Aber die JSL bietet Sprachmittel, um auch andere Verarbeitungsabläufe zu beschreiben.

Diese Sprachmittel werden in diesem Teil vorgestellt.

Nebenläufige Verarbeitung – Split

In Normalfall werden in einem Job die einzelnen Steps nacheinander abgearbeitet. Es sind allerdings auch andere als eine sequentielle Ablaufszenarien vorzustellen. Der Ablauf von Steps innerhalb eines Jobs heißt Flow. Diese Ablaufszenarien innerhalb eines Jobs heißen Flows. Flows können Steps, aber auch weitere Flows enthalten.

Flows können so konfiguriert werden, dass sie nebenläufig ausgeführt werden (Split). Jeder Flow wird dann in einem eigenen Thread ausgeführt. Ein Split ist also eine  Gruppe von Flows, die parallel ausgeführt werden. Die Batchlaufzeitumgebung startet die einzelnen Flows. Sind alle Flows beendet, so verzweigt die Batchlaufzeitumgebung zum nachfolgenden Step/Flow. Auf diese Weise wird das Ende der einzelnen Flows synchronisiert und zu einem gemeinsamen Ende zusammengeführt.

Abbildung 3 zeigt den Verarbeitungsablauf eines Splits, der aus drei Flows besteht. Innerhalb des Flows flow1 sind zwei Steps konfiguriert, welche sequentiell verarbeitet werden. Sind alle Flows beendet, so wird zu StepA verzweigt.

Dieser Mechanismus erlaubt eine parallele Verarbeitung. Dazu müssen die Arbeitsabläufe, die parallelisiert werden sollen, in jeweils einem Flow beschrieben werden und diese Flows in einem Split zusammengefasst werden.

Die Batchlaufzeitumgebung ist für das Management der Threads zuständig und entscheidet, welche Flows nebenläufig auszuführen sind. Sie ist ebenso für die Synchronisierung der parallel ablaufenden Splits verantwortlich.

Von Schritt zu Schritt – Transitionen

Transitionen beschreiben, wie die Verarbeitung nach Ende eines Steps weitergeht. Es muss entschieden werden, ob der gesamte Job beendet oder zu einem nachfolgenden Step verzweigt wird.

Ist der Step erfolgreich beendet, so kann mittels des next-Attributs der nachfolgende Step vereinbart werden. Fehlt dieser, so wird der Job beendet.

Neben dieser Transition für den Positivfall bietet die JSL weitere Sprachmittel, um komplexere Abläufe zu steuern. Diese werten den Status aus, welchen der Step nach seinem Ende besitzt (step exist status).

Listing 4 Verzweigung des Ablaufs mittels next-Element

<step id="Step1">
       <next on="COMPLETE" to="Step2"/>
      <fail on="FAILED" exit-status="EARLY COMPLETION"/>
</step>

Folgende Sprachelemente erweitern die Möglichkeiten der Ablaufsteuerung:

  • next-Element verzweigt zum nächsten Step/Split/Flow (siehe Listing 4),
  • fail-Element beendet den Job und markiert diesen als fehlerhaft beendet (siehe Listing 4),
  • stop-Element beendet den Job und markiert diesen als angehalten,
  • end-Element beendet den Job und markiert diesen als ordnungsgemäß beendet.

Darüber hinaus ermöglicht eine sog. Decision eine programmatische Verzweigung. Eine Decision kann als Ziel einer Transition angesteuert werden und liefert die ID des nächsten Steps/Flows.

Die Ablaufsteuerung wird auf der Ebene der Steps/Flows konfiguriert.

Wiederanlauf

Falls ein Job zu einem beliebigen Zeitpunkt seiner Verarbeitung gewollt oder ungewollt abbricht, muss es möglich sein, diesen Job zu wiederholen und dort fortzufahren, wo er abgebrochen ist. Daten, die erfolgreich verarbeitet wurden, sollen nicht nochmals untersucht werden.

Die Batchlaufzeitumgebung weiß nichts über die Geschäftslogik und die verarbeiteten Daten. Daher müssen ihr die Wiederanlaufinformationen bereitgestellt werden. Die Aufgabe der Batchlaufzeitumgebung ist,

  • diese Informationen im richtigen Moment abzufragen,
  • sie zu persistieren, um das Ende des Jobs zu überstehen,
  • sie beim Wiederanlauf zu übergeben.

Wiederanlaufinformationen beschreiben den aktuellen Zustand der Verarbeitung, so dass mit ihrer Hilfe deutlich wird, welche Daten bereits verarbeitet wurden. Um den aktuellen Zustand der Verarbeitung eines Steps vollständig zu beschreiben, werden sowohl Informationen über den Stand des Einlesens (ItemReader) als auch des Schreibens (ItemWriter) benötigt.

Wiederanlaufinformationen sind naturgemäß an Transaktionen gebunden. So überrascht es nicht, dass die Batchlaufzeitumgebung sie unmittelbar vor dem Ende der Transaktion abfragt (siehe  Fehler: Referenz nicht gefunden).

Wird eine JobInstance erneut gestartet und liegen für einen nicht abgeschlossenen Step Wiederanlaufinformationen vor, so erhalten ItemReader und ItemWriter diese bei der Instanziierung und können sich entsprechend ausrichten.


Jetzt teilen: