SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Dennis Schulte / Tobias Flohre | codecentric AG
Enterprise Java Batch mit
Spring
codecentric AG
Dennis Schulte
Düsseldorf
@denschu
www.github.com/denschu
blog.codecentric.de/author/dsc
dennis.schulte@codecentric.de
www.codecentric.de
codecentric AG
Tobias Flohre
Düsseldorf
@TobiasFlohre
www.github.com/tobiasflohre
blog.codecentric.de/author/tobias.flohre
tobias.flohre@codecentric.de
www.codecentric.de
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Was ist ein Batch?
-  Domain / Konfiguration / Ablauf
-  Restart / Skip / Listener
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
codecentric AG
WAS IST EIN BATCH?
Traditionelles Batch-Pattern
Reader Processor Writer
codecentric AG
SPRING BATCH
Automatisches
Transaktionsmanagement
Skip
Retry
Persistente
Job-Metadaten
Restart
Skalierungsfeatures
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Was ist ein Batch?
-  Domain / Konfiguration / Ablauf
-  Restart / Skip / Listener
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
codecentric AG
DOMAIN / KONFIGURATION / ABLAUF
Item
ItemReader
ItemProcessor
Step
Job
ItemWriter
Chunk
codecentric AG
-  Job wird als Spring-Konfiguration erstellt
-  Domain Specific Language manifestiert sich in XML-
Namespace
-  Zentrale Elemente
-  job
-  step
-  tasklet
-  chunk
-  reader
-  processor
-  writer
-  commit-interval
DOMAIN / KONFIGURATION / ABLAUF
25.04.13 10
<job id="myJob" >
<step id="myStep" >
<tasklet>
<chunk reader="myReader"
processor="myProcessor" writer="myWriter"
commit-interval="1" />
</tasklet>
</step>
</job>
codecentric AG
-  Reader, Processor und Writer implementieren bestimmte Interfaces
-  ItemReader<T>
-  T read()
-  ItemProcessor<I,O>
-  O process(I item)
-  ItemWriter<T>
-  void write(List<? extends T> items)
-  Spring Batch bietet für sehr viele Use Cases Implementierungen an
-  Lesen/Schreiben aus/in eine Datenbank
-  Lesen/Schreiben aus/in ein Flat-File
-  Lesen/Schreiben aus/in ein XML-File
-  Lesen/Schreiben aus/in eine JMS-Queue
-  Lesen/Schreiben mit JPA
-  und viele mehr
DOMAIN / KONFIGURATION / ABLAUF
25.04.13 11
codecentric AG
DOMAIN / KONFIGURATION / ABLAUF
25.04.13 12
Begin Step
Commit
transaction
Finish Step
For each item
item == null ||
completionPolicy
fulfilled
true
false
list of items
list of items
item == null
true
false
Open
transaction
ItemReader
Item read()
ItemProcessor
process(Item)
ItemWriter
write(List<Item>)
codecentric AG
*
*
*
*
DOMAIN / KONFIGURATION / ABLAUF
Step
Job
JobInstance
JobExecution
StepExecution
JobParameters
Inkasso
Kraftfahrt
Inkasso
Kraftfahrt am
22.03.13
Inkasso
Kraftfahrt am
22.03.13
erster Versuch
codecentric AG
-  Infrastrukturkomponenten
DOMAIN / KONFIGURATION / ABLAUF
25.04.13 14
JobRepository
JobLauncher
PlatformTransaction
Manager
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Was ist ein Batch?
-  Domain / Konfiguration / Ablauf
-  Restart / Skip / Listener
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
codecentric AG
*
*
*
*
RESTART / SKIP / LISTENER
Step
Job
JobInstance
JobExecution
StepExecution
JobParameters
Start des Jobs
JobInstance mit JobParams
existiert nicht -> wird angelegt
JobExecution läuft los
Fehler!
StepExecution, JobExecution und
JobInstance erhalten Status
Restart des Jobs
JobInstance mit JobParams
existiert -> Status?
Neue JobExecution wird erzeugt,
Zugriff auf ExecutionContext
Lauf erfolgreich
codecentric AG
-  Überspringen fehlerhafter Elemente
RESTART / SKIP / LISTENER
codecentric AG
RESTART / SKIP / LISTENER
codecentric AG
-  Listener horchen auf bestimmte Events im Batch-Ablauf
-  Verschiedene Typen
-  JobExecutionListener
-  StepExecutionListener
-  ChunkListener
-  ItemReadListener
-  ItemProcessListener
-  ItemWriteListener
-  SkipListener
RESTART / SKIP / LISTENER
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Laufzeitumgebung / Integration von Fremdsystemen
-  Default-Funktionalität
-  Test von Jobketten
-  Neuigkeiten im Bereich Java Batch
codecentric AG
-  Spring Batch schreibt keine Laufzeitumgebung vor
-  Anwendungsframework!
-  Viele Deploymentvarianten denkbar
-  Wichtige Fragen
-  Werden XA-Transaktionen benötigt?
-  Wie fügt sich die Ausführung des Jobs in einen Prozess ein?
-  In welcher Form und wo wird der Output benötigt?
-  In welcher Form soll ein Monitoring stattfinden?
LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
codecentric AG
Laufzeitumgebung
LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
25.04.13 22
Spring Container
Spring Batch Application
Spring Batch Core
Spring Batch
Infrastructure
codecentric AG
java org.springframework.batch.core.launch.support.CommandLineJobRunner testJob.xml testJob date=2012/08/29
-  Standalone, 1 JVM pro Batch
LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
25.04.13 23
CommandLine
JobLauncher
Job
DB Datei
Shell-Skript
codecentric AG
startJob.sh
Tomcat/WebSphere/JBoss/Mule
LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
25.04.13 24
Spring Container
Spring Batch Application
HTTP Endpoint
Tomcat
Mainframe
Jenkins
Spring Batch Admin
Scheduler
Metadaten
Logs
codecentric AG
SPRING BATCH ADMIN
codecentric AG
SPRING BATCH ADMIN
codecentric AG
SPRING BATCH ADMIN
codecentric AG
LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
-  HTTP Endpoint mit Spring Integration
à curl –s --data-urlencode "jobParameters=datum=01.01.2013" http://localhost:
8080/batch/jobs/testJob
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Laufzeitumgebung / Integration von Fremdsystemen
-  Default-Funktionalität
-  Test von Jobketten
-  Neuigkeiten im Bereich Java Batch
codecentric AG
-  Vorgaben für Entwickler
-  Ressourcen
-  JobRepository
-  PlatformTransactionManager
-  DataSources
-  JMS-ConnectionFactory
-  Abstrakte JMSTemplate-Definitionen
-  Test nicht vergessen -> SpringJUnit4ClassRunner
DEFAULT-FUNKTIONALITÄT
@Test	
  
