Transcript Document

Formation Spring
www.objis.com - Formation SPRING
1
A propos d’Objis…
 Centre de formation depuis 2005
 Spécialiste technologies Java/J2ee
 Formations intra/inter entreprises
 70% de pratique
 Paris – Lyon – Dakar
 www.objis.com
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
2
Atouts Objis
 Audit technique de vos besoins
 70% de travaux pratiques
 Clé USB avec outils et corrigés TP
 Bilan pédagogique individuel
 Ingénierie de financement
 Veille technologique
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
3
Veille technologique
(cliquez sur les images)
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
4
SOMMAIRE (5j)
• Historique, définition et architecture
• Concept clé N°1 : injection de dépendances
• Concept clé N°2 : Programmation Orientée Aspect
• Accès aux données JDBC
• Intégration Spring / Hibernate
• Gestion des transactions
• Intégration Spring / Struts
• Développement web avec Spring MVC
• Gestion de la sécurité
• Intégration Spring / JMS
• Stratégies de test avec Spring
• Conclusion – ressources – Rappels J2EE
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
5
Etape 1 : Introduction Spring
 Historique
 Définition
 Architecture
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
6
SPRING : Historique
 Rod Johnson (2002)
 Faire avec un simple bean (POJO)
ce qui était seulement possible avec EJBs
 Environnement J2SE et J2EE
 Simplicité
 Testabilité
 Couplage faible. Programmation par interfaces
www.objis.com - Formation
SPRING
7
Mission du Framework Spring
 Nous pensons que:
– J2EE devrait être plus facile à utiliser
– Il est préférable de programmer à travers des interfaces plutôt qu’à
travers des classes.
– La conception OO est plus importante qu’une toute technologie
d’implémentation, comme J2EE.
– Trop d’exceptions à gérer en Java ! Et si un framework nous permettait
de mieux gérer les exceptions ?
– Les tests sont essentiels. Et si un framework nous permettait de tester
facilement notre application.
 Nous souhaitons que:
– Spring soit un plaisir à utiliser
– Votre code applicatif “ne dépende pas” des APIs Spring.
– Spring n’entre pas en compétition avec de bonnes solutions existantes,
mais facilite l’intégration avec ces solutions.. (Par example, Hibernate est
un bon outil de mapping O/R. Pourquoi en créer un autre ?.)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
8
SPRING : définition
 Framework et conteneur léger, à injection de dépendance et
orienté aspect.
– framework : permet configuration et création d'applications
complexes à partir de composants réutilisables
– conteneur : Spring contient et manage cycle de vie des
composants susceptibles d'être injectés
– léger : taille (2,8Mb) + surcharge JVM + non intrusif
– à injection de dépendance : Spring vous injecte les composants
dont vous avez besoin = JNDI Reverse.
– orienté aspect : permet séparation logique métier et services
techniques transversaux (Logs, Sécurité. Transaction..)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
9
Conteneurs Spring
 Plusieurs implémentations de Conteneurs héritant de 2 interfaces
principales
 BeanFactory (org.springframework.beans.factory.BeanFactory)
– Ex : XMLBeanFactory : définition beans dans XML
– Convient si pb de ressources (Ex :tel portable)
 ApplicationContext (org.springframework.context.ApplicationContext)
– Extension de BeanFactory
– Ex : ClassPathApplicationContext,FileSystemXMLApplicationContext
– Messages, I18n, publication d'évènements à des listeners
www.objis.com - Formation
SPRING
10
SPRING : architecture modulaire
 Jusqu'où votre appli. sera orientée SPRING ?
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
11
SPRING : Modules clés
 Core : fonctions essentielles. Utilise fabrique de bean
(conteneur) org.springframework.beans.factory.BeanFactory.
Support de l'injection.
 Application Context : ce qui permet de faire de Spring
un Framework : support internationalisation (i18n), cycle de vie,
validations + services entreprises : acces JNDI, integration EJB,
scheduling + intégration velocity/Freemarker
 AOP : Gère la séparation préocupations transversales
techniques. Possibilité créez vos propres aspects. Intégration
avec AspectJ et basés sur interfaces de l'AOP Alliance
 DAO / JDBC : accès aux données (gestion exceptions).
 ORM : intégration framework ORM (hibernate, iBatis, JPA,
JDO). Rq : avec DAO, permet de donner DAO à plusieurs
frameworks ORM.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
12
SPRING : Modules clés
 JMX : possibilité d'exposer vos beans comme composants JMX
