SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Java Batch – Der Standard für's Stapeln
Dirk Weil, GEDOPLAN GmbH
Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Konzeption und
Realisierung von IT-Lösungen
GEDOPLAN IT Training
Seminare in Berlin, Bielefeld, on-site
Java EE seit 1998
Vorträge
Veröffentlichungen
Java Batch – Der Standard für's Stapeln 2
Batch
Was?
Stapelverarbeitung
"Menge von Daten, die vom Computer i. A. ohne Eingriff des Benutzers
der Reihe nach abgearbeitet wird" (Wikipedia)
Wozu?
Verlagerung / Optimierung von Ausführungszeiten
Ausnutzung freier Ressourcen
Verwaltung umfangreicher, wiederholter Tätigkeiten
Wie?*
Großrechner
Spring Batch
Scheduler mit individueller Programmierung
3Java Batch – Der Standard für's Stapeln
* bisher
Java Batch
Batch Applications for the Java platform
JSR-352
basiert stark auf Spring Batch
Bestandteil von Java EE 7
WildFly: JBeret
GlassFish: jsr352-RI
auch in SE-Umgebung nutzbar
4Java Batch – Der Standard für's Stapeln
Java Batch
Features:
Task und Chunks
Exception Handling
Checkpoints
Start, Restart, Abort
sequenzielle und parallele Ausführung
Job Repository
Job Control
5Java Batch – Der Standard für's Stapeln
Job Configuration & Runtime
6Java Batch – Der Standard für's Stapeln
Job Step
JobInstance
JobExecution StepExecution
*
*
* *
*
Batch-Stammdaten
konkreter Auftrag
einzelne Ausführung
Task-orientierte Steps
Batchlet
i. A. kleine Aufgabenstellung / kurze Ausführung
z. B. Initialisierung, Cleanup
7Java Batch – Der Standard für's Stapeln
Job Step* Batchlet
@Named
public class HelloWorldBatchlet extends AbstractBatchlet {
public String process() throws Exception {
System.out.println("Hello, batch world!");
Job Descriptor
META-INF/batch-jobs/jobname.xml
8Java Batch – Der Standard für's Stapeln
<job
id="demo1_helloWorldBatchlet"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
version="1.0">
<step id="step1">
<batchlet ref="helloWorldBatchlet"/>
</step>
</job>
Job-Start
JobOperator erlaubt Zugriff auf das Job Repository
9Java Batch – Der Standard für's Stapeln
JobOperator jobOperator = BatchRuntime.getJobOperator();
long executionId = jobOperator.start("demoJob1", new Properties());
JobInstance jobInstance = jobOperator.getJobInstance(executionId);
JobExecution jobExecution = jobOperator.getJobExecution(executionId);
Demo
Simpler Batchlet-Job
10Java Batch – Der Standard für's Stapeln
Chunk-orientierte Steps
~EVA
ItemReader liest Eingabe
ItemProcessor verarbeitet Daten
ItemWriter schreibt Ausgabe
11Java Batch – Der Standard für's Stapeln
Job Step* ItemProcessor
ItemReader
ItemWriter
Chunk-orientierte Steps
Chunk Size bestimmt Anzahl gemeinsam verarbeiteter Items
12Java Batch – Der Standard für's Stapeln
ItemProcessor
ItemReader
ItemWriterje 1 Item n Items
Wiederholung, bis Eingabe erschöpft
n ItemsE A
Job Descriptor
META-INF/batch-jobs/jobname.xml
13Java Batch – Der Standard für's Stapeln
<job id="demo04_countryImportFixed" version="1.0">
<step id="init" next="import">
<batchlet ref="countryCleanBatchlet" />
</step>
<step id="import">
<chunk item-count="10">
<reader ref="countryItemReader" />
<processor ref="countryItemProcessor" />
<writer ref="countryItemWriter" />
</chunk>
</step>
</job>
Item Reader
14Java Batch – Der Standard für's Stapeln
@Named
public class CountryItemReader extends AbstractItemReader {
private BufferedReader reader;
public void open(Serializable checkpoint) throws IOException {
this.reader = …;
}
public Object readItem() throws IOException {
return this.reader.readLine();
}
Item Processor
15Java Batch – Der Standard für's Stapeln
@Named
public class CountryItemProcessor implements ItemProcessor {
public Object processItem(Object item) throws Exception {
String[] attributes = ((String) item).split("t");
String isoCode = attributes[0];
String name = empty2Null(attributes[1];
Country country = new Country(isoCode, name, …);
return country;
}
Item Writer
16Java Batch – Der Standard für's Stapeln
@Named
public class CountryItemWriter extends AbstractItemWriter {
@Inject
CountryRepository countryRepository;
@Override
public void writeItems(List<Object> items) {
for (Object item : items) {
this.countryRepository.persist((Country) item);
}
}
Job und Step Status
Step endet mit Status
explizit gesetzt
durch Exception
erzeugt ebenfalls Batch Status
zusätzlicher String kann als Exit Status erzeugt werden
17Java Batch – Der Standard für's Stapeln
Job Control
18Java Batch – Der Standard für's Stapeln
ABANDONED
COMLETEDSTARTEDSTARTING
STOPPING
STOPPED
FAILED
restart()
abandon()
abandon()
Demo
Chunks, DB-Import, Properties
19Java Batch – Der Standard für's Stapeln
Exception Handling
Exceptions führen per Default zu FAILED
Andere Behandlung pro Chunk:
Retryable Exceptions führen zur Wiederholung
Skippable Exceptions werden ignoriert
20Java Batch – Der Standard für's Stapeln
<step id="import">
<chunk item-count="3" retry-limit="2">
<reader ref="countryItemReader" />
<processor ref="countryItemProcessor" />
<writer ref="countryItemWriter" />
<retryable-exception-classes>
<include class="de.gedoplan.….SomeException" />
</retryable-exception-classes>
Checkpoints
Item Reader und Writer können Checkpoints liefern
beliebiges Objekt ( frei programmierbar)
letzter Checkpoint wird bei Restart wieder angeliefert
ermöglicht Wiederaufsetzen nach Fehler
Reader und Writer haben unabhängige Checkpoints
kann/sollte transaktionales Verhalten unterstützen
21Java Batch – Der Standard für's Stapeln
Demo
Checkpoints, automatische Retries
22Java Batch – Der Standard für's Stapeln
Step-Reihenfolge
Job beginnt mit erstem Step
Jeder Step kann Folge-Steps deklarieren
unterschiedliche je nach Status
23Java Batch – Der Standard für's Stapeln
<job …>
<step id="first" next="second">
<batchlet …/>
</step>
<step id="second">
<batchlet …/>
<next on="Batchlet failure" to="third"/>
</step>
<step id="third">
Step-Reihenfolge
Decision, Transition  switch, case
(auch für Flows und Splits)
24Java Batch – Der Standard für's Stapeln
<job …>
<step … next="decider">
…
</step>
<decision id="decider" ref="SomeDecider" />
<next on="good" to="…" />
<fail on="bad" exit-status="Mist!" />
<end on="finished" exit-status="Fertig!" />
@Named
public class SomeDecider implements Decider {
public String decide(StepExecution[] executions) {
… return … ? "good" : "bad";
Flows
Folge von Steps *
25Java Batch – Der Standard für's Stapeln
<flow id="…" next="…">
<step id="…" …/>
<step id="…" …/>
* und Splits, Flows
Parallelisierung
Split = Mehrere Flows in unterschiedlichen Threads
26Java Batch – Der Standard für's Stapeln
<split id="…" next="…">
<flow id="…" …/>
<flow id="…" …/>
<flow id="…" …/>
Parallelisierung
Partition = Aufteilung der Items eines Steps auf mehrere Threads
nach Eingabequellen, Segmenten, Bereichen, …
statisch (im XML), dynamisch (mit PartitionMapper)
27Java Batch – Der Standard für's Stapeln
<job …>
<step …>
…
<partition>
<plan partitions="3">
<properties partition="0">
<property name="firstItem" value="0" />
</properties>
<properties partition="1">
<property name="firstItem" value="100" />
</properties>
Weitere Features
Properties
Parameter auf Job- und Step-Ebene
Listener
zusätzlicher Code (~Interceptor) auf Job-, Step- oder Step-Teil-
Ebene
28Java Batch – Der Standard für's Stapeln
Nachteile / Merkwürdigkeiten
Schwach getypte Schnittstellen
29Java Batch – Der Standard für's Stapeln
public interface ItemReader {
public Object readItem() throws Exception;
public interface ItemProcessor {
public Object processItem(Object item) throws Exception;
public interface ItemWriter {
public void writeItems(List<Object> items) throws Exception;
public interface ItemReader<I> {
public I readItem() throws Exception;
public interface ItemProcessor<I,O> {
public O processItem(I item) throws Exception;
public interface ItemWriter<O> {
public void writeItems(List<O> items) throws Exception;
Nachteile / Merkwürdigkeiten
API der Batch Runtime ID-orientiert, nicht Objekt-orientiert
Standard enthält keine Implementierungen für Standardaufgaben
Keine Vorgaben / Konfigurationsmöglichkeiten bzgl. Threads
Keine Vorgaben bzgl. Clustering
30Java Batch – Der Standard für's Stapeln
Fazit
JSR 352 erfindet das Rad nicht neu
viele De-facto-Standards eingearbeitet
enge Anlehnung an Spring Batch
"endlich Batch-Verarbeitung im EE-Kontext"
Trotz guter erster Version: Verbesserungen sind an vielen Stellen
möglich
31Java Batch – Der Standard für's Stapeln
More
http://www.gedoplan-it-training.de
Seminare in Berlin, Bielefeld, Inhouse
http://www.gedoplan-it-consulting.de
Reviews, Coaching, …
http://javaeeblog.wordpress.com/
http://gedoplan-it-consulting.de/expertenkreis-java/
 dirk.weil@gedoplan.de
@dirkweil
Java Batch – Der Standard für's Stapeln 32

Contenu connexe

En vedette

Jpa queries
Jpa queriesJpa queries
Jpa queriesgedoplan
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballastgedoplan
 
Versionierung mit GIT
Versionierung mit GITVersionierung mit GIT
Versionierung mit GITgedoplan
 
WildFly als Plattform moderner Enterprise-Anwendungen
WildFly als Plattform moderner Enterprise-AnwendungenWildFly als Plattform moderner Enterprise-Anwendungen
WildFly als Plattform moderner Enterprise-Anwendungengedoplan
 
Leichtgewichtige Microservices mit Java EE 7
Leichtgewichtige Microservices mit Java EE 7Leichtgewichtige Microservices mit Java EE 7
Leichtgewichtige Microservices mit Java EE 7gedoplan
 
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsjavaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsgedoplan
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBgedoplan
 
Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...
 Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl... Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...
Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...gedoplan
 
Apache camel
Apache camelApache camel
Apache camelgedoplan
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleichgedoplan
 

En vedette (13)

Jpa queries
Jpa queriesJpa queries
Jpa queries
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne BallastJava EE 7 - Enterprise-Anwendungen ohne Ballast
Java EE 7 - Enterprise-Anwendungen ohne Ballast
 
Versionierung mit GIT
Versionierung mit GITVersionierung mit GIT
Versionierung mit GIT
 
WildFly als Plattform moderner Enterprise-Anwendungen
WildFly als Plattform moderner Enterprise-AnwendungenWildFly als Plattform moderner Enterprise-Anwendungen
WildFly als Plattform moderner Enterprise-Anwendungen
 
Leichtgewichtige Microservices mit Java EE 7
Leichtgewichtige Microservices mit Java EE 7Leichtgewichtige Microservices mit Java EE 7
Leichtgewichtige Microservices mit Java EE 7
 
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevelsjavaPersistenceInActionFeaturesJenseitsDesEntryLevels
javaPersistenceInActionFeaturesJenseitsDesEntryLevels
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
 
Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...
 Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl... Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...
Infinispan / JBoss Data Grid - Schneller Zugriff auf große Datenmengen im Cl...
 
Apache camel
Apache camelApache camel
Apache camel
 
AngularJS
AngularJSAngularJS
AngularJS
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
 

Similaire à Java Batch – Der Standard für's Stapeln

Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Springdenschu
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersFDeitelhoff
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBasegedoplan
 
Fr os con2010_devel_nytprof
Fr os con2010_devel_nytprofFr os con2010_devel_nytprof
Fr os con2010_devel_nytprofRenee Baecker
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7msebel
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEEBenjamin Schmid
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
 

Similaire à Java Batch – Der Standard für's Stapeln (20)

Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
jBPM & Drools
jBPM & DroolsjBPM & Drools
jBPM & Drools
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
node.js
node.jsnode.js
node.js
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developers
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBase
 
Fr os con2010_devel_nytprof
Fr os con2010_devel_nytprofFr os con2010_devel_nytprof
Fr os con2010_devel_nytprof
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
Workshop: Besseres C#
Workshop: Besseres C#Workshop: Besseres C#
Workshop: Besseres C#
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
 

Java Batch – Der Standard für's Stapeln

  • 1. Java Batch – Der Standard für's Stapeln Dirk Weil, GEDOPLAN GmbH
  • 2. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Konzeption und Realisierung von IT-Lösungen GEDOPLAN IT Training Seminare in Berlin, Bielefeld, on-site Java EE seit 1998 Vorträge Veröffentlichungen Java Batch – Der Standard für's Stapeln 2
  • 3. Batch Was? Stapelverarbeitung "Menge von Daten, die vom Computer i. A. ohne Eingriff des Benutzers der Reihe nach abgearbeitet wird" (Wikipedia) Wozu? Verlagerung / Optimierung von Ausführungszeiten Ausnutzung freier Ressourcen Verwaltung umfangreicher, wiederholter Tätigkeiten Wie?* Großrechner Spring Batch Scheduler mit individueller Programmierung 3Java Batch – Der Standard für's Stapeln * bisher
  • 4. Java Batch Batch Applications for the Java platform JSR-352 basiert stark auf Spring Batch Bestandteil von Java EE 7 WildFly: JBeret GlassFish: jsr352-RI auch in SE-Umgebung nutzbar 4Java Batch – Der Standard für's Stapeln
  • 5. Java Batch Features: Task und Chunks Exception Handling Checkpoints Start, Restart, Abort sequenzielle und parallele Ausführung Job Repository Job Control 5Java Batch – Der Standard für's Stapeln
  • 6. Job Configuration & Runtime 6Java Batch – Der Standard für's Stapeln Job Step JobInstance JobExecution StepExecution * * * * * Batch-Stammdaten konkreter Auftrag einzelne Ausführung
  • 7. Task-orientierte Steps Batchlet i. A. kleine Aufgabenstellung / kurze Ausführung z. B. Initialisierung, Cleanup 7Java Batch – Der Standard für's Stapeln Job Step* Batchlet @Named public class HelloWorldBatchlet extends AbstractBatchlet { public String process() throws Exception { System.out.println("Hello, batch world!");
  • 8. Job Descriptor META-INF/batch-jobs/jobname.xml 8Java Batch – Der Standard für's Stapeln <job id="demo1_helloWorldBatchlet" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd" version="1.0"> <step id="step1"> <batchlet ref="helloWorldBatchlet"/> </step> </job>
  • 9. Job-Start JobOperator erlaubt Zugriff auf das Job Repository 9Java Batch – Der Standard für's Stapeln JobOperator jobOperator = BatchRuntime.getJobOperator(); long executionId = jobOperator.start("demoJob1", new Properties()); JobInstance jobInstance = jobOperator.getJobInstance(executionId); JobExecution jobExecution = jobOperator.getJobExecution(executionId);
  • 10. Demo Simpler Batchlet-Job 10Java Batch – Der Standard für's Stapeln
  • 11. Chunk-orientierte Steps ~EVA ItemReader liest Eingabe ItemProcessor verarbeitet Daten ItemWriter schreibt Ausgabe 11Java Batch – Der Standard für's Stapeln Job Step* ItemProcessor ItemReader ItemWriter
  • 12. Chunk-orientierte Steps Chunk Size bestimmt Anzahl gemeinsam verarbeiteter Items 12Java Batch – Der Standard für's Stapeln ItemProcessor ItemReader ItemWriterje 1 Item n Items Wiederholung, bis Eingabe erschöpft n ItemsE A
  • 13. Job Descriptor META-INF/batch-jobs/jobname.xml 13Java Batch – Der Standard für's Stapeln <job id="demo04_countryImportFixed" version="1.0"> <step id="init" next="import"> <batchlet ref="countryCleanBatchlet" /> </step> <step id="import"> <chunk item-count="10"> <reader ref="countryItemReader" /> <processor ref="countryItemProcessor" /> <writer ref="countryItemWriter" /> </chunk> </step> </job>
  • 14. Item Reader 14Java Batch – Der Standard für's Stapeln @Named public class CountryItemReader extends AbstractItemReader { private BufferedReader reader; public void open(Serializable checkpoint) throws IOException { this.reader = …; } public Object readItem() throws IOException { return this.reader.readLine(); }
  • 15. Item Processor 15Java Batch – Der Standard für's Stapeln @Named public class CountryItemProcessor implements ItemProcessor { public Object processItem(Object item) throws Exception { String[] attributes = ((String) item).split("t"); String isoCode = attributes[0]; String name = empty2Null(attributes[1]; Country country = new Country(isoCode, name, …); return country; }
  • 16. Item Writer 16Java Batch – Der Standard für's Stapeln @Named public class CountryItemWriter extends AbstractItemWriter { @Inject CountryRepository countryRepository; @Override public void writeItems(List<Object> items) { for (Object item : items) { this.countryRepository.persist((Country) item); } }
  • 17. Job und Step Status Step endet mit Status explizit gesetzt durch Exception erzeugt ebenfalls Batch Status zusätzlicher String kann als Exit Status erzeugt werden 17Java Batch – Der Standard für's Stapeln
  • 18. Job Control 18Java Batch – Der Standard für's Stapeln ABANDONED COMLETEDSTARTEDSTARTING STOPPING STOPPED FAILED restart() abandon() abandon()
  • 19. Demo Chunks, DB-Import, Properties 19Java Batch – Der Standard für's Stapeln
  • 20. Exception Handling Exceptions führen per Default zu FAILED Andere Behandlung pro Chunk: Retryable Exceptions führen zur Wiederholung Skippable Exceptions werden ignoriert 20Java Batch – Der Standard für's Stapeln <step id="import"> <chunk item-count="3" retry-limit="2"> <reader ref="countryItemReader" /> <processor ref="countryItemProcessor" /> <writer ref="countryItemWriter" /> <retryable-exception-classes> <include class="de.gedoplan.….SomeException" /> </retryable-exception-classes>
  • 21. Checkpoints Item Reader und Writer können Checkpoints liefern beliebiges Objekt ( frei programmierbar) letzter Checkpoint wird bei Restart wieder angeliefert ermöglicht Wiederaufsetzen nach Fehler Reader und Writer haben unabhängige Checkpoints kann/sollte transaktionales Verhalten unterstützen 21Java Batch – Der Standard für's Stapeln
  • 22. Demo Checkpoints, automatische Retries 22Java Batch – Der Standard für's Stapeln
  • 23. Step-Reihenfolge Job beginnt mit erstem Step Jeder Step kann Folge-Steps deklarieren unterschiedliche je nach Status 23Java Batch – Der Standard für's Stapeln <job …> <step id="first" next="second"> <batchlet …/> </step> <step id="second"> <batchlet …/> <next on="Batchlet failure" to="third"/> </step> <step id="third">
  • 24. Step-Reihenfolge Decision, Transition  switch, case (auch für Flows und Splits) 24Java Batch – Der Standard für's Stapeln <job …> <step … next="decider"> … </step> <decision id="decider" ref="SomeDecider" /> <next on="good" to="…" /> <fail on="bad" exit-status="Mist!" /> <end on="finished" exit-status="Fertig!" /> @Named public class SomeDecider implements Decider { public String decide(StepExecution[] executions) { … return … ? "good" : "bad";
  • 25. Flows Folge von Steps * 25Java Batch – Der Standard für's Stapeln <flow id="…" next="…"> <step id="…" …/> <step id="…" …/> * und Splits, Flows
  • 26. Parallelisierung Split = Mehrere Flows in unterschiedlichen Threads 26Java Batch – Der Standard für's Stapeln <split id="…" next="…"> <flow id="…" …/> <flow id="…" …/> <flow id="…" …/>
  • 27. Parallelisierung Partition = Aufteilung der Items eines Steps auf mehrere Threads nach Eingabequellen, Segmenten, Bereichen, … statisch (im XML), dynamisch (mit PartitionMapper) 27Java Batch – Der Standard für's Stapeln <job …> <step …> … <partition> <plan partitions="3"> <properties partition="0"> <property name="firstItem" value="0" /> </properties> <properties partition="1"> <property name="firstItem" value="100" /> </properties>
  • 28. Weitere Features Properties Parameter auf Job- und Step-Ebene Listener zusätzlicher Code (~Interceptor) auf Job-, Step- oder Step-Teil- Ebene 28Java Batch – Der Standard für's Stapeln
  • 29. Nachteile / Merkwürdigkeiten Schwach getypte Schnittstellen 29Java Batch – Der Standard für's Stapeln public interface ItemReader { public Object readItem() throws Exception; public interface ItemProcessor { public Object processItem(Object item) throws Exception; public interface ItemWriter { public void writeItems(List<Object> items) throws Exception; public interface ItemReader<I> { public I readItem() throws Exception; public interface ItemProcessor<I,O> { public O processItem(I item) throws Exception; public interface ItemWriter<O> { public void writeItems(List<O> items) throws Exception;
  • 30. Nachteile / Merkwürdigkeiten API der Batch Runtime ID-orientiert, nicht Objekt-orientiert Standard enthält keine Implementierungen für Standardaufgaben Keine Vorgaben / Konfigurationsmöglichkeiten bzgl. Threads Keine Vorgaben bzgl. Clustering 30Java Batch – Der Standard für's Stapeln
  • 31. Fazit JSR 352 erfindet das Rad nicht neu viele De-facto-Standards eingearbeitet enge Anlehnung an Spring Batch "endlich Batch-Verarbeitung im EE-Kontext" Trotz guter erster Version: Verbesserungen sind an vielen Stellen möglich 31Java Batch – Der Standard für's Stapeln
  • 32. More http://www.gedoplan-it-training.de Seminare in Berlin, Bielefeld, Inhouse http://www.gedoplan-it-consulting.de Reviews, Coaching, … http://javaeeblog.wordpress.com/ http://gedoplan-it-consulting.de/expertenkreis-java/  dirk.weil@gedoplan.de @dirkweil Java Batch – Der Standard für's Stapeln 32