public	
  void	
  testLaunchJob()	
  throws	
  Exception	
  {	
  
	
  	
  	
  JobParameters	
  jobParameters	
  =	
  new	
  JobParametersBuilder().toJobParameters();	
  
	
  
	
  	
  	
  JobExecution	
  jobExecution	
  =	
  jobLauncher.run(job,	
  jobParameters);	
  
	
  
	
  	
  	
  assertEquals(BatchStatus.COMPLETED,	
  jobExecution.getStatus());	
  
}	
  
codecentric AG
-  Abstrakte Job- und Stepdefinitionen
DEFAULT-FUNKTIONALITÄT
codecentric AG
-  Log-Files pro Job-Lauf
-  Mapped Diagnostic Context -> Log-File-Name (thread-local)
-  Format und Ausgabe des Job-Protokolls
-  Job-Steuerung
-  Revisionssichere Speicherung
-  Mapping von Return-Codes
-  Scheduler erwartet bestimmte Codes
DEFAULT-FUNKTIONALITÄT
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Laufzeitumgebung / Integration von Fremdsystemen
-  Default-Funktionalität
-  Test von Jobketten
-  Neuigkeiten im Bereich Java Batch
codecentric AG
Build à Release à Deploy à Test à Run
CONTINUOUS DELIVERY
25.04.13 34
codecentric AG
JOB PIPELINE
25.04.13 35
codecentric AG
JOB PIPELINE
25.04.13 36
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
-  Spring Batch 2.2
-  JSR 352: Java Batch
-  Spring Batch und Hadoop
codecentric AG
-  In Entwicklung (bisher Release Candidate 1)
-  Bugfixes und neue Features
-  AmqpItemReader / AmqpItemWriter
-  JobParameter bestimmen nicht zwangsläufig Identität
-  Unterstützung für Java-basierte Konfiguration
SPRING BATCH 2.2
codecentric AG
-  Java-basierte Konfiguration (JavaConfig)
	
  
@EnableTransactionManagement	
  
