Batchverarbeitung in JEE7 - Teil 2

Batchlaufzeitumgebung

Das Konzept der Verarbeitungskontexte ist der Schlüssel zum Verständnis der Batchverarbeitung in JEE7.

Ausführungskontexte

JobContext und StepContext

Wenn ein Step auf seine Metadaten zugreifen oder Daten für den Wiederanlauf sichern möchte, benötigt er Zugriff auf seinen Ausführungskontext (StepContext). Dieser hält  einen speziellen Datenbereich für die aktuelle Ausführung dieses Steps bereit. Insbesondere haben unterschiedliche Steps unterschiedliche Ausführungskontexte.

Technologisch wird dieser Ausführungskontext mit einem aus anderen Technologien bekannten Konzept des thread-affinen Kontext umgesetzt.

Hierbei stellt die Batchlaufzeitumgebung sicher, dass für den Step, der im aktuellen Thread ausgeführt wird, der richtige StepContext an diesen Thread gebunden wird. Somit wird jedem Step sein eigener Ausführungskontext während der gesamten Verarbeitung zur Verfügung gestellt.

Neben Informationen über Namen und Eigenschaften (Properties) des Steps stellt der StepContext zwei unterschiedliche Datenbereiche zur Verfügung.

  • Der Step kann dem StepContext zu persistierende Daten übergeben. Diese werden über die Ausführung des Stepshinaus gesichert und werden beim Wiederanlauf dem Step übergeben.
  • Transiente (d.h. nicht persistente) Daten gelten nur während der Ausführung eines Steps. Diese Daten werden genutzt, um zwischen unterschiedlichen Komponenten eines Steps Informationen auszutauschen.

Genau wie für Steps existiert auch ein Ausführungskontext für den gesamten Job, der sogenannte JobContext. Dieser steht allen Steps des Jobs während ihrer Verarbeitung zur Verfügung.

Neben den Informationen über den Job und dessen aktueller Ausführung liefert der JobContext die aktuellen JobProperties (siehe Batch Properties). Zusätzlich kann er transiente Daten übernehmen, mit deren Hilfe Daten zwischen unterschiedlichen Steps ausgetauscht werden können.

Der Zugriff auf StepContext und JobContext wird durch die Batchlaufzeitumgebung via Dependency Injection bereitgestellt (siehe Listing 1).

Listing 1 Zugriff auf StepContext und JobContext

@Inject JobContext jobContext;
@Inject StepContext stepContext;

Mit Hilfe des Contexts können

  • spezifische Properties an den Job/Step übergeben werden,
  • Daten zur Laufzeit gesichert und beim Wiederanlauf übergeben werden und
  • Daten zwischen Steps und innerhalb von Steps ausgetauscht werden.

Scope und Lebenszyklus

Alle Artefakte, die innerhalb einer Batchverarbeitung instanziiert werden, haben eine definierte Sichtbarkeit (Scope). So ist eine Instanz eines ItemReaders nur für seinen aktuellen Step sichtbar. Wird der Step beendet, so ist auch die Instanz des ItemReaders nicht mehr gültig. Sie ist an den Lebenszyklus des Steps gebunden (genauer: an den Lebenszyklus der Instanz des Steps).

Es gibt drei unterschiedliche Lebenszyklen: den des Jobs, des Steps und der Partition (siehe unten). Alle Instanzen von Job-Artefakten sind genau einem dieser Lebenszyklen zugeordnet.


Jetzt teilen: