SlideShare a Scribd company logo
Batch Processing
Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
@rcandidosilva
About Me
• JUG Leader do GUJavaSC
• http://gujavasc.org
• Twitter
• @rcandidosilva
• Contatos
• http://rodrigocandido.me
Agenda
• Conceitos
• Batch Domain Language
• Chunk vs. Batchlet
• Partitioned Step
• Flow, Split e Decision
• Listeners e Exceptions
• Execution
• Integration
• Demo
Porque Batch?
• É muito comum em aplicações
• Várias soluções "personalizadas"
• Produtos começaram a surgir
• Spring Batch
• WebSphere Compute Grid
• Ideal para sistemas ETL
Batch API
• Chunk / Batchlet
• Implementação de um Step
• Contexts
• Job e Step at runtime
• Persistência de metadados
• Listeners
• Callback lifecycle events
• Partitioning
• Processamento paralelo
Batch Domain Language
• Batch job XML definition
• Descreve os steps como um agrupamento de batch
artefacts
Batch Domain Language
<job id="adressJob" version="1.0">
<listeners>
<listener ref="MyJobListener"/>
</listeners>
<step id="buildingData" next="adressStep">
<batchlet ref="GenerateDataBatchlet" />
</step>
<step id="adressStep">
<listeners>
<listener ref="MyStepListener"/>
</listeners>
<chunk item-count="10">
<reader ref="adressItemReader" />
<processor ref="adressItemProcessor" />
<writer ref="adressItemWriter" />
</chunk>
</step>
</job>
Chunk vs. Batchlet
• Implementam step dentro do job
• Chunk
• Encapsula padrão ETL
• Single Reader, Processor e Writer
• Executado por pedaços de dados (chunk)
• Chunk output é escrito unitariamente
• Batchlet
• Promove a execução de um único e simples processo
• Executado até o fim produzindo um código de retorno
Chunk vs. Batchlet
Chunk Batchlet
Batchlet
@Named
public class MyBatchlet {
@Process
public String process() throws Exception {..}
@Stop
public void stopMe() throws Exception {..}
}
<step id="step1">
<batchlet ref="MyBatchlet"/>
</step>
public class MyBatchlet implements Batchlet {..}
Chunk
<step id="sendStatements">
<chunk reader="accountReader"
processor="accountProcessor"
writer="emailWriter" item-count="10"/>
</step>
@Named(“accountReader")
...implements ItemReader... {

public Account readItem() {

// read account using JPA
@Named(“accountProcessor")
...implements ItemProcessor... {
public Statement processItems(Account account) {

// read Account, return Statement
@Named(“emailWriter")
...implements ItemWriter... {
public void writeItems(List<Statements> statements) {

// use JavaMail to send email
• Step Job
Chunk
public interface ItemReader<T> {
public void open(Externalizable checkpoint);
public T readItem();
public Externalizable checkpointInfo();
public void close();
}
public interface ItemWriter<T> {
public void open(Externalizable checkpoint);
public void writeItems(List<T> items);
public Externalizable checkpointInfo();
public void close();
}
public interface ItemProcessor<T, R> {
public R processItem(T item);
}
Checkpoint
• Para tarefas intensivas, longo período de tempo
• Checkpoint/restart é bastante utilizado
• Basicamente…
• Armazena estado do ItemReader, ItemWriter
• Método chamados
• reader.checkpointInfo()
• writer.checkpointInfo()
public interface ItemReader<T> {
public void open(Externalizable checkpoint);
public Externalizable checkpointInfo();
}
public interface ItemWriter<T> {
public void open(Externalizable checkpoint);
public Externalizable checkpointInfo();
}
<chunk checkpoint-policy="item"
commit-interval="10" item-count="10">
Partitioned Step
• Step pode rodar particionado
• [N] instâncias do mesmo step em [N] Threads
• Uma partição por Thread
<step id="step1">
<chunk>
<partition>
<plan partitions="10" threads="2"/>
<reducer />
</partition>
</chunk>
</step>
Partitioned Step
• Partition Mapper
• Decide dinamicamente o número de partições
• Partition Plan
• Partition Reducer
• Demarca a unidade lógica de trabalho
• Partition Collector
• Enviar resultados de processamento das partições
• Partition Analyzer
• Ponto de controle e análise dos resultados enviados
Flow, Split e Decision
Flow
Step I
Task
Step II
Chunk
ItemReader
ItemWriter
Step III
Chunk
Deci-
sion
ItemReader
ItemWriter
Step IV
Chunk
ItemReader
ItemWriter
EndStart
ItemProcess
or
ItemProcess
or
ItemProcess
or
Flow
• Define a lista de steps a ser executado (unitário)
<flow id="flow-1" next="{flow, step, decision}-id">
<step id="flow_1_step_1">
</step>
<step id="flow_1_step_2">
</step>
</flow>
Split
• Define a lista de flows a serem executados (paralelo)
• Coletores e analisadores para monitoramento
<split >
<flow /> <!-- each flow runs on a separate thread -->
<flow />
</split>
Decision
• Possibilita a implementação de workflows
Decision
@Named
public class Decider {
public String decide(BatchContext context)
throws Exception {
String exit = context.getExitStatus();
if (“SUCCESS”.equals(exit)) {
return “SKIP”;
}
return exit;
}
}
<step id="step1">
<decision id="decision1" ref="Decider">
<next on="SKIP" to="step3"/>
<next on="*" to="step2"/>
</decision>
</step>
<step id="step2" next="step3"/>
<step id="step3"/>
Lifecycle
STOPPED
STARTING STARTED COMPLETED
FAILED
STOPPING
ABANDONED
stop()
start()
abandon()
abandon()
abandon()
restart()
restart()
Listeners
@Named
public class StepListener {
@BatchContext
StepContext context;
@BeforeStep
public void beforeStep() {..}
@AfterStep
public void afterStep() {..}
}
<step id="step1">
<listeners>
<listener
ref="StepListener"/>
</listeners>
</step>
• Step
• StepListener, ItemReadListener, ItemProcessListener, ItemWriterListener,
ChunkListener, RetryReadListener, RetryProcessListener, RetryWriteListener,
SkipReadListener, SkipProcessListener, SkipWriteListener
• Job
• JobListener
Exceptions
<job id="...">
<chunk skip-limit="5" retry-limit="5">
<skippable-exception-classes>
<include class="java.lang.Exception"/>
<exclude class="java.io.FileNotFoundException"/>
</skippable-exception-classes>
<retryable-exception-classes>

</retryable-exception-classes>
<no-rollback-exception-classes>
...
</no-rollback-exception-classes>
</chunk>
</job>
• JobOperator
• Runtime interface para gerenciamento
• start, stop, restart
• JobRepository interface commands
• JobRepository
• Contém informações sobre os jobs
• Completos e em execução
JobOperator e Repository
Execution
• JobInstance
• Representação lógica de um job
runtime
• JobExecution
• Suporte clustering, segurança,
gerenciamento de recursos
• StepExecution
• Tentativa de rodar um step de um
job
Integration
• Suporte ao Java SE
• Application Server Runtime
• Suporte clustering, segurança, gerenciamento de recursos
• Dependency Injection com CDI
• XML descriptors
• META-INF/batch-jobs/myJob.xml
• Empacotamento
• JAR, WAR, EJB
Demo
• Java EE 7 Samples
• Diferentes exemplos de utilização Batch API
• https://github.com/javaee-samples/javaee7-samples/tree/master/batch
Perguntas
?
Referências
• https://jcp.org/en/jsr/detail?id=352
• https://java.net/projects/jbatch
• http://projects.spring.io/spring-batch/
• http://docs.oracle.com/javaee/7/tutorial/doc/batch-processing.htm
• http://www.oracle.com/technetwork/articles/java/batch-1965499.html
• https://github.com/javaee-samples/javaee7-samples/
• http://blog.arungupta.me/2014/07/schedule-javaee7-batch-jobs-techtip36/
• http://www.planetjones.co.uk/blog/25-05-2013/introducing-jsr-352-java-
batch-ee-7.html
Muito obrigado!
@rcandidosilva
rodrigocandido.me

More Related Content

PDF
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
PPTX
Soa development using javascript
DsixE Inc
 
PPTX
Microservices/dropwizard
FKM Naimul Huda, PMP
 
PPTX
Go Fullstack: JSF for Public Sites (CONFESS 2013)
Michael Kurz
 
PPTX
Programming Azure Active Directory (DevLink 2014)
Michael Collier
 
PPT
Lecture 2
Ahmed Madkor
 
ODP
Consume Spring Data Rest with Angularjs
Corneil du Plessis
 
PDF
Servlet sessions
vantinhkhuc
 
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
Soa development using javascript
DsixE Inc
 
Microservices/dropwizard
FKM Naimul Huda, PMP
 
Go Fullstack: JSF for Public Sites (CONFESS 2013)
Michael Kurz
 
Programming Azure Active Directory (DevLink 2014)
Michael Collier
 
Lecture 2
Ahmed Madkor
 
Consume Spring Data Rest with Angularjs
Corneil du Plessis
 
Servlet sessions
vantinhkhuc
 

What's hot (20)

PPTX
More Cache for Less Cash (DevLink 2014)
Michael Collier
 
PPTX
Developing and Hosting REST APIs 3.7
StephenKardian
 
PPTX
Inside Azure Diagnostics (DevLink 2014)
Michael Collier
 
PDF
Spring java config
Sukjin Yun
 
PPTX
01 session tracking
dhrubo kayal
 
PPTX
What's new in the July 2017 Update for Dynamics 365 - Developer features
Dynamics 365 Customer Engagement Professionals Netherlands (CEProNL)
 
PDF
Using Windows Azure for Solving Identity Management Challenges (Visual Studio...
Michael Collier
 
PDF
Lecture 7 Web Services JAX-WS & JAX-RS
Fahad Golra
 
PDF
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
mfrancis
 
PPTX
Windows Azure Mobile Services - The Perfect Partner
Michael Collier
 
PPTX
Automating Your Microsoft Azure Environment (DevLink 2014)
Michael Collier
 
PDF
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Ntg web services
Farag Zakaria
 
PDF
Dropwizard Spring - the perfect Java REST server stack
Jacek Furmankiewicz
 
PPTX
Inside Azure Diagnostics
Michael Collier
 
PPTX
The Past Year in Spring for Apache Geode
VMware Tanzu
 
PPTX
Session 31 - Session Management, Best Practices, Design Patterns in Web Apps
PawanMM
 
PDF
Weblogic domain
Aditya Bhuyan
 
PPTX
Using Windows Azure for Solving Identity Management Challenges
Michael Collier
 
PDF
RESTful OSGi Web Applications Tutorial - Khawaja S Shams & Jeff Norris
mfrancis
 
More Cache for Less Cash (DevLink 2014)
Michael Collier
 
Developing and Hosting REST APIs 3.7
StephenKardian
 
Inside Azure Diagnostics (DevLink 2014)
Michael Collier
 
Spring java config
Sukjin Yun
 
01 session tracking
dhrubo kayal
 
What's new in the July 2017 Update for Dynamics 365 - Developer features
Dynamics 365 Customer Engagement Professionals Netherlands (CEProNL)
 
Using Windows Azure for Solving Identity Management Challenges (Visual Studio...
Michael Collier
 
Lecture 7 Web Services JAX-WS & JAX-RS
Fahad Golra
 
OSGi and Spring Data for simple (Web) Application Development - Christian Bar...
mfrancis
 
Windows Azure Mobile Services - The Perfect Partner
Michael Collier
 
Automating Your Microsoft Azure Environment (DevLink 2014)
Michael Collier
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Ntg web services
Farag Zakaria
 
Dropwizard Spring - the perfect Java REST server stack
Jacek Furmankiewicz
 
Inside Azure Diagnostics
Michael Collier
 
The Past Year in Spring for Apache Geode
VMware Tanzu
 
Session 31 - Session Management, Best Practices, Design Patterns in Web Apps
PawanMM
 
Weblogic domain
Aditya Bhuyan
 
Using Windows Azure for Solving Identity Management Challenges
Michael Collier
 
RESTful OSGi Web Applications Tutorial - Khawaja S Shams & Jeff Norris
mfrancis
 
Ad

Similar to JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corporativo (20)

PDF
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
PDF
Java EE 7 Batch processing in the Real World
Roberto Cortez
 
PPTX
Java Batch
Software Infrastructure
 
PDF
Batch Applications for Java Platform 1.0: Java EE 7 and GlassFish
Arun Gupta
 
PDF
Batch Applications for the Java Platform
Sivakumar Thyagarajan
 
PPTX
Spring batch
Yukti Kaura
 
PPTX
Spring batch for large enterprises operations
Ignasi González
 
PDF
Java one 2015 [con3339]
Arshal Ameen
 
PDF
Spring Batch Introduction (and Bitbucket Project)
Guillermo Daniel Salazar
 
PDF
Spring batch overivew
Chanyeong Choi
 
PPTX
Batching and Java EE (jdk.io)
Ryan Cuprak
 
PPTX
testdocument test java programimng test.pptx
narasimhulum1623
 
PPTX
Spring batch
Deepak Kumar
 
PDF
Three Key Concepts for Understanding JSR-352: Batch Programming for the Java ...
timfanelli
 
PDF
Gain Proficiency in Batch Processing with Spring Batch
Inexture Solutions
 
PDF
Design & Develop Batch Applications in Java/JEE
Naresh Chintalcheru
 
PDF
Three key concepts for java batch
timfanelli
 
PDF
Spring Batch Performance Tuning
Gunnar Hillert
 
PPT
Spring Batch Introduction
Tadaya Tsuyukubo
 
PPTX
Spring batch
nishasowdri
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
Java EE 7 Batch processing in the Real World
Roberto Cortez
 
Batch Applications for Java Platform 1.0: Java EE 7 and GlassFish
Arun Gupta
 
Batch Applications for the Java Platform
Sivakumar Thyagarajan
 
Spring batch
Yukti Kaura
 
Spring batch for large enterprises operations
Ignasi González
 
Java one 2015 [con3339]
Arshal Ameen
 
Spring Batch Introduction (and Bitbucket Project)
Guillermo Daniel Salazar
 
Spring batch overivew
Chanyeong Choi
 
Batching and Java EE (jdk.io)
Ryan Cuprak
 
testdocument test java programimng test.pptx
narasimhulum1623
 
Spring batch
Deepak Kumar
 
Three Key Concepts for Understanding JSR-352: Batch Programming for the Java ...
timfanelli
 
Gain Proficiency in Batch Processing with Spring Batch
Inexture Solutions
 
Design & Develop Batch Applications in Java/JEE
Naresh Chintalcheru
 
Three key concepts for java batch
timfanelli
 
Spring Batch Performance Tuning
Gunnar Hillert
 
Spring Batch Introduction
Tadaya Tsuyukubo
 
Spring batch
nishasowdri
 
Ad

More from Rodrigo Cândido da Silva (20)

PDF
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
PDF
Cloud Native Java EE
Rodrigo Cândido da Silva
 
PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
PDF
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
PDF
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Criando Micro-serviços Reativos com Java
Rodrigo Cândido da Silva
 
PDF
JavaOne 2016 - Reactive Microservices with Java and Java EE
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
PDF
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
Cloud Native Java EE
Rodrigo Cândido da Silva
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
GUJavaSC - Criando Micro-serviços Reativos com Java
Rodrigo Cândido da Silva
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 

Recently uploaded (20)

PPTX
oapresentation.pptx
mehatdhavalrajubhai
 
PPTX
Presentation about variables and constant.pptx
kr2589474
 
PPTX
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
PPTX
Presentation about variables and constant.pptx
safalsingh810
 
DOCX
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
PDF
On Software Engineers' Productivity - Beyond Misleading Metrics
Romén Rodríguez-Gil
 
PDF
Wondershare Filmora 14.5.20.12999 Crack Full New Version 2025
gsgssg2211
 
PPTX
Explanation about Structures in C language.pptx
Veeral Rathod
 
PPT
Activate_Methodology_Summary presentatio
annapureddyn
 
PDF
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PDF
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
PDF
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
PDF
Exploring AI Agents in Process Industries
amoreira6
 
PDF
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
PDF
Build Multi-agent using Agent Development Kit
FadyIbrahim23
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
PPTX
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
PDF
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 
oapresentation.pptx
mehatdhavalrajubhai
 
Presentation about variables and constant.pptx
kr2589474
 
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
ConcordeApp: Engineering Global Impact & Unlocking Billions in Event ROI with AI
chastechaste14
 
Presentation about variables and constant.pptx
safalsingh810
 
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
On Software Engineers' Productivity - Beyond Misleading Metrics
Romén Rodríguez-Gil
 
Wondershare Filmora 14.5.20.12999 Crack Full New Version 2025
gsgssg2211
 
Explanation about Structures in C language.pptx
Veeral Rathod
 
Activate_Methodology_Summary presentatio
annapureddyn
 
Teaching Reproducibility and Embracing Variability: From Floating-Point Exper...
University of Rennes, INSA Rennes, Inria/IRISA, CNRS
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
49785682629390197565_LRN3014_Migrating_the_Beast.pdf
Abilash868456
 
Salesforce Implementation Services Provider.pdf
VALiNTRY360
 
Exploring AI Agents in Process Industries
amoreira6
 
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
Build Multi-agent using Agent Development Kit
FadyIbrahim23
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
49784907924775488180_LRN2959_Data_Pump_23ai.pdf
Abilash868456
 

JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corporativo

  • 1. Batch Processing Processamento em Lotes no Mundo Corporativo Rodrigo Cândido da Silva @rcandidosilva
  • 2. About Me • JUG Leader do GUJavaSC • http://gujavasc.org • Twitter • @rcandidosilva • Contatos • http://rodrigocandido.me
  • 3. Agenda • Conceitos • Batch Domain Language • Chunk vs. Batchlet • Partitioned Step • Flow, Split e Decision • Listeners e Exceptions • Execution • Integration • Demo
  • 4. Porque Batch? • É muito comum em aplicações • Várias soluções "personalizadas" • Produtos começaram a surgir • Spring Batch • WebSphere Compute Grid • Ideal para sistemas ETL
  • 5. Batch API • Chunk / Batchlet • Implementação de um Step • Contexts • Job e Step at runtime • Persistência de metadados • Listeners • Callback lifecycle events • Partitioning • Processamento paralelo
  • 6. Batch Domain Language • Batch job XML definition • Descreve os steps como um agrupamento de batch artefacts
  • 7. Batch Domain Language <job id="adressJob" version="1.0"> <listeners> <listener ref="MyJobListener"/> </listeners> <step id="buildingData" next="adressStep"> <batchlet ref="GenerateDataBatchlet" /> </step> <step id="adressStep"> <listeners> <listener ref="MyStepListener"/> </listeners> <chunk item-count="10"> <reader ref="adressItemReader" /> <processor ref="adressItemProcessor" /> <writer ref="adressItemWriter" /> </chunk> </step> </job>
  • 8. Chunk vs. Batchlet • Implementam step dentro do job • Chunk • Encapsula padrão ETL • Single Reader, Processor e Writer • Executado por pedaços de dados (chunk) • Chunk output é escrito unitariamente • Batchlet • Promove a execução de um único e simples processo • Executado até o fim produzindo um código de retorno
  • 10. Batchlet @Named public class MyBatchlet { @Process public String process() throws Exception {..} @Stop public void stopMe() throws Exception {..} } <step id="step1"> <batchlet ref="MyBatchlet"/> </step> public class MyBatchlet implements Batchlet {..}
  • 11. Chunk <step id="sendStatements"> <chunk reader="accountReader" processor="accountProcessor" writer="emailWriter" item-count="10"/> </step> @Named(“accountReader") ...implements ItemReader... {
 public Account readItem() {
 // read account using JPA @Named(“accountProcessor") ...implements ItemProcessor... { public Statement processItems(Account account) {
 // read Account, return Statement @Named(“emailWriter") ...implements ItemWriter... { public void writeItems(List<Statements> statements) {
 // use JavaMail to send email • Step Job
  • 12. Chunk public interface ItemReader<T> { public void open(Externalizable checkpoint); public T readItem(); public Externalizable checkpointInfo(); public void close(); } public interface ItemWriter<T> { public void open(Externalizable checkpoint); public void writeItems(List<T> items); public Externalizable checkpointInfo(); public void close(); } public interface ItemProcessor<T, R> { public R processItem(T item); }
  • 13. Checkpoint • Para tarefas intensivas, longo período de tempo • Checkpoint/restart é bastante utilizado • Basicamente… • Armazena estado do ItemReader, ItemWriter • Método chamados • reader.checkpointInfo() • writer.checkpointInfo() public interface ItemReader<T> { public void open(Externalizable checkpoint); public Externalizable checkpointInfo(); } public interface ItemWriter<T> { public void open(Externalizable checkpoint); public Externalizable checkpointInfo(); } <chunk checkpoint-policy="item" commit-interval="10" item-count="10">
  • 14. Partitioned Step • Step pode rodar particionado • [N] instâncias do mesmo step em [N] Threads • Uma partição por Thread <step id="step1"> <chunk> <partition> <plan partitions="10" threads="2"/> <reducer /> </partition> </chunk> </step>
  • 15. Partitioned Step • Partition Mapper • Decide dinamicamente o número de partições • Partition Plan • Partition Reducer • Demarca a unidade lógica de trabalho • Partition Collector • Enviar resultados de processamento das partições • Partition Analyzer • Ponto de controle e análise dos resultados enviados
  • 16. Flow, Split e Decision Flow Step I Task Step II Chunk ItemReader ItemWriter Step III Chunk Deci- sion ItemReader ItemWriter Step IV Chunk ItemReader ItemWriter EndStart ItemProcess or ItemProcess or ItemProcess or
  • 17. Flow • Define a lista de steps a ser executado (unitário) <flow id="flow-1" next="{flow, step, decision}-id"> <step id="flow_1_step_1"> </step> <step id="flow_1_step_2"> </step> </flow>
  • 18. Split • Define a lista de flows a serem executados (paralelo) • Coletores e analisadores para monitoramento <split > <flow /> <!-- each flow runs on a separate thread --> <flow /> </split>
  • 19. Decision • Possibilita a implementação de workflows
  • 20. Decision @Named public class Decider { public String decide(BatchContext context) throws Exception { String exit = context.getExitStatus(); if (“SUCCESS”.equals(exit)) { return “SKIP”; } return exit; } } <step id="step1"> <decision id="decision1" ref="Decider"> <next on="SKIP" to="step3"/> <next on="*" to="step2"/> </decision> </step> <step id="step2" next="step3"/> <step id="step3"/>
  • 22. Listeners @Named public class StepListener { @BatchContext StepContext context; @BeforeStep public void beforeStep() {..} @AfterStep public void afterStep() {..} } <step id="step1"> <listeners> <listener ref="StepListener"/> </listeners> </step> • Step • StepListener, ItemReadListener, ItemProcessListener, ItemWriterListener, ChunkListener, RetryReadListener, RetryProcessListener, RetryWriteListener, SkipReadListener, SkipProcessListener, SkipWriteListener • Job • JobListener
  • 23. Exceptions <job id="..."> <chunk skip-limit="5" retry-limit="5"> <skippable-exception-classes> <include class="java.lang.Exception"/> <exclude class="java.io.FileNotFoundException"/> </skippable-exception-classes> <retryable-exception-classes>
 </retryable-exception-classes> <no-rollback-exception-classes> ... </no-rollback-exception-classes> </chunk> </job>
  • 24. • JobOperator • Runtime interface para gerenciamento • start, stop, restart • JobRepository interface commands • JobRepository • Contém informações sobre os jobs • Completos e em execução JobOperator e Repository
  • 25. Execution • JobInstance • Representação lógica de um job runtime • JobExecution • Suporte clustering, segurança, gerenciamento de recursos • StepExecution • Tentativa de rodar um step de um job
  • 26. Integration • Suporte ao Java SE • Application Server Runtime • Suporte clustering, segurança, gerenciamento de recursos • Dependency Injection com CDI • XML descriptors • META-INF/batch-jobs/myJob.xml • Empacotamento • JAR, WAR, EJB
  • 27. Demo • Java EE 7 Samples • Diferentes exemplos de utilização Batch API • https://github.com/javaee-samples/javaee7-samples/tree/master/batch
  • 29. Referências • https://jcp.org/en/jsr/detail?id=352 • https://java.net/projects/jbatch • http://projects.spring.io/spring-batch/ • http://docs.oracle.com/javaee/7/tutorial/doc/batch-processing.htm • http://www.oracle.com/technetwork/articles/java/batch-1965499.html • https://github.com/javaee-samples/javaee7-samples/ • http://blog.arungupta.me/2014/07/schedule-javaee7-batch-jobs-techtip36/ • http://www.planetjones.co.uk/blog/25-05-2013/introducing-jsr-352-java- batch-ee-7.html