@Configuration	
  
public	
  class	
  MyConfiguration	
  {	
  
	
  @Bean	
  
	
  public	
  MyComponent	
  component(){	
  
	
   	
  return	
  new	
  MyComponent();	
  
	
  }	
  
	
  
}	
  
SPRING BATCH 2.2
-  XML-basierte Konfiguration
	
  
<beans	
  …>	
  
	
  <tx:annotation-­‐driven/>	
  
	
  
	
  <bean	
  id="component“	
  
	
  	
  class="de.codecentric.MyComponent"/>	
  
	
  
</beans>
codecentric AG
-  Neue Annotation: @EnableBatchProcessing
-  Benötigt eine DataSource und erzeugt
-  JobRepository, JobLauncher, JobRegistry
-  DataSourceTransactionManager
-  JobBuilderFactory, StepBuilderFactory
@Configuration	
  
@EnableBatchProcessing	
  
public	
  class	
  InfrastructureConfiguration	
  {	
  
	
  	
  @Bean	
  
	
  	
  public	
  DataSource	
  dataSource(){	
  
	
  	
  	
  	
  EmbeddedDatabaseBuilder	
  embeddedDatabaseBuilder	
  =	
  new	
  EmbeddedDatabaseBuilder();	
  
	
  	
  	
  	
  return	
  embeddedDatabaseBuilder.addScript("…/schema-­‐hsqldb.sql").setType(EmbeddedDatabaseType.HSQL)	
  
	
  	
  	
  	
  	
  	
  .build();	
  
	
  	
  }	
  
}	
  
SPRING BATCH 2.2
codecentric AG
@Configuration	
  
public	
  class	
  JobConfiguration	
  {	
  
	
  
	
  	
  @Autowired	
  
	
  	
  private	
  JobBuilderFactory	
  jobBuilderFactory;	
  
	
  	
  @Autowired	
  
	
  	
  private	
  StepBuilderFactory	
  stepBuilderFactory;	
  
	
  	
  @Bean	
  
	
  	
  public	
  Job	
  job(){	
  
	
  	
  	
  	
  return	
  jobBuilderFactory.get("job").start(step()).build();	
  
	
  	
  }	
  
	
  
	
  	
  @Bean	
  
	
  	
  public	
  Step	
  step(){	
  
	
  	
  	
  	
  return	
  stepBuilderFactory.get("step").chunk(1).reader(reader()).	
  	
  
	
  	
  	
  	
  	
  	
  processor(processor()).writer(writer()).build();	
  
	
  	
  }	
  
	
  	
  …	
  
}	
  
SPRING BATCH 2.2
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
-  Spring Batch 2.2
-  JSR 352: Java Batch
-  Spring Batch und Hadoop
codecentric AG
JSR 352: JAVA BATCH
-  JSR 352 = Java Specification Request für Java Batch
-  Haupttreiber sind IBM/VMWare
-  Chris Vignola: Specification Lead (IBM)
-  Michael Minella, Wayne Lund (VMWare)
-  Übernahme der Domain Language von Spring Batch in großen Teilen
-  JSR definiert keine Infrastruktur
codecentric AG
JSR 352: JAVA BATCH
-  Interfaces vs. Annotations
public class MyItemReader implements
ItemReader {
@Override
public T readItem() {...}
}
public class MyItemReader {
@ReadItem
public T readItem() {...}
}
codecentric AG
AGENDA
-  Grundlagen Spring Batch
-  Enterprise Java Batch
-  Neuigkeiten im Bereich Java Batch
-  Spring Batch 2.2
-  JSR 352: Java Batch
-  Spring Batch und Hadoop
codecentric AG
SPRING BATCH UND HADOOP
-  Spring Data: Apache Hadoop
-  Version 1.0 seit 26.02.2013
-  Beinhaltet Tools, Templates und Co. für eine Integration zwischen Spring und
Hadoop
-  Hadoop Tasklet für Spring Batch
-  Einbindung von Hadoop-Jobs in Spring Batch - Jobketten
<batch:job	
  id="springBatchJob"	
  >	
  
	
  <batch:step	
  id="step">	
  
	
   	
  <batch:tasklet	
  ref="myHadoopTasklet"/>	
  
	
  </batch:step>	
  