(Java Management Extension). Monitoring des beans.
 JCA : connecteur JEE. Intégration Spring avec mainframes, et
autres système d'information (ERP,CRM, MOM...)
 Spring MVC : Créer applications web Model-Vue-Controlleur
avec Spring.
 Portlets : Une page web = plusieurs portlets
 Remoting : Accéder aux beans à travers le réseau.
Intégration RMI, JAX-RPC, JAX-WS.
 JMS : Intégration Java Messages Services
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
13
SPRING : architecture modulaire
 Exemple modules pour appli Struts/Hibernate
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
14
Etape 2 : Injection de dépendances
 Inversion de controle (IoC) et Injection de dép.
 Sans injection : couplage fort entre objets
 Avec injection : couplage faible
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
15
Inversion de Contrôle (IoC)
 IoC = Votre code partage avec un framework le
flot d'éxécution d'un programme.
 Exemple avec les listeners de SWING
 IoC différent de Injection de dépendances...
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
16
Sans injection
 Pour travailler avec un objet, nous le
crééons (en dur) avec les techniques
suivantes
• New()
• JNDI Lookup
 Cela créée un couplage (statique) fort entre
l'objet demandeur et l'objet apellé.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
17
Exemple de couplage fort
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
18
Problèmes couplage fort
 Pas de 'Saxophone' sans 'Musicien'
 Difficile de tester la Classe Musicien
 Difficile de réutiliser la Classe Musicien
solutions
1)
! Masquer l'implémentation avec Interfaces
2) Injection de code à l'exécution.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
19
Avec injection
 Pour travailler avec un objet possédant un
savoir-faire, nous déclarons une interface
que l'objet doit implémenter.
• Spring injecte dynamiquement un objet
implémentant cette interface. L'objet est
déclaré dans un fichier xml de configuration,
par défaut applicationContext.xml
 Cela créée un couplage faible entre l'objet
demandeur et l'objet apellé. Ils n'ont pas
besoin de se connaître mutuellement.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
20
Exemple de couplage faible
Ici les classes sont
indépendantes.
Couplage faible
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
21
Déclaration Musicien et
Saxophone
REFERENCE : http://static.springframework.org/spring/docs/2.5.x/reference/beans.html
Fichier de configuration de Spring : applicationC
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
22
Lancement de l'Application
1)Chargement
conteneur
2)Récupération bean
3) Utilisation bean
joue Vive le vent... : TOOT TOOT TOOT
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
23
Modification paramétrage...
Le musicien change d'instrument...
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
24
Lancement de l'Application
1)Chargement
conteneur
2)Récupération bean
3) Utilisation bean
joue Vive le vent... : PLINK PLINK PLINK
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
25
Etape 3 : POA
 Limites de la programmation Objet (POO)
 Atouts de la programation Aspect (POA)
 Exemple de mise en oeuvre POA Spring
 Intégration avec @AspectJ
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
26
Constats et limites de la POO
 Phénomène de dispersion : dans le code
d'une classe métier, on retrouve souvent du
code 'technique' : log, sécurité, transaction...
 Ce code technique correspondant à des
'préocupations transversalles' des différentes
couches de l'application.
 Maintenance du code et Réutilisabilité des
composants diminués.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
27
Exemple : appli. gestion d'école
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
28
Valeur ajoutée POA
 La programmation Orientée Aspect (POA)
permet de séparer le code métier et le code
technique correspondant aux préocupations
transversales.
 Un aspect = une préocupation transversale.
 Le tisseur d'aspect de Spring (Spring AOP)
intercepte les méthodes métier et applique
les aspects associés à cette méthode.
 D'autres tisseurs d'aspects (AspectJ,
JbossAOP) interceptent le changement d'état
d'une variable , ainsi qu'un constructeur
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
29
Programmation Orientée Aspect
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
30
Exemple : appli. gestion d'école
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
31
Exemple d'aspect : Spectateurs
 Nous souhaitons que les spectateurs
prennent place systématiquement avant
qu'un musicien joue.
 Nous souhaitons que les spectateurs
applaudissent systématiquement après que
le musicien joue.
 Nous pourrons également demander
