SlideShare une entreprise Scribd logo
1  sur  28
# 1 
Workshop Spring - Session 1 
L’offre Spring 
Diffusé en décembre 2011 
Réactualisé en octobre 2014
# 2 
Objectifs 
Découvrir l’écosystème des technologies supportées par 
Spring 
Approfondir ses connaissances sur les rouages du 
conteneur léger 
Profiter de retours d’expérience sur l’utilisation de 
différentes briques 
Appliquer au plus tôt ce que vous aurez appris
1. L’offre Spring 
Le portfolio et les fondamentaux du framework 
2. Intégration au sein des applications Java EE 
 Persistance et tests unitaires 
3. Techniques avancées du conteneur léger 
 Post-Processeurs, EL, support des JSR 
4. Retour d’expérience sur l’utilisation de Spring Batch 
Etude de cas, principes et mise en oeuvre 
# 3 
Sommaire
1. Zoom sur le portfolio de Spring Pivotal 
Le coeur du framework Spring 
Le support proposé par Spring 
2. Les fondamentaux 
Fonctionnement du conteneur léger 
Les beans Spring 
Design patterns rencontré dans Spring 
# 4 
Worshop n°1 – L’offre Spring
# 5 
Le coeur du framework Spring (1/2) 
Conteneur léger 
Assemble les composants applicatifs 
Injection de dépendance 
Gère leur cycle de vie 
Programmation orientée aspect 
Ajout de fonctionnalités transverses 
Séparation des préoccupations 
Intégration de frameworks tiers 
Support natif d’un grand nombre 
de frameworks 
et de standards Java EE 
Abstraction facilitant le changement d’implémentation 
Ouvert aux extensions
# 6 
Le coeur du framework Spring (2/2) 
Exemple d’une application web avec une architecture 5 tiers 
Action 
Struts 
JVM de l’application 
Service 
Métier 
Base 
de 
données 
DAO 
Proxy 
Conteneur Spring
# 7 
Le portfolio Spring 
Spring dépasse le cadre du simple framework 
Spring Framework est composé de différents modules 
Spring core contient le conteneur léger 
Autres modules : ORM, DAO, AOP, Web, JEE 
Les modules suivent le même cycle de livraison 
Le portolio Spring est également composé de projets 
Rachats, intégration de projets open source, nouvelles idées 
Basés sur le framework Spring 
Propre cycle de livraison
Worshop n°1 – L’offre Spring 
1. Zoom sur le portfolio de Spring Pivotal 
Le coeur du framework Spring 
Le support proposé par Spring 
2. Les fondamentaux 
Fonctionnement du conteneur léger 
Les beans Spring 
Design patterns rencontré dans Spring 
# 8
# 9 
Le support proposé par Spring 
Intégration 
Présentation 
Validation 
Tests 
BPM 
Supervision 
Mailing 
Mobile 
Persistance 
Planification 
Réseaux sociaux 
Cloud 
Applications RAD 
Big Data 
Services Web
# 10 
La Persistance 
Fonctionnalité Module / Projet 
Gestion des transactions Spring TX 
Hiérarchie d’exceptions génériques Spring TX 
Facilite l’utilisation de JDBC Spring JDBC 
Support des frameworks de mapping objets 
relationnels Hibernate, JPA, iBatis, JDO 
Spring ORM 
API de haut de niveau pour les bases NoSQL, 
les grilles de données et JPA 
Spring Data 
Marshalling /Unmarshalling XML Spring OXM
# 11 
Couche de Présentation 
Fonctionnalité Module / Projet / Tiers 
Standards supportés : Servlet, JSP, JSTL, JSF, 
Portlet 
Spring Web 
Support de frameworks web tiers : Struts, Tiles, 
WebWork, Tapestry 
Spring Web 
Implémentation propriétaire du pattern MVC 2 Spring MVC 
Gestion du cycle de vie d’un flot web Spring Web Flow 
Support Ajax avec DWR DWR 
Support d’applications RIA en Flex Spring BlazeDS 
Integration
# 12 
Communication par web services 
Fonctionnalité Module / Projet / Tiers 
Web services SOAP avec approche contract-first 
avec support des API DOM, JDOM, DOM4J, SAX, 
JAXB, Castor XML, XML Beans, JiBX, Xstream 
Spring WS 
Exposer et consommer des web services SOAP 
avec les standards JAX-RPC et JAX-WS et une 
approche code-first 
Spring Remoting 
Web services REST Spring MVC 
Espace de nommage dédié à CXF CXF
# 13 
Intégration au SI 
En complément de l’intégration par services web 
Fonctionnalité Module / Projet 
Support de middleware orienté message (MoM) : 
JMS, AMQP 
Spring JMS 
Support communication entrantes et sortantes JCA Spring TX 
Communication distante avec EJB, RMI, Caucho, et 
JAX-RPC 
Spring Remoting 
Implémentation des Enterprise Integration 
Patterns 
Spring Integration 
Traitement par lots avec reprise sur erreur Spring Batch 
Authentification LDAP et SSO et gestion des 
habilitations 
Spring Security 
Runtime distribué d’intégration, d’analyse et 
d’export de données, notamment vers Hadoop 
Spring XD
# 14 
Tester les applications 
Fonctionnalité Module / Ext 
Support des principaux frameworks de tests 
unitaires TestNG et JUnit 
Spring Test 
Espace de nommage et API pour les bases de 
données embarquées H2, HSQLDB et Derby 
Spring JDBC 
Support du pattern Rollback after the test Spring Test 
Tests d’applications web basées sur Spring MVC Spring Test 
Simulacres d’objets JEE Spring Test 
Tester des services web sans serveur HTTP Spring WS Test
# 15 
Rapid Application Development 
Fonctionnalité Module / Projet 
Support des langages dynamiques Groovy, 
JRuby et BeanShell 
Spring Scripting 
Génération de code Groovy et de requêtes HQL 
à l’aide de convention de nommage 
Grails 
Démarrage rapide d’applications Spring sans 
configuration. 
Spring Boot 
Génération de code Java et d’aspects à partir 
d’annotations 
Spring Roo 
Bundle Eclipse proposant wizards, outils visuels 
et fonctionnalités de déploiement 
Spring Tool Suite 
IDE graphique et déploiement dans le cloud WaveMaker
1. Zoom sur le portfolio de Spring Pivotal 
Le coeur du framework Spring 
Le support proposé par Spring 
2. Les fondamentaux 
Fonctionnement du conteneur léger 
Les beans Spring 
Design patterns rencontré dans Spring 
# 16 
Worshop n°1 – L’offre Spring
«interface» 
ICompteDAO 
# 17 
L’inversion de contrôle 
Basé sur le découplage des classes et la programmation par interface 
BanqueService JpaCompteDAO 
* 1 
Couplage fort entre un 
service métier et un DAO 
BanqueService 
JpaCompteDAO 
* 1 
L’introduction de 
l’interface permet de 
découpler le service de 
l’implémentation du DAO 
Le service ne dépend plus du DAO 
Le DAO dépend d’une interface utilisée par le service 
L’inversion de contrôle permet au service de ne pas connaître le code 
qu’il va exécuter
# 18 
L’injection de dépendances 
Mécanisme permettant d’implémenter l’inversion de contrôle 
Le conteneur léger est un assembleur ; il gère : 
le cycle de vie des composants applicatifs 
et leur mise en relation 
La phase d’injection de dépendance est appelée wiring 
Les dépendances sont résolues dynamiquement 
3 types d’injection : constructeur, mutateur et interface 
Injection de dépendances standardisée en 2009 dans : 
JSR 330 - Dependency Injection for Java 
JSR 299 - Context and Dependency Injection for Java EE (CDI)
# 19 
Intercepter un appel 
Spring peut modifier la chaîne d’appel des composants pour par exemple : 
Greffer des aspects 
Insérer un comportement transactionnel 
2 types de proxy en fonction de l’appelé : 
Interface par l’utilisation de proxy dynamique java.lang.reflect.Proxy 
Classe par instrumentation de code 
banqueService JdkDynamicAopProxy jpaCompteDAO 
invoke 
TransactionInterceptor 
invoke 
crediter
1. Zoom sur le portfolio de Spring Pivotal 
Le coeur du framework Spring 
Le support proposé par Spring 
2. Les fondamentaux 
Fonctionnement du conteneur léger 
Les beans Spring 
Design patterns rencontré dans Spring 
# 20 
Worshop n°1 – L’offre Spring
# 21 
Bean Spring 
Bean Spring = instance d’une classe pouvant être un simple POJO 
Possède les caractéristiques suivantes : 
un identifiant 
un type 
une portée 
des propriétés (types simples ou structures données) 
des collaborateurs 
des méthodes d’initialisation / destruction 
un constructeur 
un nom 
un bean parent 
un mode d’injection 
Injection explicite ou automatique (auto-wiring)
# 22 
Portées des beans Spring 
La portée d’un bean détermine son cycle de vie 
Utilisée lors de l’injection ou par la méthode getBean du contexte applicatif 
Portées proposées par Spring pour une application web : 
Portée Description 
singleton 
(par défaut) 
Un unique bean est créé pour toute la durée de vie du 
contexte Spring 
prototype Une nouvelle instance est créée à chaque fois que le bean 
est référencé 
session Une instance de bean est créée pour chaque session HTTP 
request Une instance de bean est créée pour chaque requête HTTP 
Portées supplémentaires : 
chunk pour les batchs et globalSession pour les portlets 
Possibilité de créer sa propre portée
# 23 
L’injection en pratique 
Spring propose 3 approches pour configurer son contexte applicatif 
Type Atouts 
Déclaration XML Aucune adhérence du code à Spring 
Centralisation de la configuration 
Schémas XML dédiés pour alléger l’écriture 
Complet 
Automatisée par 
annotations 
Configuration allégée 
Particulièrement adaptée aux tests unitaires 
Se rapproche de la JSR-330 Dependency Injection 
Par programmation Typage fort et vérifications à la compilation 
Refactoring géré nativement par l’IDE 
Orienté Objet 
Possibilité de mixer ces approches 
Complémentaires
public class JpaCompteDAO implements ICompteDAO { 
} 
public class DefaultBanqueService implements IBanqueService { 
private ICompteDAO compteDAO; 
public void setCompteDAO(ICompteDAO compteDAO) { 
this.compteDAO = compteDAO; 
} 
} 
<?xml version="1.0" encoding="UTF-8"?> 
<beans … > 
<bean id="jpaCompteDAO" class="com.sqli.demo.persistence.impl.JpaCompteDAO"/> 
<bean id="banqueService" 
class="com.sqli.demo.service.impl.DefaultBanqueService"> 
<property name="compteDAO" ref="jpaCompteDAO"/> 
</bean> 
</beans> 
# 24 
Déclaration de beans en XML 
Service et DAO 
sous forme de 
simple POJO 
Wiring par mutateur
Identifiant du bean 
@Service("banqueService") 
public class DefaultBanqueService implements IBanqueService 
{ 
# 25 
Déclaration de beans par annotations 
@Repository 
public class JpaCompteDAO implements ICompteDAO { 
} 
@Autowired 
private ICompteDAO compteDAO; 
/* Setter */ 
} 
Beans Spring 
annotés 
Injection du bean 
ayant le type 
ICompteDAO 
<?xml version="1.0" encoding="UTF-8"?> 
<beans ...> 
<context:component-scan base-package="com.sqli.demo" /> 
</beans> 
Active la détection des beans Spring présents dans le package
# 26 
Déclaration par programmation 
public class JpaCompteDAO implements ICompteDAO { 
} 
public class DefaultBanqueService implements IBanqueService { 
@Autowired 
private ICompteDAO compteDAO; 
/* Setter */ 
} 
@Configuration 
public class ServiceBancaireConfiguration { 
@Bean 
public IBanqueService banqueService() { 
return new DefaultBanqueService(); 
} 
@Bean 
public ICompteDAO jpaCompteDAO() { 
return new JpaCompteDAO(); 
} 
} 
Les classes 
de service et 
de DAO ne sont 
pas annotées 
Injection du DAO 
par son type 
Classe remplaçant la 
configuration XML 
Définition de 2 beans 
Spring 
nom de la méthode 
= 
nom du bean
1. Zoom sur le portfolio de Spring Pivotal 
Le coeur du framework Spring 
Le support proposé par Spring 
2. Les fondamentaux 
Fonctionnement du conteneur léger 
Les beans Spring 
Design patterns rencontré dans Spring 
# 27 
Worshop n°1 – L’offre Spring
# 28 
Design Patterns utilisés par Spring 
Pattern Exemples d’utilisation 
Factory Fabrique de beans, de sessions Hibernate, de 
proxy spécifiques, de validateurs 
Template Method Classes de template pour Hibernate, JPA, JDBC, 
JMS, web service SOAP, REST 
Proxy Décoration des beans, transactions, tissage des 
aspects (AOP) 
Specification Mutualisation de critères de recherche dans 
Spring Data 
Builder Constructeurs de flow web, de messages 
Singleton Portée par défaut des beans 
Adapter Listener de messages JMS, entité d’adaptation 
de traitement d’un web service