</batch:job>	
  
<hdp:tasklet	
  id="myHadoopTasklet"	
  job-­‐ref="myHadoopJob"	
  wait-­‐for-­‐job="true"/>	
  
<hdp:job	
  id="myHadoopJob"	
  mapper="de.codecentric.MyMapper"	
  reducer="de.codecentric.MyReducer"	
  	
  
	
  input-­‐path="/input"	
  output-­‐path="/output"/>	
  
codecentric AG
FRAGEN?
Dennis Schulte / Tobias Flohre
codecentric AG
Merscheider Straße 1
42699 Solingen
tobias.flohre@codecentric.de
dennis.schulte@codecentric.de
www.codecentric.de
www.mbg-online.de
blog.codecentric.de
www.meettheexperts.de
25.04.13 47

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100Yvette Teiken
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedRalf Eggert
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0Patrick Charrier
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"camunda services GmbH
 
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
 

Was ist angesagt? (10)

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...
 
JavaFX Real-World Apps
JavaFX Real-World AppsJavaFX Real-World Apps
JavaFX Real-World Apps
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 Reloaded
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
C++ Dependency Management 2.0
C++ Dependency Management 2.0C++ Dependency Management 2.0
C++ Dependency Management 2.0
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"
 
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.
 

Andere mochten auch

GlobalizacióN,Identidadyproyectoseducativos[2]
GlobalizacióN,Identidadyproyectoseducativos[2]GlobalizacióN,Identidadyproyectoseducativos[2]
GlobalizacióN,Identidadyproyectoseducativos[2]guest48f75a5e
 
Inma, andrea y eva
Inma, andrea y evaInma, andrea y eva
Inma, andrea y evajuani1
 
Syer Monitoring Integration And Batch
Syer Monitoring Integration And BatchSyer Monitoring Integration And Batch
Syer Monitoring Integration And BatchDave Syer
 
Prestação de contas - SEDE do Terceiro Setor
Prestação de contas - SEDE do Terceiro SetorPrestação de contas - SEDE do Terceiro Setor
Prestação de contas - SEDE do Terceiro SetorRaphael Rosa
 

Andere mochten auch (8)

GlobalizacióN,Identidadyproyectoseducativos[2]
GlobalizacióN,Identidadyproyectoseducativos[2]GlobalizacióN,Identidadyproyectoseducativos[2]
GlobalizacióN,Identidadyproyectoseducativos[2]
 
A noiva do pé de guanandi
A noiva do pé de guanandiA noiva do pé de guanandi
A noiva do pé de guanandi
 
Foto AutomáTica
Foto AutomáTicaFoto AutomáTica
Foto AutomáTica
 
Inma, andrea y eva
Inma, andrea y evaInma, andrea y eva
Inma, andrea y eva
 
Mossdesign®
Mossdesign®Mossdesign®
Mossdesign®
 
Syer Monitoring Integration And Batch
Syer Monitoring Integration And BatchSyer Monitoring Integration And Batch
Syer Monitoring Integration And Batch
 
Prestação de contas - SEDE do Terceiro Setor
Prestação de contas - SEDE do Terceiro SetorPrestação de contas - SEDE do Terceiro Setor
Prestação de contas - SEDE do Terceiro Setor
 
Spring Batch 2.0
Spring Batch 2.0Spring Batch 2.0
Spring Batch 2.0
 

Ähnlich wie Enterprise Java Batch mit Spring

JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- EntwicklersJAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklerscamunda services GmbH
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsTorsten Kleiber
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationSamuel Zürcher
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 
Open Source BPM - iteratec Architekturtag
Open Source BPM - iteratec ArchitekturtagOpen Source BPM - iteratec Architekturtag
Open Source BPM - iteratec Architekturtagcamunda services GmbH
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...camunda services GmbH
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißOPITZ CONSULTING Deutschland
 
PAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEPAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEUdo Sill
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"Aberla
 
Bkr Workflow Oeffentlich
Bkr Workflow OeffentlichBkr Workflow Oeffentlich
Bkr Workflow OeffentlichRalf Ruethlein
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development ToolsCadaxo GmbH
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...LeanIX GmbH
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPAmh0708
 