d'étteindre les Tél portables avant la
prestation, ou encore de demander
remboursement si prestation de mauvaise
qualité...
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
32
Exemple d'aspect : Spectateur
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
33
Mise en oeuvre aspect
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
34
Pas d'impact sur code Applicatif !
1)Chargement
conteneur
2)Récupération bean
3) Utilisation bean
joue Vive le vent... :
Les spectateurs prennent place
TOOT TOOT TOOT
Les spectateurs applaudissement :BRAVO !
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
35
Vocabulaire POA
 Aspect = service = préocupation transversale
 Point de jonction (JoinPoint),
 Coupe (Pointcut)
 Greffon (Advice)
 Cible (Target) = objet sur lequel appliquer aspect
 Tissage = Application d'un aspect à une cible
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
36
Greffon (advice)
 Greffon = un programme qui sera activé à un
certain point d'exécution du système, précisé
par un point de jonction.
 Exemple : méthode 'applaudit' de l'aspect
Spectateurs
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
37
Types de greffon (advice)
 Before : exécution avant le point de jonction
 After : exécution après le point de jonction
 After-returning : éxécution après...si succès
 After-throwing : éxécution après...si échec
 Around : éxécution autour du point de jonction
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
38
Point de jonction (Joinpoint)
 Point de jonction = Endroit spécifique dans le
flot d'exécution du système, où il est valide
d'insérer un greffon.
 Il n'est pas possible d'insérer un greffon au
milieu du code d'une fonction.
 Par contre on pourra le faire avant, autour de,
à la place ou après l'appel de la fonction.
•Exemple : Le public applaudit APRES que
chaque instrument soit joué
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
39
Coupe (PointCut)
 Coupe = ensemble de points de jonction
 Exprimé avec notation AspectJ.
 Attribut 'expression' de la balise <aop:pointcut>
<aop:pointcut id="servicePointcut"
expression="execution(* *.jouer(..))">
Quelque soit paramètres
Quelque soit le type de retour de la méthode
Quelque soit classe/package
 La coupe spécifie qu'un greffon d'oit être appliqué à toute
méthode 'jouer', quelque soit son package (*), quelque
soit le nombre d'arguments (..), quelque soit le type de
retour..
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
40
Tissage et cycle de vie applicatif
 Tissage = Application d'un aspect à une cible
 3 types de tissages
 Tissage à la compilation (AspectJ). Nécessite
compilateur spécial.
 Tissage au chargement de l'application
(AspectJ). Nécessite un ClassLoader spécial.
 Tissage à l'exécution (Typique Spring POA). Ici le
conteneur génère dynamiquement Proxy qui
intercepte les appels et met en oeuvre l'aspect.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
41
Lien utiles Tisseurs d'aspects
 AspectJ : http://eclipse.org/aspectj
 Jboss AOP :
http://labs.jboss.com/portal/jbossaop/index.html
 Spring AOP : http://www.springframework.org
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
42
Intégration d'aspect via @Aspect
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
43
Intégration d'aspect via @Aspect
Les spectateurs prennent place
Les spectateurs éteignent tél. portables
joue Vive le vent... : TOOT TOOT TOOT
Les spectateurs applaudissement : BRAVO !
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
44
Aspects AspectJ dans spring
 Le runtime AspectJ créé des aspects aspectJ (ex
: JugeAspect.aj)
 Le conteneur Spring peut manager les aspects
aspectJ, même s'il ne les a pas créé ( attribut
'factory-method' de la balise <bean>).
 L'aspect aspectJ peut avoir besoin de beans
gérés par le conteneur Spring. (ex : JugeAspect
fait une critique via un MoteurDeCritique)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
45
Etape 4 : accès aux données
 Philosophie d'accès aux données
 La gamme d'exceptions
 Accès aux datasources
 Framework JDBC de Spring
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
46
Philosophie d'accès aux données
 Utilisation interface DAO.
 Le développeur a plusieurs choix d'implémentations de
technologies de persistance (JDBC,Hibernate,JPA...)
 Seules les méthodes d'accès sont exposées via
l'interface. L'application est plus modulaire.
 Les services sont facilement testables car non couplés
à une implémentation donnée.
 On peut créer des implémentations 'factices' facilitant
