Batchverarbeitung in JEE7 - Teil 3

Beschreibungssprache für Jobs (JSL)

In Batchverarbeitung in JEE7 – Teil 1: Konzepte wurden die Konzepte der Batchverarbeitung vorgestellt. In diesem Teil wird vorgestellt, wie ein Job konfiguriert wird.

Zur Konfiguration eines Jobs wurde eine eigene domänenspezifische Sprache entwickelt, die JSL (Job Specification Language). Diese basiert auf XML.

Mittels der JSL werden die einzelnen Artefakte des Jobs wie Steps, Chunks oder Batchlets konfiguriert, sowie die Abarbeitungsfolge der Steps des gesamten Jobs festgelegt. Dazu besitzt die JSL Sprachmittel, um den Übergang zwischen Steps zu definieren (Transitionen). Dieses Thema wird im Einzelnen in Von Schritt zu Schritt – Transitionen behandelt.

Im Listing 2 sehen Sie die Konfiguration eines Jobs mit genau einem Step. Dessen Chunk hat eine Größe von 5. ItemReader/ItemProcessor/ItemWriter sind explizit zugewiesen.

Listing 2 Beispiel für eine Job-Konfiguration mit der JSL

<job id="payroll" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0">
  <step id="process">
     <properties>
        <property name="filesystem" value="postings"/>
     </properties>
     <chunk item-count="5">
        <properties>
           <property name="xyz" value="#{jobParameters['abc']}"/>
           <property name="infile.name" value="#{jobProperties['filesystem']}.txt"/>
        </properties>
        <reader ref="SimpleItemReader"></reader>
        <processor ref="SimpleItemProcessor"></processor>
        <writer ref="SimpleItemWriter"></writer>
     </chunk>
   </step>
</job>

Jeder Step besitzt seine jobweit eindeutige ID. Diese wird genutzt, um den Verarbeitungsablauf innerhalb eines Jobs zu definieren.

Batch Properties

Batch Properties dienen der Konfiguration eines Jobs. Den Artefakten eines Jobs wie Chunks, Steps oder ItemReader können eigene Properties zugewiesen werden. Die Werte dieser Properties können einerseits fest vereinbart oder aber andererseits durch Verweis auf andere Konfigurationsgrößen gewonnen werden.

Im Listing 2 wird in Zeile 04 die Property filesystem im Kontext des Steps mit der ID process definiert und der Wert postings gesetzt. In Zeile 09 wird auf diese Property Bezug genommen und deren Wert als neuer Wert der Propertyinfile.name genutzt.

Neben Properties können auch JobParameter (siehe Zeile 08) oder System Properties referenziert werden. Der Verweis auf JobParameter bei der Wahl des Wertes einer Property ist Best Practice, um JobParameter in die Konfiguration einfließen zu lassen.

Im Listing 2 wird die Hierarchie innerhalb der Definition eines Jobs deutlich. Ein Step gehört zu genau einem Job, ein ItemReader zu genau einem Step. Die Gültigkeit von Properties wird durch die Hierarchie in der Jobdefinition bestimmt.

Auf Properties eines Steps oder Jobs kann mit Hilfe der entsprechenden Ausführungskontexte zugegriffen werden. Andere Artefakte wie ItemReader oder ItemProcessor, welche keinen eigenen Ausführungskontext besitzen, greifen auf ihre Properties mittels Dependency Injection zu (siehe Listing 3).

Listing 3 Zugriff auf Properties mittels Dependency Injection

@Inject @BatchProperty (“filename”) String fname;

Ablaufsteuerung durch Exceptions

Falls in der Verarbeitung von Items gemäß Fehler: Referenz nicht gefunden eine Ausnahme in Form eines unerwarteten Ausnahmezustands (Exception) auftritt, so werden die aktuelle Transaktion (rollback) und die Verarbeitung des gesamten Jobs abgebrochen. Dies ist die standardmäßige Reaktion auf eine Exception.

Soll als Reaktion auf eine Exception allerdings eine nochmalige Verarbeitung der betroffenen Items ohne Abbruch der Verarbeitung ausgelöst werden (retry), so sind die entsprechenden Exceptions in der Jobkonfiguration entsprechend zu qualifizieren. Diese werden in der Folge durch die Batchlaufzeitumgebung abgefangen und entsprechende Wiederholungen werden angestoßen.

Die JSL liefert eigene Sprachelemente, um Exceptions so zu qualifizieren, dass ihr Auftreten eine Wiederholung der Verarbeitung des Chunks auslöst, oder auch dass die Verarbeitung des Chunks ignoriert (skip) oder ein Rollback verhindert (no-rollback) wird.

Das Verhalten im Fehlerfall wird pro Step über Qualifizierung der Exceptions konfiguriert.

Beobachtung des Jobs – Monitoring

Mit Hilfe von sog. Listenern kann an einer Vielzahl von Erweiterungspunkten der Fortschritt der Verarbeitung beobachtet werden.

So können Listener definiert werden, die über Start/Ende der Ausführung eines Jobs/Steps oder über die einzelnen Schritte innerhalb einer Chunk-Verarbeitung informiert werden.

Metriken sind ein weiteres Instrument zur Beobachtung eines Steps. Am Ende eines jeden Steps kann über die Metriken die Anzahl der gelesenen/verarbeiteten/geschriebenen Items oder die Anzahl der durchgeführten Commit- oder Rollback-Operationen abgefragt werden.


Jetzt teilen: