Java Batch Der Standard für's Stapeln



Ähnliche Dokumente
Java-Batch JSR-352. Der neue Standard in Java EE Thomas Much

Java-Batch Der neue Standard in Java EE 7

Dennis Schulte / Tobias Flohre codecentric AG. Enterprise Java Batch mit Spring

3. Juli 2014, IBM Client Center Ehningen

Objektorientierte Programmierung

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Schedulingund Thread-Ausführer

Struts 2 Das Imperium schlägt zurück?

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Tobias Flohre / Dennis Schulte codecentric AG. Spring Batch Performance und Skalierbarkeit

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Factory Method (Virtual Constructor)

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Der lokale und verteilte Fall

Objektorientierte Programmierung. Kapitel 12: Interfaces

Prinzipien Objektorientierter Programmierung

3 Objektorientierte Konzepte in Java

Einführung in die Programmierung

C# im Vergleich zu Java

RESTful Web. Representational State Transfer

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Große Übung Praktische Informatik 1

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

WebService in Java SE und EE

Java: Vererbung. Teil 3: super()

Java Einführung Abstrakte Klassen und Interfaces

Programmieren in Java

OSEK-OS. Oliver Botschkowski. PG AutoLab Seminarwochenende Oktober AutoLab

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Gebundene Typparameter

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

License Management SDK

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Innere Klassen in Java

Typumwandlungen bei Referenztypen

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Client-Server-Beziehungen

Javakurs zu Informatik I. Henning Heitkötter

Einführung in die Java- Programmierung

Applets I. Grundlagen der g Applet-Programmierung

Einführung in die Programmierung Blockkurs Java

Programmieren in Java

Dynamic Ressource Management

Einstieg in die Informatik mit Java

Mobile App Development. - Alarm -

Pragmatik von Programmiersprachen

Software Engineering Klassendiagramme Assoziationen

Einführung in die Programmierung für Wirtschaftsinformatik

bix BOE Java Tools bix Consulting GmbH & Co. KG BusinessITPeople

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Java Einführung Collections

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Auszug aus JAX-WS Folien

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Objektorientierte Programmierung

Das Model View Controller (MVC) Konzept

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

12.4 Sicherheitsarchitektur

XMLBeam. Einfach XML-Handling. W3L AG

Oliver Paulus, 7. Februar Spring Framework Einführung. Oliver Paulus, Was ist Spring?

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Hilfe zur ekim. Inhalt:

Programmierkurs Java

DOKUMENTATION PASY. Patientendaten verwalten

Grundkonstrukte der Objektorientierung in Java, C# und C++

Einführung in die Java- Programmierung

Internet Explorer Version 6

Assoziation und Aggregation

Testen mit JUnit. Motivation

Algorithmen und Datenstrukturen

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Kapitel 6. Vererbung

Java Web Services Metadata JSR-181

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

LISP. Eine Einführung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Nathan Burgener. Design by Contract. Modul SWE

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

2. Hintergrundverarbeitung in Android: Services und Notifications

Objektorientierte Programmierung OOP

ECLIPSE PLUG-IN. Redwood Anwendertage 2015

Vorkurs C++ Programmierung

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Übung - Festplattenwartung in Windows Vista

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

13. Tutorium zu Programmieren

Code-Erzeugung aus UML-Klassendiagrammen

Transkript:

Java Batch Der Standard für's Stapeln Berlin Expert Days 18.09.2015 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 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 * bisher 3

Java Batch Batch Applications for the Java platform JSR-352 basiert stark auf Spring Batch Bestandteil von Java EE 7 WildFly 8: JBeret GlassFish 4: jsr352-ri auch in SE-Umgebung nutzbar 4

Java Batch Features: Task und Chunks Exception Handling Checkpoints Start, Restart, Abort sequenzielle und parallele Ausführung Job Repository Job Control 5

Job Configuration & Runtime Batch-Stammdaten Job * Step konkreter Auftrag * JobInstance einzelne Ausführung JobExecution * * * StepExecution 6

Task-orientierte Steps Batchlet i. A. kleine Aufgabenstellung / kurze Ausführung z. B. Initialisierung, Cleanup @Named public class HelloWorldBatchlet extends AbstractBatchlet { public String process() throws Exception { System.out.println("Hello, batch world!"); Job * Step Batchlet 7

Job Descriptor META-INF/batch-jobs/jobname.xml <job id="demojob1" > <step id="step1"> <batchlet ref="helloworldbatchlet" /> </step> </job> 8

Job-Start JobOperator erlaubt Zugriff auf das Job Repository JobOperator joboperator = BatchRuntime.getJobOperator(); long executionid = joboperator.start("demojob1", new Properties()); JobInstance jobinstance = joboperator.getjobinstance(executionid); JobExecution jobexecution = joboperator.getjobexecution(executionid); 9

Chunk-orientierte Steps ~EVA ItemReader liest Eingabe ItemProcessor verarbeitet Daten ItemWriter schreibt Ausgabe Chunk Size bestimmt Anzahl gemeinsam verarbeiteter Items ItemReader Job * Step ItemProcessor ItemWriter 10

Chunk-orientierte Steps Chunk Size bestimmt Anzahl gemeinsam verarbeiteter Items ItemReader E je 1 Item ItemProcessor n Items ItemWriter n Items A Wiederholung, bis Eingabe erschöpft 11

Job Descriptor META-INF/batch-jobs/jobname.xml <job id="demojob3" > version="1.0"> <step id="init" next="import"> <batchlet ref="countrycleanbatchlet" /> </step> <step id="import"> <chunk item-count="3"> <reader ref="countryitemreader" /> <processor ref="countryitemprocessor" /> <writer ref="countryitemwriter" /> </chunk> </step> </job> 12

Item Reader @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(); } 13

Item Processor @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; 14

Item Writer @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); } } 15

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 16

restart() Job Control STARTING STARTED COMLETED FAILED STOPPING STOPPED abandon() abandon() ABANDONED 17

Exception Handling Exceptions führen per Default zu FAILED Andere Behandlung pro Chunk: Retryable Exceptions führen zur Wiederholung Skippable Exceptions werden ignoriert <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> 18

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 häufig: Zusammenführung in Checkpoint Algorithm kann/sollte transaktionales Verhalten unterstützen 19

Step-Reihenfolge Job beginnt mit erstem Step Jeder Step kann Folge-Steps deklarieren unterschiedliche je nach Status <job > <step id="first" next="second"> <batchlet /> </step> <step id="second"> <batchlet /> <next on="batchlet failure" to="third"/> </step> <step id="third"> 20

Step-Reihenfolge Decision, Transition switch, case <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!" /> (auch für Flows und Splits) @Named public class SomeDecider implements Decider { public String decide(stepexecution[] executions) { return? "good" : "bad"; 21

Flows Folge von Steps * <flow id=" " next=" "> <step id=" " /> <step id=" " /> * und Splits, Flows 22

Parallelisierung Split = Mehrere Flows in unterschiedlichen Threads <split id=" " next=" "> <flow id=" " /> <flow id=" " /> <flow id=" " /> 23

Parallelisierung Partition = Aufteilung der Items eines Steps auf mehrere Threads nach Eingabequellen, Segmenten, Bereichen, statisch (im XML), dynamisch (mit PartitionMapper) <job > <step > <partition> <plan partitions="3"> <properties partition="0"> <property name="firstitem" value="0" /> </properties> <properties partition="1"> <property name="firstitem" value="100" /> </properties> 24

Weitere Features Properties Parameter auf Job- und Step-Ebene Listener zusätzlicher Code (~Interceptor) auf Job-, Step- oder Step-Teil- Ebene 25

Nachteile / Merkwürdigkeiten Schwach getypte Schnittstellen 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; 26

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 27

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 28

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://expertenkreisjava.blogspot.de/ dirk.weil@gedoplan.de @dirkweil 29