Contenu connexe

Tendances

Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 

Tendances (20)

Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
spring-api-rest.pdf
spring-api-rest.pdfspring-api-rest.pdf
spring-api-rest.pdf
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Les collections en Java
Les collections en JavaLes collections en Java
Les collections en Java
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 

En vedette

Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Richard Banks
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
pessimistic-development-presentation
pessimistic-development-presentationpessimistic-development-presentation
pessimistic-development-presentationJonathan Marbutt
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Learned optimism
Learned optimismLearned optimism
Learned optimismAndrew Chaa
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample applicationAntoine Rey
 

En vedette (12)

Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016Microservices with .Net - NDC Sydney, 2016
Microservices with .Net - NDC Sydney, 2016
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
pessimistic-development-presentation
pessimistic-development-presentationpessimistic-development-presentation
pessimistic-development-presentation
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Learned optimism
Learned optimismLearned optimism
Learned optimism
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
 

Similaire à Workshop Spring - Session 1 - L'offre Spring et les bases

Similaire à Workshop Spring - Session 1 - L'offre Spring et les bases (20)

Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Java j2ee
Java j2eeJava j2ee
Java j2ee
 
Java Server Faces - Beyond
Java Server Faces - BeyondJava Server Faces - Beyond
Java Server Faces - Beyond
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
cours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdfcours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdf
 
