dient dazu, Stan- dards im Java-Bereich zu etablieren. Jeder kann daran teilnehmen [1]. Wenn jemand einen neuen Standard etablieren möchte, reicht er einen JSR ein. Das Execu tive Committee, bestehend aus Firmen und Einzelperso- nen [2], entscheidet dann, ob der JSR generell zugelassen wird. Wenn das der Fall ist, wird eine Expertengruppe gegründet, die den Standard ausarbeitet. Am Ende ent- scheidet das Executive Committee, ob der JSR in der ausgearbeiteten Fassung akzeptiert wird. Der JSR 352 enthält die Standardisierung der Batch- verarbeitung im Java-Bereich [3]. Eingereicht wurde er im Oktober 2011 von IBM und dann auch angenom- men. Chris Vignola wurde Specification Lead. In der Expertengruppe sind IBM, Credit Suisse, Oracle, VM- ware und Red Hat sowie Simon Martinelli und Michael Minella als Einzelpersonen vertreten, wobei Michael Minella seit etwa einem Jahr Project Lead von Spring Batch ist. Seit Mai dieses Jahres ist die Spezifikation nun final und Teil von Java EE 7. Obwohl IBM einen star- ken Enterprise-Hintergrund hat, ist das Ziel des JSRs allerdings nicht nur die Java Enterprise Edition, sondern explizit auch die Standard Edition. Das Ergebnis orientiert sich stark an Spring Batch. So wurden die Begrifflichkeiten der Domäne und das Programmiermodell fast eins zu eins übernommen, und auch die Konfiguration eines Jobs in XML ähnelt einer Spring-Batch-Konfiguration stark. Der Ablauf eines Jobs ist ebenfalls identisch. Spring Batch wird die Spezifikation in der Version 3.0 (angekündigt für Herbst/Winter 2013) implementieren. Bisher gibt es bereits eine Implementierung im GlassFish 4 Application Server. Die Spezifikation schreibt übri- gens keine bestimmte Art der Dependency Injection vor, sodass eine Implementierung einerseits CDI, aber ande- rerseits auch Spring DI verwenden kann. Ganz pragmatisch werde ich zunächst einen einfachen Job vorstellen, der nichts anderes macht, als Daten auf die Konsole zu loggen, und die entsprechenden JSR- 352-Artefakte bei ihrem Vorkommen erläutert. Die Job-XML Die Job-XML beschreibt den Ablauf unseres Batchjobs (Listing 1). Dabei kann ein Job mehrere Steps enthalten. Über das Attribut next kann dabei die Reihenfolge der Steps bestimmt werden. Es gibt Batchlet- und Chunk- basierte Steps, wobei die Batchlet-basierte Verarbeitung alle Freiheiten lässt. Das referenzierte Batchartefakt (myBatchlet in Listing 1) muss nur das Interface javax. batch.api.Batchlet implementieren, und bei Start des Steps wird einmal die dort vorhandene Methode process aufgerufen. Diese Art der Verarbeitung eignet sich für vorbereitende oder abschließende Tätigkeiten wie das Kopieren und Löschen von Dateien oder für die Anbin- dung von Legacy-Code, der nicht Chunk-basiert ausge- führt werden kann. Sobald es um die Verarbeitung einer großen Menge von Datensätzen geht, ist die Chunk-basierte Verarbei- tung die richtige Wahl. Ein Datensatz wird dabei als Item bezeichnet. Das Attribut item-count bestimmt die Anzahl der Datensätze, die innerhalb einer Transaktion Artikelserie Teil 1: Java Config, Spring-Data-Support und Co. Teil 2: JSR 352 – Batch Applications for the Java Platform Teil 3: Spring XD – Ordnung für Big-Data-Datenströme JSR 352 – Batch Applications for the Java Platform Ein Standard für die Batchentwicklung Die Batchverarbeitung gehört zu den ältesten Verarbeitungsformen in der IT überhaupt, und doch gab es im Java-Bereich bisher keinen Standard dafür. Das hat sich nun mit dem finalen Release des Java Specification Requests 352 (Batch Applications for the Java Platform, JSR 352) geändert. Dieser zielt nicht nur auf die Enterprise Edition und ist dort Teil von Java EE 7, sondern explizit auch auf die Standard Edition. Eine erste Implemen- tierung gibt es bereits im GlassFish 4, weitere werden bald folgen. Höchste Zeit, sich die Spezifikation genauer anzusehen. © Software & Support Media GmbH 2 www.JAXenter.de javamagazin 4 | 2014