tests unitaires et sans accès réel à la base, donc +
rapide et avec moins de risque d'échec du à la base de
données.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
47
Gestion Exceptions
 Comment gérer exceptions d'accès données ?
 SQLException (Jdbc) trop générique !
 Exceptions Hibernate nombreuses et plus
détaillées mais propres à Hibernate ! Donne
indication sur framework de persistance
utilisé...
 Réponse de Spring : DataAccessException
une gamme d'exceptions détaillées et
indépendantes de votre stratégie
de persistence.
 Spring se charge de lever la bonne exception
quelque soit le framework de persistance utilisé.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
48
Exceptions sans / avec SPRING
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
49
Stratégie Template / Callback
 Spring distingue étapes obligatoires d'accès aux
données (Template, Ex : connection DB) et
étapes facultatives (Callback, Ex : contexte
transactionnel)
 Template = Bean , Callback = Bean
 Inconvénient : vous devez créer le Callback.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
50
Templates disponibles
www.objis.com - Formation
SPRING
51
Injection jdbcTemplate dans DAO
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
52
Injection jdbcTemplate dans DAO
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
53
Stratégie DAO Support
 Chaque template fournit méthodes permettant
l'acces aux données sans avoir à créer
explicitement un Callback
 DAO Support = surcouche de Template
 Vous pouvez créer votre DAO comme héritant
de DAO Support
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
54
Stratégie DAO Support
 Exemple : si votre DAO hérite de
JdbcDaoSupport, vous pourrez obtenir un
template JdbcTemplate à travers la méthode :
getJdbcTemplate();
 Vous pourrez également accéder directement
aux objets de votre framework de persistence.
 Exemple : JdbcDaoSupport fournit la méthode
getConnection() pour récupérer l'objet
Connection de Jdbc.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
55
Exemple DAO Support
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
56
Exemple DAO Support
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
57
Configuration DataSource
 3 options :
– Source de données définies par driver JDBC
– Source de données identifiée par nom JNDI
– Source de données avec pool de connexion
 Conseil : utiliser accès à DataSource JNDI
avec pooling de connexion
– JNDI : infos de connection à DB externes à l'appli
– Pool de connexion : meilleures performances
 JndiObjectFactoryBean : retrouver un objet
d'un annuaire JNDI et le transformer en bean
Spring
58
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
58
JNDI DataSource
Nom JNDI
de la base de données
Fabrique de bean
• Attribut 'resourceref' utile uniquement en environnement J2EE
• Si value='true' , alors le nom JNDI sera préfixé de java:comp/env
Ex : ici, le nom JNDI est java:comp/env/jdbc/RantzDataSource
www.objis.com - Formation
SPRING
59
Namespace jee avec spring 2.0
- Elément <jee:jndi-lookup> permet aussi de retrouver objet via annuaire JNDI
- Déclaration suivante strictement identique à déclaration page précédente
60
www.objis.com - Formation
SPRING
60
Pool de connexion
 Spring ne fournit pas de pool de connexion
 Conseil : utiliser Apache DBCP
 http://jakarta.apache.org/commons/dbcp
 DBCP fournit plusieurs DataSources, le
plus simple à configurer étant BasicDataSource
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
61
DataSources avec Driver JDBC
 org.springframework.jdbc.datasource.DriverManagerDataSource :
retourne nouvelle connection à chaque appel
 org.springframework.jdbc.datasource.SingleConnectionDataSource
retourne même connection à chaque appel.
 Leurs configuration est identique qu'avec
DataSource DBCP sauf qu'il n'y a pas de
paramètres de config lié au pool
 Ces dataSources sont à éviter en production ! Préférer
dataSource avec pool de connexion (Ex :
BasicDataSource DBCP)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
62
Bonne pratique configuration
DataSource
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
63
Etape 5 : Intégration Spring / Hibernate
 Atouts d'hibernate et de Spring
 HibernateDaoTemplate
 HibernateDaoSupport
 Code non intrusif
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
64
Intégration Spring / Hibernate
 Solution 1 : Créez votre DAO en injectant un
template HibernateTemplate fourni par Spring.
 Solution 2 : Créez votre DAO comme héritant de
HibernateDaoSupport , superClasse fournie par
Spring
 Solution 3 : Créez un DAO non intrusif par
