JSR 352 - Processamento Batch na Plataforma Java
Danival T. Calegari
Danival Taffarel Calegari
● Mestre em Ciência da Computação pela Unicamp
● Atua a mais de 10 anos em desenvolvimento de aplicações
Java EE
● Vários projetos com batch (billing para telecom e elétrica, aplicações
para mercado financeiro).
● Líder técnico na MATERA Systems
● Instrutor da Globalcode a mais de 8 anos
● Palestras em vários eventos: JavaOne, JustJava, TDC
● Certificações: SCJP, SCWCD, SCBCD
Agenda
● Motivação da JSR 352
● Conceitos
● Características da especificação
● Jobs e Steps
● Chunck
● Batchlet
● Referências
Motivação da JSR
● Processamento em batch é muito comum em aplicações.
● Várias soluções “personalizadas”.
● Produtos começaram a surgir
● Spring Batch
● WebSphere Compute Grid
● Objetivo
● Permitir a implementação de aplicações em batch usando um modelo de
programação padronizado
● Participantes
Conceitos
● Processamento em batch é definido por uma execução
orientada a massa de dados não interativa que executa em
background.
● Requisitos comuns
● Logging
● Estabelecimento de checkpoints
● Paralelização
● Controle de operações
Conceitos
JSR 352
http://static.springsource.org/spring-batch/reference/html/
Conceitos
http://static.springsource.org/spring-batch/reference/html/
Conceitos
http://static.springsource.org/spring-batch/reference/html/
Conceitos
http://static.springsource.org/spring-batch/reference/html/
Características da Especificação
● Java SE e Java EE
● Configuração orientada a XML
● Interfaces e classes abstratas para estabelecimento de
contratos
● Possui suporte próprio para injeção de dependências
● Parâmetros, contextos
● O mecanismo fica a cargo da implementação da especificação
● Comunicação entre os elementos através de contextos
● JobContext
● StepContext
● Configurações do mecanismo por XML
● META-INF/batch.xml
Jobs e Steps
● A configuração dos Jobs é feita em arquivos XML
● META-INF/batch-jobs
● WEB-INF/classes/META-INF/batch-jobs
● JSL – Job Specification Language
<job id="myJob" version="1.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<step id="myStep" >
<!-- chunck / batchlet -->
</step>
</job>
Chunck
● Processamento de um bloco de dados
● Periodicamente é feito um checkpoint dos dados processados
● Cada chunck é processado em uma transação separada
● É feita uma única chamada ao ItemWriter por chunck
● Permite reinínio a partir do último checkpoint em caso de falhas.
<job id="myJob" version="1.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<step id="myStep" >
<chunk item-count="3">
<reader ref="myItemReader"></reader>
<processor ref="myItemProcessor"></processor>
<writer ref="myItemWriter"></writer>
</chunk>
</step>
</job>
Chunck
● Classes e interfaces envolvidas
● ItemReader
● AbstractItemReader
● ItemWriter
● AbstractItemWriter
● ItemProcessor
● Outras configurações
● Mecanismo de checkpoint
● Particionamento de processamento
● Tratamento de exceções
Batchlet
● Processamento orientado a tarefa
● É executado apenas uma vez pela tarefa
● Permite maior liberdade na forma como vai ser implementado
● javax.batch.api.Batchlet
<job id="myJob" version="1.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<step id="myStep" >
<batchlet ref="myBatchlet"/>
</step>
</job>
Referências
● https://java.net/projects/jbatch
● http://static.springsource.org/spring-batch/reference/html
● http://www.infoq.com/presentations/JSR-352-Java-Batch
Obrigado!
@danivaltc
[email protected]