Workshop Spring - Session 1 - L'offre Spring et les bases
-
Author
antoine-rey -
Category
Technology
-
view
3.763 -
download
4
Embed Size (px)
description
Transcript of Workshop Spring - Session 1 - L'offre Spring et les bases

# 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 œuvre
# 3
Sommaire

1. Zoom sur le portfolio de Spring Pivotal
Le cœur 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 cœur 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 cœur du framework Spring (2/2)
Exemple d’une application web avec une architecture 5 tiers
Action
StrutsService
Métier
Base
de
donnéesDAO
Conteneur Spring
Proxy
JVM de l’application

# 7
Le portfolio Spring
Spring dépasse le cadre du simple framework
Spring Framework est composé de différents modulesSpring 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 projetsRachats, 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 cœur 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
Présentation
Tests
BPM
Supervision
Validation
Mailing
Mobile
Persistance
Planification
Réseaux sociauxCloud
Applications RAD
Big Data
Intégration
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, JDOSpring ORM
API de haut de niveau pour les bases NoSQL,
les grilles de données et JPASpring 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, AMQPSpring JMS
Support communication entrantes et sortantes JCA Spring TX
Communication distante avec EJB, RMI, Caucho, et
JAX-RPCSpring Remoting
Implémentation des Enterprise Integration
PatternsSpring Integration
Traitement par lots avec reprise sur erreur Spring Batch
Authentification LDAP et SSO et gestion des
habilitationsSpring Security
Runtime distribué d’intégration, d’analyse et
d’export de données, notamment vers HadoopSpring XD

# 14
Tester les applications
Fonctionnalité Module / Ext
Support des principaux frameworks de tests
unitaires TestNG et JUnitSpring Test
Espace de nommage et API pour les bases de
données embarquées H2, HSQLDB et DerbySpring 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 BeanShellSpring Scripting
Génération de code Groovy et de requêtes HQL
à l’aide de convention de nommageGrails
Démarrage rapide d’applications Spring sans
configuration.Spring Boot
Génération de code Java et d’aspects à partir
d’annotationsSpring Roo
Bundle Eclipse proposant wizards, outils visuels
et fonctionnalités de déploiementSpring Tool Suite
IDE graphique et déploiement dans le cloud WaveMaker

1. Zoom sur le portfolio de Spring Pivotal
Le cœur 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
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
«interface»ICompteDAO
* 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
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)
L’injection de dépendances

# 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 jpaCompteDAOJdkDynamicAopProxy
invoke
TransactionInterceptor
invoke
crediter

1. Zoom sur le portfolio de Spring Pivotal
Le cœur 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

# 25
Déclaration de beans par annotations
<?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
@Repository
public class JpaCompteDAO implements ICompteDAO {
}
@Service("banqueService")
public class DefaultBanqueService implements IBanqueService
{
@Autowired
private ICompteDAO compteDAO;
/* Setter */
}
Beans Spring
annotés
Injection du bean
ayant le type
ICompteDAO
Identifiant du bean

# 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
Classe remplaçant la
configuration XML
Injection du DAO
par son type
Définition de 2 beans
Spring
nom de la méthode
=
nom du bean

1. Zoom sur le portfolio de Spring Pivotal
Le cœur 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