injection d'une SessionFactory
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
65
DAO par injection HibernateTemplate
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
66
DAO par héritage
de HibernateDaoSupport
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
67
DA0 'non intrusif'
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
68
Déclaration du DAO
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
69
Annotation @Repository (pour DAO)
 Permet de se dispenser de configuration DAO dans XML
 Avantage : translation d'exceptions
 Necessite configuration complémentaire
•Autowiring byName
•<component-scan base-package='com.jdbc.dao'>
 Hérite de @Component
 Equivalence JSR 250 : @Resource
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
70
A étudier : PetClinic
 Fournie avec SPRING 2.5, Petclinic est une version de
l'application petstore avec Spring, et plusieurs solutions de
mapping O/R.
 Bonnes pratiques integration Spring Jdbc, Hibernate, JPA
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
71
Etape 6 : Transactions
 Concept de transaction
 Gestionaires de transaction SPRING
 Les 5 propriétés d'une transaction
 Transaction programmative
 Transaction déclarative
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
72
Concept de transaction
 Ensemble d'opération qui réussissent tous (commit)
ou échouent toutes (Rollback)
 Exemple : retrait d'argent dans distributeur.
•1) les billets sortent
•2) compte débité
 Propriétés ACID (Atomique, Cohérente, Isolée, Durable)
 Transactions importantes dans applications entreprises !
 Transaction avec 1 base / Transactions distribuées
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
73
Gestionnaires de Transactions
 Avec Spring,comme avec serveur d'application
J2EE (Conteneur EJB), il est possible de gérer les
transactions de façon programmative ou
déclarative
 Spring propose différents gestionnaires de
transactions (TransactionManagers) adaptés à
différentes cibles
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
74
Configuration TransactionManager
JDBC <bean id="transactionManager“
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource"><ref local="dataSource"/></property>
</bean>
JTA <bean id="transactionManager“
class="org.springframework.transaction.jta.JtaTransactionManager"/>
Hibernate <bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
Lien : http://static.springframework.org/spring/docs/2.5.x/reference/transaction.html
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
75
Les 5 propriétés d'une transaction
Optimisation si requête
lecture en base de données
Bonne pratique : read-only = true
pour méthodeq 'get'
Quelles Exceptions (Métier/Runtime)
lancent un Rollback ?
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
76
Propagation de transaction
 PROPAGATION_SUPPORTS : la méthoe courante
n'a pas besoin d'êre exécutée dans une transaction,
mais s'il y en a une, elle peut y participer.
 PROPAGATION_REQUIRED : la méthode courante
doit obligatoirement être exécuté dans une
transaction. Elle peut participer à une transaction
déja existante.
 PROPAGATION_REQUIRES_NEW : création explicite
d'une nouvelle transaction.
 PROPAGATION_NEVER : la méthode courante ne
doit pas être exécutée dans une transaction.
 PROPAGATION_NESTED : nouveauté Spring. Utile
en cas de pb sur transaction avec Nombreuses
données dont qqs une avec pb.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
77
Niveaux d'Isolation
 ISOLATION_DEFAULT : utilise le niveau d'isolation
de la base de données de l'application.
 ISOLATION_READ_UNCOMMITED : autorise lecture
sale (dirty read)
 ISOLATION_READ_COMMITED : n'autorise pas
lecture sale.
 ISOLATION_REPEATABLE_READ : n'autorise ni
lecture sale, ni lecture répétable
 ISOLATION_SERIALIZABLE : n'autorise ni lecture
sale, ni lecture répétable, ni lecture fantome
•Niveau le plus fort, mais pb de PERFORMANCE !
•Oracle, postgres.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
78
Valeurs par défaut
 Propagation : PROPAGATION_REQUIRED
 Isolation : ISOLATION_DEFAULT
 Read-only : false
 Timeout : none
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
79
Transaction programmative
 Hibernate fournit objet TransactionTemplate
 Quelle implémentation de PlatformTransactionManager ?
 Objet TransactionDefinition
 Objet TransactionStatus
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
80
Transaction programmative
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
81
Transaction déclarative
 Mise en oeuvre proxy (POA)
 Choix Métadonnées : XML
 Choix Métadonnées : @Transactional
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
82
Intercepteur : proxy AOP
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
83
Configuration XML : namespace tx
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
84
Configuration XML : interception AOP
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
85
Déclaration attribut de
Transaction(XML)
<!-- Transactional proxy for the JPetStore primary business object -->
<bean id="petStore"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref local="petStoreTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
86
@Transactional
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
87
Etape 7 : Intégration Struts / Spring
 Valeur ajoutée et limite de Struts
 Ce qu'apporte Spring à Struts
 Stratégie d'intégration : délégation de Proxy
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
88
Atouts Struts / Spring
 Struts apporte une couche MVC simple et bien
