SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PPTX
Java Batch: Der neue Standard für‘s Stapeln
PDF
Testing tools
PDF
Auszug Seminarunterlagen "Hibernate 3.x"
PDF
JavaScript Performance
PDF
Einführung in React
PDF
JavaScript Performance
PPTX
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
PDF
Java EE 7 - Enterprise-Anwendungen ohne Ballast
Java Batch: Der neue Standard für‘s Stapeln
Testing tools
Auszug Seminarunterlagen "Hibernate 3.x"
JavaScript Performance
Einführung in React
JavaScript Performance
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Java EE 7 - Enterprise-Anwendungen ohne Ballast

Andere mochten auch (13)

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

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