Ähnlich wie Enterprise Java Batch mit Spring (20)

JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- EntwicklersJAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
JAX 2013: BPMN 2.0 gehört in den Werkzeugkasten JEDES Java- Entwicklers
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL Installation
 
JBoss jBPM
JBoss jBPMJBoss jBPM
JBoss jBPM
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Open Source BPM - iteratec Architekturtag
Open Source BPM - iteratec ArchitekturtagOpen Source BPM - iteratec Architekturtag
Open Source BPM - iteratec Architekturtag
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
Vortrag auf der SEACON 2013 in Hamburg: Prozessautomatisierung mit BPMN 2.0 u...
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
 
jBPM & Drools
jBPM & DroolsjBPM & Drools
jBPM & Drools
 
PAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEPAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EE
 
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"
 
Bkr Workflow Oeffentlich
Bkr Workflow OeffentlichBkr Workflow Oeffentlich
Bkr Workflow Oeffentlich
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 

Enterprise Java Batch mit Spring

  • 1. Dennis Schulte / Tobias Flohre | codecentric AG Enterprise Java Batch mit Spring
  • 4. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch
  • 5. codecentric AG AGENDA -  Grundlagen Spring Batch -  Was ist ein Batch? -  Domain / Konfiguration / Ablauf -  Restart / Skip / Listener -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch
  • 6. codecentric AG WAS IST EIN BATCH? Traditionelles Batch-Pattern Reader Processor Writer
  • 8. codecentric AG AGENDA -  Grundlagen Spring Batch -  Was ist ein Batch? -  Domain / Konfiguration / Ablauf -  Restart / Skip / Listener -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch
  • 9. codecentric AG DOMAIN / KONFIGURATION / ABLAUF Item ItemReader ItemProcessor Step Job ItemWriter Chunk
  • 10. codecentric AG -  Job wird als Spring-Konfiguration erstellt -  Domain Specific Language manifestiert sich in XML- Namespace -  Zentrale Elemente -  job -  step -  tasklet -  chunk -  reader -  processor -  writer -  commit-interval DOMAIN / KONFIGURATION / ABLAUF 25.04.13 10 <job id="myJob" > <step id="myStep" > <tasklet> <chunk reader="myReader" processor="myProcessor" writer="myWriter" commit-interval="1" /> </tasklet> </step> </job>
  • 11. codecentric AG -  Reader, Processor und Writer implementieren bestimmte Interfaces -  ItemReader<T> -  T read() -  ItemProcessor<I,O> -  O process(I item) -  ItemWriter<T> -  void write(List<? extends T> items) -  Spring Batch bietet für sehr viele Use Cases Implementierungen an -  Lesen/Schreiben aus/in eine Datenbank -  Lesen/Schreiben aus/in ein Flat-File -  Lesen/Schreiben aus/in ein XML-File -  Lesen/Schreiben aus/in eine JMS-Queue -  Lesen/Schreiben mit JPA -  und viele mehr DOMAIN / KONFIGURATION / ABLAUF 25.04.13 11
  • 12. codecentric AG DOMAIN / KONFIGURATION / ABLAUF 25.04.13 12 Begin Step Commit transaction Finish Step For each item item == null || completionPolicy fulfilled true false list of items list of items item == null true false Open transaction ItemReader Item read() ItemProcessor process(Item) ItemWriter write(List<Item>)
  • 13. codecentric AG * * * * DOMAIN / KONFIGURATION / ABLAUF Step Job JobInstance JobExecution StepExecution JobParameters Inkasso Kraftfahrt Inkasso Kraftfahrt am 22.03.13 Inkasso Kraftfahrt am 22.03.13 erster Versuch
  • 14. codecentric AG -  Infrastrukturkomponenten DOMAIN / KONFIGURATION / ABLAUF 25.04.13 14 JobRepository JobLauncher PlatformTransaction Manager
  • 15. codecentric AG AGENDA -  Grundlagen Spring Batch -  Was ist ein Batch? -  Domain / Konfiguration / Ablauf -  Restart / Skip / Listener -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch
  • 16. codecentric AG * * * * RESTART / SKIP / LISTENER Step Job JobInstance JobExecution StepExecution JobParameters Start des Jobs JobInstance mit JobParams existiert nicht -> wird angelegt JobExecution läuft los Fehler! StepExecution, JobExecution und JobInstance erhalten Status Restart des Jobs JobInstance mit JobParams existiert -> Status? Neue JobExecution wird erzeugt, Zugriff auf ExecutionContext Lauf erfolgreich
  • 17. codecentric AG -  Überspringen fehlerhafter Elemente RESTART / SKIP / LISTENER
  • 18. codecentric AG RESTART / SKIP / LISTENER
  • 19. codecentric AG -  Listener horchen auf bestimmte Events im Batch-Ablauf -  Verschiedene Typen -  JobExecutionListener -  StepExecutionListener -  ChunkListener -  ItemReadListener -  ItemProcessListener -  ItemWriteListener -  SkipListener RESTART / SKIP / LISTENER
  • 20. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Laufzeitumgebung / Integration von Fremdsystemen -  Default-Funktionalität -  Test von Jobketten -  Neuigkeiten im Bereich Java Batch
  • 21. codecentric AG -  Spring Batch schreibt keine Laufzeitumgebung vor -  Anwendungsframework! -  Viele Deploymentvarianten denkbar -  Wichtige Fragen -  Werden XA-Transaktionen benötigt? -  Wie fügt sich die Ausführung des Jobs in einen Prozess ein? -  In welcher Form und wo wird der Output benötigt? -  In welcher Form soll ein Monitoring stattfinden? LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME
  • 22. codecentric AG Laufzeitumgebung LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME 25.04.13 22 Spring Container Spring Batch Application Spring Batch Core Spring Batch Infrastructure
  • 23. codecentric AG java org.springframework.batch.core.launch.support.CommandLineJobRunner testJob.xml testJob date=2012/08/29 -  Standalone, 1 JVM pro Batch LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME 25.04.13 23 CommandLine JobLauncher Job DB Datei Shell-Skript
  • 24. codecentric AG startJob.sh Tomcat/WebSphere/JBoss/Mule LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME 25.04.13 24 Spring Container Spring Batch Application HTTP Endpoint Tomcat Mainframe Jenkins Spring Batch Admin Scheduler Metadaten Logs
  • 28. codecentric AG LAUFZEITUMGEBUNG / INTEGRATION FREMDSYSTEME -  HTTP Endpoint mit Spring Integration à curl –s --data-urlencode "jobParameters=datum=01.01.2013" http://localhost: 8080/batch/jobs/testJob
  • 29. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Laufzeitumgebung / Integration von Fremdsystemen -  Default-Funktionalität -  Test von Jobketten -  Neuigkeiten im Bereich Java Batch
  • 30. codecentric AG -  Vorgaben für Entwickler -  Ressourcen -  JobRepository -  PlatformTransactionManager -  DataSources -  JMS-ConnectionFactory -  Abstrakte JMSTemplate-Definitionen -  Test nicht vergessen -> SpringJUnit4ClassRunner DEFAULT-FUNKTIONALITÄT @Test   public  void  testLaunchJob()  throws  Exception  {        JobParameters  jobParameters  =  new  JobParametersBuilder().toJobParameters();          JobExecution  jobExecution  =  jobLauncher.run(job,  jobParameters);          assertEquals(BatchStatus.COMPLETED,  jobExecution.getStatus());   }  
  • 31. codecentric AG -  Abstrakte Job- und Stepdefinitionen DEFAULT-FUNKTIONALITÄT
  • 32. codecentric AG -  Log-Files pro Job-Lauf -  Mapped Diagnostic Context -> Log-File-Name (thread-local) -  Format und Ausgabe des Job-Protokolls -  Job-Steuerung -  Revisionssichere Speicherung -  Mapping von Return-Codes -  Scheduler erwartet bestimmte Codes DEFAULT-FUNKTIONALITÄT
  • 33. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Laufzeitumgebung / Integration von Fremdsystemen -  Default-Funktionalität -  Test von Jobketten -  Neuigkeiten im Bereich Java Batch
  • 34. codecentric AG Build à Release à Deploy à Test à Run CONTINUOUS DELIVERY 25.04.13 34
  • 37. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch -  Spring Batch 2.2 -  JSR 352: Java Batch -  Spring Batch und Hadoop
  • 38. codecentric AG -  In Entwicklung (bisher Release Candidate 1) -  Bugfixes und neue Features -  AmqpItemReader / AmqpItemWriter -  JobParameter bestimmen nicht zwangsläufig Identität -  Unterstützung für Java-basierte Konfiguration SPRING BATCH 2.2
  • 39. codecentric AG -  Java-basierte Konfiguration (JavaConfig)   @EnableTransactionManagement   @Configuration   public  class  MyConfiguration  {    @Bean    public  MyComponent  component(){      return  new  MyComponent();    }     }   SPRING BATCH 2.2 -  XML-basierte Konfiguration   <beans  …>    <tx:annotation-­‐driven/>      <bean  id="component“      class="de.codecentric.MyComponent"/>     </beans>
  • 40. codecentric AG -  Neue Annotation: @EnableBatchProcessing -  Benötigt eine DataSource und erzeugt -  JobRepository, JobLauncher, JobRegistry -  DataSourceTransactionManager -  JobBuilderFactory, StepBuilderFactory @Configuration   @EnableBatchProcessing   public  class  InfrastructureConfiguration  {      @Bean      public  DataSource  dataSource(){          EmbeddedDatabaseBuilder  embeddedDatabaseBuilder  =  new  EmbeddedDatabaseBuilder();          return  embeddedDatabaseBuilder.addScript("…/schema-­‐hsqldb.sql").setType(EmbeddedDatabaseType.HSQL)              .build();      }   }   SPRING BATCH 2.2
  • 41. codecentric AG @Configuration   public  class  JobConfiguration  {        @Autowired      private  JobBuilderFactory  jobBuilderFactory;      @Autowired      private  StepBuilderFactory  stepBuilderFactory;      @Bean      public  Job  job(){          return  jobBuilderFactory.get("job").start(step()).build();      }        @Bean      public  Step  step(){          return  stepBuilderFactory.get("step").chunk(1).reader(reader()).                processor(processor()).writer(writer()).build();      }      …   }   SPRING BATCH 2.2
  • 42. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch -  Spring Batch 2.2 -  JSR 352: Java Batch -  Spring Batch und Hadoop
  • 43. codecentric AG JSR 352: JAVA BATCH -  JSR 352 = Java Specification Request für Java Batch -  Haupttreiber sind IBM/VMWare -  Chris Vignola: Specification Lead (IBM) -  Michael Minella, Wayne Lund (VMWare) -  Übernahme der Domain Language von Spring Batch in großen Teilen -  JSR definiert keine Infrastruktur
  • 44. codecentric AG JSR 352: JAVA BATCH -  Interfaces vs. Annotations public class MyItemReader implements ItemReader { @Override public T readItem() {...} } public class MyItemReader { @ReadItem public T readItem() {...} }
  • 45. codecentric AG AGENDA -  Grundlagen Spring Batch -  Enterprise Java Batch -  Neuigkeiten im Bereich Java Batch -  Spring Batch 2.2 -  JSR 352: Java Batch -  Spring Batch und Hadoop
  • 46. codecentric AG SPRING BATCH UND HADOOP -  Spring Data: Apache Hadoop -  Version 1.0 seit 26.02.2013 -  Beinhaltet Tools, Templates und Co. für eine Integration zwischen Spring und Hadoop -  Hadoop Tasklet für Spring Batch -  Einbindung von Hadoop-Jobs in Spring Batch - Jobketten <batch:job  id="springBatchJob"  >    <batch:step  id="step">      <batch:tasklet  ref="myHadoopTasklet"/>    </batch:step>   </batch:job>   <hdp:tasklet  id="myHadoopTasklet"  job-­‐ref="myHadoopJob"  wait-­‐for-­‐job="true"/>   <hdp:job  id="myHadoopJob"  mapper="de.codecentric.MyMapper"  reducer="de.codecentric.MyReducer"      input-­‐path="/input"  output-­‐path="/output"/>  
  • 47. codecentric AG FRAGEN? Dennis Schulte / Tobias Flohre codecentric AG Merscheider Straße 1 42699 Solingen tobias.flohre@codecentric.de dennis.schulte@codecentric.de www.codecentric.de www.mbg-online.de blog.codecentric.de www.meettheexperts.de 25.04.13 47