connue des développeurs…
 …mais struts ne gère pas le Modèle !!!
 Spring apporte un accès simple en non intrusif à
une couche métier performante
 Struts + Spring = bon duo !
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
89
Technique : délégation d'actions
 Grace à la technique de ‘délégation d’actions’, il
est possible d’avoir des classes étant à la fois
des actions struts et des beans Spring.
 L’idée est d’utiliser une classe spécifique (
org.springframework.web.struts.DelegatingAction
Proxy ) afin de déléguer à Spring la gestion de
l’action struts.
 Ces ‘nouvelles actions struts’ ont des capacités
bien supérieures aux actions classiques,
réduisant ainsi les faiblesses de Struts.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
90
Mise en oeuvre Struts + Spring
 Dans la pratique, nous continuons à coder actions struts
normalement. La seule différence est que , dans strutsconfig.xml, la classe de l’action est
org.springframework.web.struts.DelegatingActionProxy ,
 <action path=‘/login’ name=‘loginForm’
type=‘org.springframework.web.struts.DelegatingActionProxy ’
parameter=‘method’
validate=‘false’
input=‘/WEB-INF/jsp/login.jsp’>
<forward name=‘success’ path=‘/WEB-INF/jsp/login_success.jsp’>
<forward name=‘failure’ path=‘/WEB-INF/jsp/login_failure.jsp’>
</action>
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
91
Mise en oeuvre Struts + Spring
 Dans le fichier de configuration Spring actionservlet.xml, cette action est
configurée de la façon suivante :
<bean name=‘/login’ class=‘com.objis.demospring.LoginAction’>
<property name=‘userManager’ >
<ref bean=‘userManager’>
</property>
</bean>
 Spring réalise le lien avec l’action struts via le nom du bean, identique au
chemin de l’action Struts ‘/login’
 Ici LoginActrion est à la fois une action Struts complète (qui hérite de
Action, DispatchAction…) et un bean Spring à part entière, bénéficiant
de l’inversion de contrôle
 Ici le service (userMAnager) est injecté à l’action. Ce service apellera le
bean userDAO …
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
92
Mise en oeuvre Struts + Spring
 Dans Les ‘nouvelles actions Struts’ :
• ne lient plus la couche présentation à une
implémentation donnée de la couche métier.
•sont plus facilement testables de manière unitaire du
point de vue de l’accès au service.
•disposent d’un mécanisme d’interception; étant des
beans Spring, nous pouvons utiliser la POA pour
intercepter leurs méthodes. Cela peut permettre d’ajouter
des mécanismes transversaux de sécurité, monitoring,
logs, cache, transaction…
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
93
2 avantages à retenir
 Spring va gérer parfaitement le ‘M’ de MVC, ce que Struts
ne gère pas.
 Bonne pratique : injection d’objets dans l’action Struts (ex :
service comme userMAnager) au lieu de passer par des
new() ou des JNDI Lookup. Le Code plus modulaire avec
meilleure testabilité.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
94
Etape 8 : Spring MVC
 Cinématique requête HTTP
 Dispatcher et Controlleur Spring MVC
 Exemples Mapping et ViewResolver
 Bonnes pratiques
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
95
Architecture & cinématique

www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
96
Dispatcheur

web.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
97
Controleur

www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
98
Config des couches applicatives

web.xml
Voir le TP Dédié
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
99
Exemple handler Mapping :
 Ici les URLs home.htm et login.htm sont gérés par SpringM VC
objisapp-servlet.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
100
Exemple viewResolver
(Vue à afficher)
 Ci-dessous, toutes les vues sont des JSP placées dans
\WEB-INF\jsp
objisapp-servlet.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
101
Méthodologie dév Spring MVC
 Configurez le web.xml et ajoutez librairies Spring MVC
 Créez les fichiers XML de définitions de beans
représentant les différentes couches de l'application
 Définissez vos beans dans les fichiers dans l'ordre
