2. Formation officielle Spring Source
Formation certifiante : donnant le droit de passer la
certification Spring.
Durée 4 jours
Formation 50% théorie, 50% pratique
Formation animée par Grégory Boissinot
3. Agenda
Jour 1
Introduction aux différents styles d'intégration
Tâches et ordonnancement
Remoting
SOAP web services
4. Agenda
Jour 2
Advanced Web services
RESTful web services
Working with JMS
Transactional JMS
5. Agenda
Jour 3
Global transaction management (XA & JTA)
Spring Integration
7. Spring Batch
Philosophie de traitement répétitif de volumes importants de
données sans interactions humaines.
8. Présentation du cadre de spring batch
Un Job est constitué de Steps.
Une Step est constituée de ItemReader, ItemProcessor,
ItemWriter
Une JobInstance est constituée d'un Job et de JobParameters
Une tentative exécution d'une JobInstance est une
JobExecution
Les meta data d'une JobExecution sont enregistréee dans le
JobRepository
Le JobLauncher est en charge de lancer les Jobs
12. ItemReader & ItemWriter
off-the-shelf components
file
xml
jdbc
Hibernate
JMS
Possibilité de créer ces propres reader et writer en implémentant
les interfaces : ItemReader et ItemWriter
15. JobRepository
Enregistrement des informations des JobExecution : Job
Context, Step Context, Job Instance, Job Params.
Enregistrement volatile (en mémoire) ou persisté (en base de
données relationnelle).
16. MapJobRepositoryFactoryBean
A FactoryBean that automates the creation of a
SimpleJobRepository using non-persistent in-memory DAO
implementations.
<bean id="jobRegistry" class="org.springframework.batch...MapJobRegistry">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
17. JobRepositoryFactoryBean
A FactoryBean that automates the creation of a
SimpleJobRepository using JDBC DAO implementations which
persist batch metadata in database.
<bean id="jobRepository" class="org...JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
18. Restart and Recovery
Gestion de l'état et des exécutions pour permettre le
redémarrage et la récupération en cas d'erreur.
19. ExecutionContext
Utilisation de Job ExecutionContext fournissant l'état initial
pour un redémarrage. Step ExecutionContext committé à la fin
de chaque chunk, permet de reprendre une exécution.
20. Stateful ItemReader/Writer
Permet d'enregister au sein du context d'exécution des valeurs
afin de permettre la reprise.
Attention à la gestion de l'état si les steps sont multi-threadées.
Interface StepExecutionListener avec les méthodes :
void beforeStep(StepExecution stepExecution)
ExitStatus afterStep(StepExecution stepExecution)
BeforeStep AfterStep
Possibilité d'utiliser les annotations et
21. ItemStream
Facilitation de la gestion d'état pour ItemReader :
open() appelé avant chaque appel à la méthode read
update() appelé à la fin de chaque chunk, avant le commit
close() appelé à la fin de chaque step
Interface implémentée par la plupart des readers founit.
Exemple:
FlatFileItemReader
Restartable ItemReader that reads lines from input
setResource(Resource)
22. FieldSet et FieldSetMapper
Dans le cadre de la lecture de fichier, Spring fournit une
représentation de la ligne lue grâce à un wrapper : FieldSet.
Le FieldSet est ensuite transformé sous forme d'objet grâce à
un FieldSetMapper.
23. FieldSet et FieldSetMapper
Spring founit des mappers tels que :
PassthourghFieldSetMapper: retourne le fieldset tel quel.
BeanWrapperFieldSetMapper: utiliser le noms des champs
pour mapper avec les propriétes d'un objet.
24. Partage d'état entre Step
Utilisation du JobExecutionContext
@BeforeStep
public void retrieveInterstepData(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
jobContext.get("sharedObject");
}
25. Partage d'état entre Step
Utilisation du ExecutionContextPromotionListener
<bean id="promotionListener" class="org...ExecutionContextPromotionListener">
<property name="key" value="myKey" />
</bean>
26. Scope Step
Utilisation de SpEL pour injecter dynamiquement les parametres
du job.
<bean id="reader" scope="step" class="MyReader">
<property name="resource" value="#{jobParameters['input.resource.path']}">
</property>
</bean>
27. Skip, Retry, Repeat, Restart
Repeat : lorsqu'on souhaite itérer sur une collection de
ressources
Retry : lors d'une erreur non attribuable à la tâche
Skip : toutes les erreurs ne sont pas causes d'échec
Restart : redémarrage
28. Repeat
On ne parle plus d'une chunk oriented step.
package org.springframework.batch.core.step.tasklet;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.repeat.RepeatStatus;
public interface Tasklet {
RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception;
}
31. Restart
Spring Batch utilise le contexte persisté où relance la tâche
from scratch.
Possibilité de désactiver le redémarrage de steps <tasklet
allow‐start‐if‐complete="true">
Possibilité de limiter le nombre de démarrage d'une step :
<tasklet start‐limit="1">
32. Listeners
Callback au cours de l'exécution (logging, auditing, state, error
handling, etc.)
JobExecutionListener
StepListener
StepExecution-, Chunk-, Item(Read|Processor|Writer)- et
SkipListener
37. Scaling and parallel processing
A utiliser seulement en cas de nécessaire besoin.
Multi-threaded Step
Parallel Step
Remote Chunking Step (spring-batch-integration)
Partitionning Step
38. Multi-threaded Step
Il suffit d'ajouter un
TaskExecutor
<step id="loading">
<tasklet task‐executor="taskExecutor" throttle‐limit="20" />
</step>
Item(Reader|Writer|Processor) doivent être stateless ou
thread-safe
La plupart des Items fournit par Spring Batch ne sont pas
thread-safe
throttle-limit correspond au nombre de threads disponibles
42. Spring Batch Admin
Sous projet de Spring Batch
Sous la forme d'un war ou d'un jar
fournit une interface web et une API RESTFul pour inspecter
les jobs
se branche sur les meta datas persistées par le
JobRepository