Building Entreprise App With Spring Portfolio
Building Entreprise App With Spring PortfolioBuilding Entreprise App With Spring Portfolio
Building Entreprise App With Spring Portfolio
 
Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)Soirée OSGi au Paris Jug (14/10/2008)
Soirée OSGi au Paris Jug (14/10/2008)
 
Portails Etat De L'art
Portails  Etat De L'artPortails  Etat De L'art
Portails Etat De L'art
 
Java Server Faces 2
Java Server Faces 2Java Server Faces 2
Java Server Faces 2
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
JavaRMI.pdf
JavaRMI.pdfJavaRMI.pdf
JavaRMI.pdf
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdf
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Cours spring
Cours springCours spring
Cours spring
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
Spring
SpringSpring
Spring
 

Workshop Spring - Session 1 - L'offre Spring et les bases

  • 1. # 1 Workshop Spring - Session 1 L’offre Spring Diffusé en décembre 2011 Réactualisé en octobre 2014
  • 2. # 2 Objectifs Découvrir l’écosystème des technologies supportées par Spring Approfondir ses connaissances sur les rouages du conteneur léger Profiter de retours d’expérience sur l’utilisation de différentes briques Appliquer au plus tôt ce que vous aurez appris
  • 3. 1. L’offre Spring Le portfolio et les fondamentaux du framework 2. Intégration au sein des applications Java EE  Persistance et tests unitaires 3. Techniques avancées du conteneur léger  Post-Processeurs, EL, support des JSR 4. Retour d’expérience sur l’utilisation de Spring Batch Etude de cas, principes et mise en oeuvre # 3 Sommaire
  • 4. 1. Zoom sur le portfolio de Spring Pivotal Le coeur du framework Spring Le support proposé par Spring 2. Les fondamentaux Fonctionnement du conteneur léger Les beans Spring Design patterns rencontré dans Spring # 4 Worshop n°1 – L’offre Spring
  • 5. # 5 Le coeur du framework Spring (1/2) Conteneur léger Assemble les composants applicatifs Injection de dépendance Gère leur cycle de vie Programmation orientée aspect Ajout de fonctionnalités transverses Séparation des préoccupations Intégration de frameworks tiers Support natif d’un grand nombre de frameworks et de standards Java EE Abstraction facilitant le changement d’implémentation Ouvert aux extensions
  • 6. # 6 Le coeur du framework Spring (2/2) Exemple d’une application web avec une architecture 5 tiers Action Struts JVM de l’application Service Métier Base de données DAO Proxy Conteneur Spring
  • 7. # 7 Le portfolio Spring Spring dépasse le cadre du simple framework Spring Framework est composé de différents modules Spring core contient le conteneur léger Autres modules : ORM, DAO, AOP, Web, JEE Les modules suivent le même cycle de livraison Le portolio Spring est également composé de projets Rachats, intégration de projets open source, nouvelles idées Basés sur le framework Spring Propre cycle de livraison
  • 8. Worshop n°1 – L’offre Spring 1. Zoom sur le portfolio de Spring Pivotal Le coeur du framework Spring Le support proposé par Spring 2. Les fondamentaux Fonctionnement du conteneur léger Les beans Spring Design patterns rencontré dans Spring # 8
  • 9. # 9 Le support proposé par Spring Intégration Présentation Validation Tests BPM Supervision Mailing Mobile Persistance Planification Réseaux sociaux Cloud Applications RAD Big Data Services Web
  • 10. # 10 La Persistance Fonctionnalité Module / Projet Gestion des transactions Spring TX Hiérarchie d’exceptions génériques Spring TX Facilite l’utilisation de JDBC Spring JDBC Support des frameworks de mapping objets relationnels Hibernate, JPA, iBatis, JDO Spring ORM API de haut de niveau pour les bases NoSQL, les grilles de données et JPA Spring Data Marshalling /Unmarshalling XML Spring OXM
  • 11. # 11 Couche de Présentation Fonctionnalité Module / Projet / Tiers Standards supportés : Servlet, JSP, JSTL, JSF, Portlet Spring Web Support de frameworks web tiers : Struts, Tiles, WebWork, Tapestry Spring Web Implémentation propriétaire du pattern MVC 2 Spring MVC Gestion du cycle de vie d’un flot web Spring Web Flow Support Ajax avec DWR DWR Support d’applications RIA en Flex Spring BlazeDS Integration
  • 12. # 12 Communication par web services Fonctionnalité Module / Projet / Tiers Web services SOAP avec approche contract-first avec support des API DOM, JDOM, DOM4J, SAX, JAXB, Castor XML, XML Beans, JiBX, Xstream Spring WS Exposer et consommer des web services SOAP avec les standards JAX-RPC et JAX-WS et une approche code-first Spring Remoting Web services REST Spring MVC Espace de nommage dédié à CXF CXF
  • 13. # 13 Intégration au SI En complément de l’intégration par services web Fonctionnalité Module / Projet Support de middleware orienté message (MoM) : JMS, AMQP Spring JMS Support communication entrantes et sortantes JCA Spring TX Communication distante avec EJB, RMI, Caucho, et JAX-RPC Spring Remoting Implémentation des Enterprise Integration Patterns Spring Integration Traitement par lots avec reprise sur erreur Spring Batch Authentification LDAP et SSO et gestion des habilitations Spring Security Runtime distribué d’intégration, d’analyse et d’export de données, notamment vers Hadoop Spring XD
  • 14. # 14 Tester les applications Fonctionnalité Module / Ext Support des principaux frameworks de tests unitaires TestNG et JUnit Spring Test Espace de nommage et API pour les bases de données embarquées H2, HSQLDB et Derby Spring JDBC Support du pattern Rollback after the test Spring Test Tests d’applications web basées sur Spring MVC Spring Test Simulacres d’objets JEE Spring Test Tester des services web sans serveur HTTP Spring WS Test
  • 15. # 15 Rapid Application Development Fonctionnalité Module / Projet Support des langages dynamiques Groovy, JRuby et BeanShell Spring Scripting Génération de code Groovy et de requêtes HQL à l’aide de convention de nommage Grails Démarrage rapide d’applications Spring sans configuration. Spring Boot Génération de code Java et d’aspects à partir d’annotations Spring Roo Bundle Eclipse proposant wizards, outils visuels et fonctionnalités de déploiement Spring Tool Suite IDE graphique et déploiement dans le cloud WaveMaker
  • 16. 1. Zoom sur le portfolio de Spring Pivotal Le coeur du framework Spring Le support proposé par Spring 2. Les fondamentaux Fonctionnement du conteneur léger Les beans Spring Design patterns rencontré dans Spring # 16 Worshop n°1 – L’offre Spring
  • 17. «interface» ICompteDAO # 17 L’inversion de contrôle Basé sur le découplage des classes et la programmation par interface BanqueService JpaCompteDAO * 1 Couplage fort entre un service métier et un DAO BanqueService JpaCompteDAO * 1 L’introduction de l’interface permet de découpler le service de l’implémentation du DAO Le service ne dépend plus du DAO Le DAO dépend d’une interface utilisée par le service L’inversion de contrôle permet au service de ne pas connaître le code qu’il va exécuter
  • 18. # 18 L’injection de dépendances Mécanisme permettant d’implémenter l’inversion de contrôle Le conteneur léger est un assembleur ; il gère : le cycle de vie des composants applicatifs et leur mise en relation La phase d’injection de dépendance est appelée wiring Les dépendances sont résolues dynamiquement 3 types d’injection : constructeur, mutateur et interface Injection de dépendances standardisée en 2009 dans : JSR 330 - Dependency Injection for Java JSR 299 - Context and Dependency Injection for Java EE (CDI)
  • 19. # 19 Intercepter un appel Spring peut modifier la chaîne d’appel des composants pour par exemple : Greffer des aspects Insérer un comportement transactionnel 2 types de proxy en fonction de l’appelé : Interface par l’utilisation de proxy dynamique java.lang.reflect.Proxy Classe par instrumentation de code banqueService JdkDynamicAopProxy jpaCompteDAO invoke TransactionInterceptor invoke crediter
  • 20. 1. Zoom sur le portfolio de Spring Pivotal Le coeur du framework Spring Le support proposé par Spring 2. Les fondamentaux Fonctionnement du conteneur léger Les beans Spring Design patterns rencontré dans Spring # 20 Worshop n°1 – L’offre Spring
  • 21. # 21 Bean Spring Bean Spring = instance d’une classe pouvant être un simple POJO Possède les caractéristiques suivantes : un identifiant un type une portée des propriétés (types simples ou structures données) des collaborateurs des méthodes d’initialisation / destruction un constructeur un nom un bean parent un mode d’injection Injection explicite ou automatique (auto-wiring)
  • 22. # 22 Portées des beans Spring La portée d’un bean détermine son cycle de vie Utilisée lors de l’injection ou par la méthode getBean du contexte applicatif Portées proposées par Spring pour une application web : Portée Description singleton (par défaut) Un unique bean est créé pour toute la durée de vie du contexte Spring prototype Une nouvelle instance est créée à chaque fois que le bean est référencé session Une instance de bean est créée pour chaque session HTTP request Une instance de bean est créée pour chaque requête HTTP Portées supplémentaires : chunk pour les batchs et globalSession pour les portlets Possibilité de créer sa propre portée
  • 23. # 23 L’injection en pratique Spring propose 3 approches pour configurer son contexte applicatif Type Atouts Déclaration XML Aucune adhérence du code à Spring Centralisation de la configuration Schémas XML dédiés pour alléger l’écriture Complet Automatisée par annotations Configuration allégée Particulièrement adaptée aux tests unitaires Se rapproche de la JSR-330 Dependency Injection Par programmation Typage fort et vérifications à la compilation Refactoring géré nativement par l’IDE Orienté Objet Possibilité de mixer ces approches Complémentaires
  • 24. public class JpaCompteDAO implements ICompteDAO { } public class DefaultBanqueService implements IBanqueService { private ICompteDAO compteDAO; public void setCompteDAO(ICompteDAO compteDAO) { this.compteDAO = compteDAO; } } <?xml version="1.0" encoding="UTF-8"?> <beans … > <bean id="jpaCompteDAO" class="com.sqli.demo.persistence.impl.JpaCompteDAO"/> <bean id="banqueService" class="com.sqli.demo.service.impl.DefaultBanqueService"> <property name="compteDAO" ref="jpaCompteDAO"/> </bean> </beans> # 24 Déclaration de beans en XML Service et DAO sous forme de simple POJO Wiring par mutateur
  • 25. Identifiant du bean @Service("banqueService") public class DefaultBanqueService implements IBanqueService { # 25 Déclaration de beans par annotations @Repository public class JpaCompteDAO implements ICompteDAO { } @Autowired private ICompteDAO compteDAO; /* Setter */ } Beans Spring annotés Injection du bean ayant le type ICompteDAO <?xml version="1.0" encoding="UTF-8"?> <beans ...> <context:component-scan base-package="com.sqli.demo" /> </beans> Active la détection des beans Spring présents dans le package
  • 26. # 26 Déclaration par programmation public class JpaCompteDAO implements ICompteDAO { } public class DefaultBanqueService implements IBanqueService { @Autowired private ICompteDAO compteDAO; /* Setter */ } @Configuration public class ServiceBancaireConfiguration { @Bean public IBanqueService banqueService() { return new DefaultBanqueService(); } @Bean public ICompteDAO jpaCompteDAO() { return new JpaCompteDAO(); } } Les classes de service et de DAO ne sont pas annotées Injection du DAO par son type Classe remplaçant la configuration XML Définition de 2 beans Spring nom de la méthode = nom du bean
  • 27. 1. Zoom sur le portfolio de Spring Pivotal Le coeur du framework Spring Le support proposé par Spring 2. Les fondamentaux Fonctionnement du conteneur léger Les beans Spring Design patterns rencontré dans Spring # 27 Worshop n°1 – L’offre Spring
  • 28. # 28 Design Patterns utilisés par Spring Pattern Exemples d’utilisation Factory Fabrique de beans, de sessions Hibernate, de proxy spécifiques, de validateurs Template Method Classes de template pour Hibernate, JPA, JDBC, JMS, web service SOAP, REST Proxy Décoration des beans, transactions, tissage des aspects (AOP) Specification Mutualisation de critères de recherche dans Spring Data Builder Constructeurs de flow web, de messages Singleton Portée par défaut des beans Adapter Listener de messages JMS, entité d’adaptation de traitement d’un web service