•la couche DAO
•la couche Service
•la couche Controleur.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
102
Etape 9 : Sécurité
 Introduction : les étapes
 Authentification
 Autorisations
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
103
Introduction
 Avec Spring,comme avec serveur d'application
J2EE (Conteneur EJB), il est possible de gérer la
sécurité de façon programmative ou déclarative
 Intercepteurs : Proxy POA si on sécurise des méthodes
ou bien filtres de servlets si on sécurise des ressources
web (JSP,IMG...)
 Authentification & Autorisations (Fichier, DB, LDAP...)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
104
4 étapes (dont 2 facultatives)
 Authentification : Qui êtes vous ?
 Autorisation : êtes vous autorisé ?
 Lancer en tant que (facultatif)
 Après invocation (facultatif) : avez-vous le droit de
profiter des infos renvoyées par resource
sécurisée ?
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
105
Authentification
Login/password dans une
base de données
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
106
Spring Security
 Module Sécurité de Spring anciennement nommé 'Acegi Security'
 http://static.springframework.org/spring-security/site/index.html
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
107
Librairies Spring security
Fichiers supplémentaires
dédiés à la sécurité Spring
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
108
Configuration web.xml :
Filtre de sécurité
web.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
109
Configuration web.xml :
ContextListener
web.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
110
Stratégie de sécurité et utilisateurs
ApplicationContext-security.xml
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
111
Stratégie de sécurité et utilisateurs
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
112
Service 'Remember Me'
 'Se souvenir de moi'
 Solution 1 : infos dans Cookie
 Solution 2 : infos dans Base de données
www.objis.com - Formation
SPRING
Service 'Remember Me'
www.objis.com - Formation
SPRING
Authentification base de données
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
115
Authentification 'prêt à l'emploi'
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
116
Authentification personalisée
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
117
Mots de passe sécurisés
Redefinition daoAuthenticationProvider
Clé d'encryption (ICI la clé change en fonction du username)
Stratégie d'encodage (ici Md5)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
118
@Secured
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
119
Etape 10 : Spring / JMS
 API JMS
 Fournisseur ActiveMQ
 JmsTemplate de Spring
 Envoi/réception de message
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
120
Présentation JMS
 Java Messages Service ( API 1.1 et 1.0.2)
 Envoyer / recevoir des messages
 Messages Synchones / asynchrones
 Queue (point-à-point) / Topics (abonnement)
 Produits : WebSphere MQ (IBM), Active MQ (Apache)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
121
API JMS
 javax.jms.Connection / ConnectionFactory
 javax.jms.Session
 javax.jms.Destination (Queue ou bien Topic ?)
 javax.jms.Message / TextMessage
 javax.jms.MessageProducer (méthode send(Msg))
 javax.jms.MessageConsumer
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
122
Queue / Topic
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
123
Intégration Spring / JMS
 Envoi / réception synchrone : JmsTemplate
 org.springframework.jms.core
 Messages asynchrones : Listeners
 JMS 1.0.2 et JMS 1.1
 Gestion d'exceptions + réduction code
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
124
Active MQ
 Fournisseur JMS de la fondation Apache
 http://activemq.apache.org
 Port d'écoute par défaut : 61616
 Fabrique de Connection
(ActiveMQConnectionFactory)
 Queue / Topics
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
125
Config Active MQ dans Spring
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
126
Envoi message
avec JmsTemplate
Injections
Queue ou Topic ?
Callback MessageCreator
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
127
Configuration JmsTemplate
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
128
Réception Asynchrone
de message
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
129
Réception Asynchrone
de message
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
130
Namespace jms
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
131
Etape 11 : Tests
 IoC et tests unitaires
 Spring et les tests d'intégration
 MockObjects
 TestContext
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
132
Spring et tests unitaires
 Avant Spring 2.5 : support junit 3.8
 Spring 2.5 : support Junit 4 , TestNG
 Avec IoC , tests unitaires facilités
 Avec Spring , test integration facilités
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
133
Spring 3.0
 Java5+
 Support Web Services : REST
• Ainsi que nouvelles @MVC
 Spring Expression Language
• Unified EL ++
 Validation déclarative types Modèle
• Hibernate validator (JSR 303)
 Support Portlets 2.0
• Action / Evevement / Resource
 Support de Java 6
• JSF 2.0, JPA 2.0,...
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
134
Spring 3.0 :
nouvelle structure de projet
 Build des podules
