Apresentação feita no JustJava 2013 sobre a especificação resultante da JSR 352, que padroniza mecanismos para o desenvolvimento de processos batch dentro da plataforma Java. Esta especificação faz parte do Java EE 7 e foi acompanhada pelo palestrante dentro do programa de Adopt a JSR.
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
1. JSR 352 - Processamento Batch na Plataforma Java
Danival T. Calegari
2. 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
3. Agenda
● Motivação da JSR 352
● Conceitos
● Características da especificação
● Jobs e Steps
● Chunck
● Batchlet
● Referências
4. 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
5. 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
10. 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
11. 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>
12. 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>
13. Chunck
● Classes e interfaces envolvidas
● ItemReader
● AbstractItemReader
● ItemWriter
● AbstractItemWriter
● ItemProcessor
● Outras configurações
● Mecanismo de checkpoint
● Particionamento de processamento
● Tratamento de exceções
14. 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>