Formation Spring
-
Upload
alice-goff -
Category
Documents
-
view
21 -
download
0
description
Transcript of Formation Spring
Formation Spring
www.objis.com - Formation SPRING 1
www.objis.com - Formation SPRING
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 - Formation SPRING 2
www.objis.com - Formation SPRING
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
3www.objis.com - Formation SPRING
www.objis.com - Formation SPRING
Veille technologique
4www.objis.com - Formation SPRING
(cliquez sur les images)
www.objis.com - Formation SPRING
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 - Formation SPRING 5
www.objis.com - Formation SPRING
Etape 1 : Introduction Spring
Historique
Définition
Architecture
www.objis.com - Formation SPRING 6
www.objis.com - Formation SPRING
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
7
www.objis.com - Formation SPRING
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 - Formation SPRING 8
www.objis.com - Formation SPRING
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 - Formation SPRING 9
www.objis.com - Formation SPRING
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
10
www.objis.com - Formation SPRING
SPRING : architecture modulaire
Jusqu'où votre appli. sera orientée SPRING ?
www.objis.com - Formation SPRING 11
www.objis.com - Formation SPRING
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.
12www.objis.com - Formation SPRING
www.objis.com - Formation SPRING
13
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 - Formation SPRING
www.objis.com - Formation SPRING
SPRING : architecture modulaire
Exemple modules pour appli Struts/Hibernate
www.objis.com - Formation SPRING 14
www.objis.com - Formation SPRING
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 - Formation SPRING 15
www.objis.com - Formation SPRING
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 - Formation SPRING 16
www.objis.com - Formation SPRING
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 - Formation SPRING 17
www.objis.com - Formation SPRING
Exemple de couplage fort
www.objis.com - Formation SPRING 18
www.objis.com - Formation SPRING
Problèmes couplage fort
Pas de 'Saxophone' sans 'Musicien'
Difficile de tester la Classe Musicien
Difficile de réutiliser la Classe Musicien
www.objis.com - Formation SPRING 19
solutions1) Masquer l'implémentation avec Interfaces !2) Injection de code à l'exécution.
www.objis.com - Formation SPRING
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 - Formation SPRING 20
www.objis.com - Formation SPRING
Exemple de couplage faible
www.objis.com - Formation SPRING 21
Ici les classes sont indépendantes.
Couplage faible
www.objis.com - Formation SPRING
Déclaration Musicien et Saxophone
www.objis.com - Formation SPRING 22
Fichier de configuration de Spring : applicationContext.xml
REFERENCE : http://static.springframework.org/spring/docs/2.5.x/reference/beans.html
www.objis.com - Formation SPRING
Lancement de l'Application
www.objis.com - Formation SPRING 23
joue Vive le vent... : TOOT TOOT TOOTjoue Vive le vent... : TOOT TOOT TOOT
1)Chargement conteneur
3) Utilisation bean
2)Récupération bean
www.objis.com - Formation SPRING
Modification paramétrage...
www.objis.com - Formation SPRING 24
Le musicien change d'instrument...
www.objis.com - Formation SPRING
Lancement de l'Application
www.objis.com - Formation SPRING 25
joue Vive le vent... : PLINK PLINK PLINKjoue Vive le vent... : PLINK PLINK PLINK
1)Chargement conteneur
3) Utilisation bean
2)Récupération bean
www.objis.com - Formation SPRING
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 - Formation SPRING 26
www.objis.com - Formation SPRING
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 - Formation SPRING 27
www.objis.com - Formation SPRING
Exemple : appli. gestion d'école
www.objis.com - Formation SPRING 28
www.objis.com - Formation SPRING
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 - Formation SPRING 29
www.objis.com - Formation SPRING
Programmation Orientée Aspect
www.objis.com - Formation SPRING 30
www.objis.com - Formation SPRING
Exemple : appli. gestion d'école
www.objis.com - Formation SPRING 31
www.objis.com - Formation SPRING
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 - Formation SPRING 32
www.objis.com - Formation SPRING
Exemple d'aspect : Spectateur
www.objis.com - Formation SPRING 33
www.objis.com - Formation SPRING
Mise en oeuvre aspect
www.objis.com - Formation SPRING 34
www.objis.com - Formation SPRING
Pas d'impact sur code Applicatif !
www.objis.com - Formation SPRING 35
joue Vive le vent... : Les spectateurs prennent placeTOOT TOOT TOOTLes spectateurs applaudissement :BRAVO !
joue Vive le vent... : Les spectateurs prennent placeTOOT TOOT TOOTLes spectateurs applaudissement :BRAVO !
1)Chargement conteneur
3) Utilisation bean
2)Récupération bean
www.objis.com - Formation SPRING
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 - Formation SPRING 36
www.objis.com - Formation SPRING
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 - Formation SPRING 37
www.objis.com - Formation SPRING
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 - Formation SPRING 38
www.objis.com - Formation SPRING
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 - Formation SPRING 39
www.objis.com - Formation SPRING
Coupe (PointCut)
Coupe = ensemble de points de jonction
Exprimé avec notation AspectJ.
Attribut 'expression' de la balise <aop:pointcut>
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 - Formation SPRING 40
<aop:pointcut id="servicePointcut"
expression="execution(* *.jouer(..))">
Quelque soit classe/packageQuelque soit classe/package
Quelque soit le type de retour de la méthodeQuelque soit le type de retour de la méthode
Quelque soit paramètresQuelque soit paramètres
www.objis.com - Formation SPRING
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 - Formation SPRING 41
www.objis.com - Formation SPRING
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 - Formation SPRING 42
www.objis.com - Formation SPRING
Intégration d'aspect via @Aspect
www.objis.com - Formation SPRING 43
www.objis.com - Formation SPRING
Intégration d'aspect via @Aspect
www.objis.com - Formation SPRING 44
Les spectateurs prennent placeLes spectateurs éteignent tél. portablesjoue Vive le vent... : TOOT TOOT TOOTLes spectateurs applaudissement : BRAVO !
Les spectateurs prennent placeLes spectateurs éteignent tél. portablesjoue Vive le vent... : TOOT TOOT TOOTLes spectateurs applaudissement : BRAVO !
www.objis.com - Formation SPRING
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 - Formation SPRING 45
www.objis.com - Formation SPRING
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 - Formation SPRING 46
www.objis.com - Formation SPRING
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 - Formation SPRING 47
www.objis.com - Formation SPRING
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 : DataAccessExceptionune gamme d'exceptions détaillées etindé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 - Formation SPRING 48
www.objis.com - Formation SPRING
Exceptions sans / avec SPRING
www.objis.com - Formation SPRING 49
www.objis.com - Formation SPRING
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 - Formation SPRING 50
www.objis.com - Formation SPRING
Templates disponibles
51
www.objis.com - Formation SPRING
Injection jdbcTemplate dans DAO
www.objis.com - Formation SPRING 52
www.objis.com - Formation SPRING
Injection jdbcTemplate dans DAO
www.objis.com - Formation SPRING 53
www.objis.com - Formation SPRING
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 - Formation SPRING 54
www.objis.com - Formation SPRING
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 - Formation SPRING 55
www.objis.com - Formation SPRING
Exemple DAO Support
www.objis.com - Formation SPRING 56
www.objis.com - Formation SPRING
Exemple DAO Support
www.objis.com - Formation SPRING 57
www.objis.com - Formation SPRING
58
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
www.objis.com - Formation SPRING 58
www.objis.com - Formation SPRING
59
JNDI DataSource
• Attribut 'resourceref' utile uniquement en environnement J2EE • Si value='true' , alors le nom JNDI sera préfixé de java:comp/envEx : ici, le nom JNDI est java:comp/env/jdbc/RantzDataSource
• Attribut 'resourceref' utile uniquement en environnement J2EE • Si value='true' , alors le nom JNDI sera préfixé de java:comp/envEx : ici, le nom JNDI est java:comp/env/jdbc/RantzDataSource
Nom JNDIde la base de données
Nom JNDIde la base de données Fabrique de bean
www.objis.com - Formation SPRING
60
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
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 - Formation SPRING 61
www.objis.com - Formation SPRING
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'avecDataSource 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 - Formation SPRING 62
www.objis.com - Formation SPRING
Bonne pratique configuration DataSource
www.objis.com - Formation SPRING 63
www.objis.com - Formation SPRING
Etape 5 : Intégration Spring / Hibernate
Atouts d'hibernate et de Spring
HibernateDaoTemplate
HibernateDaoSupport
Code non intrusif
www.objis.com - Formation SPRING 64
www.objis.com - Formation SPRING
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 - Formation SPRING 65
www.objis.com - Formation SPRING
DAO par injection HibernateTemplate
www.objis.com - Formation SPRING 66
www.objis.com - Formation SPRING
DAO par héritage de HibernateDaoSupport
www.objis.com - Formation SPRING 67
www.objis.com - Formation SPRING
DA0 'non intrusif'
www.objis.com - Formation SPRING 68
www.objis.com - Formation SPRING
Déclaration du DAO
www.objis.com - Formation SPRING 69
www.objis.com - Formation SPRING
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 - Formation SPRING 70
www.objis.com - Formation SPRING
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 - Formation SPRING 71
www.objis.com - Formation SPRING
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 - Formation SPRING 72
www.objis.com - Formation SPRING
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 - Formation SPRING 73
www.objis.com - Formation SPRING
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 - Formation SPRING 74
www.objis.com - Formation SPRING
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 - Formation SPRING 75
www.objis.com - Formation SPRING
Les 5 propriétés d'une transaction
www.objis.com - Formation SPRING 76
Optimisation si requête lecture en base de données
Bonne pratique : read-only = truepour méthodeq 'get'
Optimisation si requête lecture en base de données
Bonne pratique : read-only = truepour méthodeq 'get'
Quelles Exceptions (Métier/Runtime) lancent un Rollback ?
Quelles Exceptions (Métier/Runtime) lancent un Rollback ?
www.objis.com - Formation SPRING
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 - Formation SPRING 77
www.objis.com - Formation SPRING
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 - Formation SPRING 78
www.objis.com - Formation SPRING
Valeurs par défaut
Propagation : PROPAGATION_REQUIRED
Isolation : ISOLATION_DEFAULT
Read-only : false
Timeout : none
www.objis.com - Formation SPRING 79
www.objis.com - Formation SPRING
Transaction programmative
Hibernate fournit objet TransactionTemplate
Quelle implémentation de PlatformTransactionManager ?
Objet TransactionDefinition
Objet TransactionStatus
www.objis.com - Formation SPRING 80
www.objis.com - Formation SPRING
Transaction programmative
www.objis.com - Formation SPRING 81
www.objis.com - Formation SPRING
Transaction déclarative
Mise en oeuvre proxy (POA)
Choix Métadonnées : XML
Choix Métadonnées : @Transactional
www.objis.com - Formation SPRING 82
www.objis.com - Formation SPRING
Intercepteur : proxy AOP
www.objis.com - Formation SPRING 83
www.objis.com - Formation SPRING
Configuration XML : namespace tx
www.objis.com - Formation SPRING 84
www.objis.com - Formation SPRING
Configuration XML : interception AOP
www.objis.com - Formation SPRING 85
www.objis.com - Formation SPRING
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 - Formation SPRING 86
www.objis.com - Formation SPRING
@Transactional
www.objis.com - Formation SPRING 87
www.objis.com - Formation SPRING
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 - Formation SPRING 88
www.objis.com - Formation SPRING
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 - Formation SPRING 89
www.objis.com - Formation SPRING
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.DelegatingActionProxy ) 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 - Formation SPRING 90
www.objis.com - Formation SPRING
Mise en oeuvre Struts + Spring
Dans la pratique, nous continuons à coder actions struts normalement. La seule différence est que , dans struts-config.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 - Formation SPRING 91
www.objis.com - Formation SPRING
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 - Formation SPRING 92
www.objis.com - Formation SPRING
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 - Formation SPRING 93
www.objis.com - Formation SPRING
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 - Formation SPRING 94
www.objis.com - Formation SPRING
Etape 8 : Spring MVC
Cinématique requête HTTP
Dispatcher et Controlleur Spring MVC
Exemples Mapping et ViewResolver
Bonnes pratiques
www.objis.com - Formation SPRING 95
www.objis.com - Formation SPRING
Architecture & cinématique
www.objis.com - Formation SPRING 96
www.objis.com - Formation SPRING
Dispatcheur
www.objis.com - Formation SPRING 97
web.xmlweb.xml
www.objis.com - Formation SPRING
Controleur
www.objis.com - Formation SPRING 98
www.objis.com - Formation SPRING
Config des couches applicatives
www.objis.com - Formation SPRING 99
Voir le TP Dédié
web.xmlweb.xml
www.objis.com - Formation SPRING
Exemple handler Mapping :
Ici les URLs home.htm et login.htm sont gérés par SpringM VC
www.objis.com - Formation SPRING 100
objisapp-servlet.xmlobjisapp-servlet.xml
www.objis.com - Formation SPRING
Exemple viewResolver (Vue à afficher)
Ci-dessous, toutes les vues sont des JSP placées dans \WEB-INF\jsp
www.objis.com - Formation SPRING 101
objisapp-servlet.xmlobjisapp-servlet.xml
www.objis.com - Formation SPRING
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 - Formation SPRING 102
www.objis.com - Formation SPRING
Etape 9 : Sécurité
Introduction : les étapes
Authentification
Autorisations
www.objis.com - Formation SPRING 103
www.objis.com - Formation SPRING
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 - Formation SPRING 104
www.objis.com - Formation SPRING
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 - Formation SPRING 105
www.objis.com - Formation SPRING
Authentification
www.objis.com - Formation SPRING 106
Login/password dans une base de données
Login/password dans une base de données
www.objis.com - Formation SPRING
Spring Security
Module Sécurité de Spring anciennement nommé 'Acegi Security'
http://static.springframework.org/spring-security/site/index.html
www.objis.com - Formation SPRING 107
www.objis.com - Formation SPRING
Librairies Spring security
www.objis.com - Formation SPRING 108
Fichiers supplémentaires
dédiés à la sécurité Spring
Fichiers supplémentaires
dédiés à la sécurité Spring
www.objis.com - Formation SPRING
Configuration web.xml : Filtre de sécurité
www.objis.com - Formation SPRING 109
web.xmlweb.xml
www.objis.com - Formation SPRING
Configuration web.xml : ContextListener
www.objis.com - Formation SPRING 110
web.xmlweb.xml
www.objis.com - Formation SPRING
Stratégie de sécurité et utilisateurs
www.objis.com - Formation SPRING 111
ApplicationContext-security.xmlApplicationContext-security.xml
www.objis.com - Formation SPRING
Stratégie de sécurité et utilisateurs
www.objis.com - Formation SPRING 112
www.objis.com - Formation SPRING
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 - Formation SPRING 115
www.objis.com - Formation SPRING
Authentification 'prêt à l'emploi'
www.objis.com - Formation SPRING 116
www.objis.com - Formation SPRING
Authentification personalisée
www.objis.com - Formation SPRING 117
www.objis.com - Formation SPRING
Mots de passe sécurisés
www.objis.com - Formation SPRING 118
Redefinition daoAuthenticationProvider
Stratégie d'encodage (ici Md5)
Clé d'encryption (ICI la clé change en fonction du username)
www.objis.com - Formation SPRING
@Secured
www.objis.com - Formation SPRING 119
www.objis.com - Formation SPRING
Etape 10 : Spring / JMS
API JMS
Fournisseur ActiveMQ
JmsTemplate de Spring
Envoi/réception de message
www.objis.com - Formation SPRING 120
www.objis.com - Formation SPRING
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 - Formation SPRING 121
www.objis.com - Formation SPRING
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 - Formation SPRING 122
www.objis.com - Formation SPRING
Queue / Topic
www.objis.com - Formation SPRING 123
www.objis.com - Formation SPRING
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 - Formation SPRING 124
www.objis.com - Formation SPRING
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 - Formation SPRING 125
www.objis.com - Formation SPRING
Config Active MQ dans Spring
www.objis.com - Formation SPRING 126
www.objis.com - Formation SPRING
Envoi message avec JmsTemplate
www.objis.com - Formation SPRING 127
InjectionsInjections
Callback MessageCreatorCallback MessageCreator
Queue ou Topic ?
www.objis.com - Formation SPRING
Configuration JmsTemplate
www.objis.com - Formation SPRING 128
www.objis.com - Formation SPRING
Réception Asynchrone de message
www.objis.com - Formation SPRING 129
www.objis.com - Formation SPRING
Réception Asynchrone de message
www.objis.com - Formation SPRING 130
www.objis.com - Formation SPRING
Namespace jms
www.objis.com - Formation SPRING 131
www.objis.com - Formation SPRING
Etape 11 : Tests
IoC et tests unitaires
Spring et les tests d'intégration
MockObjects
TestContext
www.objis.com - Formation SPRING 132
www.objis.com - Formation SPRING
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 - Formation SPRING 133
www.objis.com - Formation SPRING
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 - Formation SPRING 134
www.objis.com - Formation SPRING
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 - Formation SPRING 135
www.objis.com - Formation SPRING
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 - Formation SPRING 136
www.objis.com - Formation SPRING
Objets factice de Spring
JNDI : org.springframework.mock.jndi
Servlets : org.springframework.mock.web
Portlets : org.springframework.mock.web.portlet
www.objis.com - Formation SPRING 137
www.objis.com - Formation SPRING
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 - Formation SPRING 138
www.objis.com - Formation SPRING
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 - Formation SPRING 139
www.objis.com - Formation SPRING
TestContext : Demo PetClinic
www.objis.com - Formation SPRING 140
www.objis.com - Formation SPRING
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 - Formation SPRING 141
www.objis.com - Formation SPRING
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 - Formation SPRING 142
www.objis.com - Formation SPRING
Architecture multicouche
143
www.objis.com - Formation SPRING
Architecture J2EE
144www.objis.com - Formation SPRING
www.objis.com - Formation SPRING
Livraisons J2EE
145
www.objis.com - Formation SPRING
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 Binding146www.objis.com - Formation SPRING
www.objis.com - Formation SPRING
Exemple log4j.xml
147www.objis.com - Formation SPRING
www.objis.com - Formation SPRING
Vue 'DashBoard' SpringSource Tool Suite
148www.objis.com - Formation SPRING
4
21
3
5
www.objis.com - Formation SPRING
Interroger la base de connaissances SpringSource Tool Suite
149www.objis.com - Formation SPRING
4
2
1
3
5
www.objis.com - Formation SPRING
Configurer SpringSource Tool Suite
150www.objis.com - Formation SPRING
2
1
3
www.objis.com - Formation SPRING
Modularité dynamique (au déploiement)rendue possible avec OSGi
151www.objis.com - Formation SPRING
service-2-0.jar
gui-2-2-2.jar
service-1-1.jar
dao-1-0.jar
LogAspect-1.1.jar
gui-1-1-4.jar
gui-1-0-0.jar
www.objis.com - Formation SPRING
Déploiement de serveurs SpringSourcedans un nuage Amazon EC2
152www.objis.com - Formation SPRING
...
Amazon EC2+
S3
sts
www.objis.com - Formation SPRING
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 - Formation SPRING 153
www.objis.com - Formation SPRING
Contact : Douglas Mbiandou
Ingénieur INSA Lyon (2000)
8 ans d'expériences projets SI
Architecte / Formateur Java
Directeur technique & Resp. pédagogique Objis
Tél : 04 78 29 37 26 / 06 60 46 76 45
www.objis.com - Formation SPRING 154