• Gérés par Maven
• 1 module = 1 jar
• Plus de spring.jar !!!
 Build du projet
• Basé sur Ivy
• Procédure de déploiement
• Gestion des dépendances
• Génération des manifests OSGi
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
135
IoC et tests unitaires
 Avec l'injection de dépendences, le code dépend
moins du conteneur qu'avec serveur J2EE
 Vos POJO peuvent être testés unitairement via
new(), SANS conteneur Spring (contrairement aux
EJB2).
 Test simplifié couche Service en isolant la couche
DAO via Objet DAO factice (sans acces réel à DB)
• www.mockobjects.com
 Spring apporte quelques objets factices
• org.springframework.mock
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
136
Objets factice de Spring
 JNDI : org.springframework.mock.jndi
 Servlets : org.springframework.mock.web
 Portlets : org.springframework.mock.web.portlet
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
137
Support test unitaires dans Spring
 ReflectionTestUtils,
• Package org.springframework.test.util
• Utile pour test unitaires & d'intégration
• Setter un champ non public ou appeler une
méthode privée (Hibernate/JPA)
 AbstractModelAndViewTests (pour Spring MVC)
• Test unitaire d'objet ModelAndView (controlleur)
• Classe ModelAndViewAssert
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
138
Support test intégration
 lib/spring-test.jar
 Package org.springframework.test
 + lent que test unitaire JUnit
 + rapide que test Cactus
 TestContext Framework (java5+)
• Tests d'intégration
• org.springframework.test.context
• AbstractTransactionalJUnit4SpringContextTests
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
139
TestContext : Demo PetClinic
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
140
Pourquoi utiliser Spring?
 Spring est un bon choix dans applications web multicouches.
En particulier les beans de chaque couche peuvent être gérés
et injectés à l'exécution.
 Spring fournit une bone abstraction pour application
Hibernate. Duo Spring/Hibernate gagnant.
 Avec JDBC spring facilite accès aux données.
 Si vous avez une couche 'service' à associer à une vue,
Spring crée de la valeur ajoutée.
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
141
Ressources
 www.springframework.org
 API :http://static.springframework.org/spring/docs/2.5.x/api
 Livres :
•Spring in action (Craig walls. Editions Manning)
•Spring par la pratique (Julien Dubois , Editions Eyrolles)
•J2EE without EJB (Rod Johnson)
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
142
Architecture multicouche
www.objis.com - Formation
SPRING
143
Architecture J2EE
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
144
Livraisons J2EE
www.objis.com - Formation
SPRING
145
Services J2EE
 JNDI : Java Naming Directory Interface
 JCA : Java Connector Architecture
 JTA : Java Transaction API
 JPA : Java Persistence API
 JMS : Java Message Service
 JAAS : Java Authentication & Authorisation Service
 JAX-WS : Java API for XML Web Services
 JAXB : Java API for XML Binding
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
146
Exemple log4j.xml
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
147
Vue 'DashBoard'
SpringSource Tool Suite
2
1
3
4
5
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
148
Interroger la base de connaissances
SpringSource Tool Suite
1
2
3
4
5
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
149
Configurer
SpringSource Tool Suite
1
2
3
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
150
Modularité dynamique (au déploiement)
rendue possible avec OSGi
gui-2-2-2.jar
service-2-0.jar
dao-1-0.jar
gui-1-1-4.jar
service-1-1.jar
gui-1-0-0.jar
LogAspect-1.1.jar
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
151
Déploiement de serveurs SpringSource
dans un nuage Amazon EC2
Amazon
EC2
+
S3
sts
...
www.objis.com
- Formation
SPRING
www.objis.com
- Formation
SPRING
152
Autres Formations Objis
 Architectures SOA
 Développement de services web
 Développement et Conception XML
 Développement Struts
 Développement Hibernate
 Développement .NET
 Intégration continue et méthodes agiles
 Voir catalogue sur www.objis.com
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
153
Contact : Douglas Mbiandou
 Ingénieur INSA Lyon (2000)
 8 ans d'expériences projets SI
 Architecte / Formateur Java
 Directeur technique & Resp. pédagogique Objis
 [email protected]
 Tél : 04 78 29 37 26 / 06 60 46 76 45
www.objis.com
www.objis.com
- Formation
- Formation
SPRING
SPRING
154