Formation Spring

154
Formation Spring www.objis.com - Formation SPRING 1

description

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 - Formation SPRING. 2. Atouts Objis. - PowerPoint PPT Presentation

Transcript of Formation Spring

Page 1: Formation Spring

Formation Spring

www.objis.com - Formation SPRING 1

Page 2: Formation Spring

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

Page 3: Formation Spring

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

Page 4: Formation Spring

www.objis.com - Formation SPRING

Veille technologique

4www.objis.com - Formation SPRING

(cliquez sur les images)

Page 5: Formation Spring

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

Page 6: Formation Spring

www.objis.com - Formation SPRING

Etape 1 : Introduction Spring

Historique

Définition

Architecture

www.objis.com - Formation SPRING 6

Page 7: Formation Spring

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

Page 8: Formation Spring

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

Page 9: Formation Spring

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

Page 10: Formation Spring

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

Page 11: Formation Spring

www.objis.com - Formation SPRING

SPRING : architecture modulaire

Jusqu'où votre appli. sera orientée SPRING ?

www.objis.com - Formation SPRING 11

Page 12: Formation Spring

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

Page 13: 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

Page 14: Formation Spring

www.objis.com - Formation SPRING

SPRING : architecture modulaire

Exemple modules pour appli Struts/Hibernate

www.objis.com - Formation SPRING 14

Page 15: Formation Spring

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

Page 16: Formation Spring

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

Page 17: Formation Spring

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

Page 18: Formation Spring

www.objis.com - Formation SPRING

Exemple de couplage fort

www.objis.com - Formation SPRING 18

Page 19: Formation Spring

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.

Page 20: Formation Spring

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

Page 21: Formation Spring

www.objis.com - Formation SPRING

Exemple de couplage faible

www.objis.com - Formation SPRING 21

Ici les classes sont indépendantes.

Couplage faible

Page 22: Formation Spring

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

Page 23: Formation Spring

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

Page 24: Formation Spring

www.objis.com - Formation SPRING

Modification paramétrage...

www.objis.com - Formation SPRING 24

Le musicien change d'instrument...

Page 25: Formation Spring

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

Page 26: Formation Spring

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

Page 27: Formation Spring

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

Page 28: Formation Spring

www.objis.com - Formation SPRING

Exemple : appli. gestion d'école

www.objis.com - Formation SPRING 28

Page 29: Formation Spring

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

Page 30: Formation Spring

www.objis.com - Formation SPRING

Programmation Orientée Aspect

www.objis.com - Formation SPRING 30

Page 31: Formation Spring

www.objis.com - Formation SPRING

Exemple : appli. gestion d'école

www.objis.com - Formation SPRING 31

Page 32: Formation Spring

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

Page 33: Formation Spring

www.objis.com - Formation SPRING

Exemple d'aspect : Spectateur

www.objis.com - Formation SPRING 33

Page 34: Formation Spring

www.objis.com - Formation SPRING

Mise en oeuvre aspect

www.objis.com - Formation SPRING 34

Page 35: Formation Spring

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

Page 36: Formation Spring

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

Page 37: Formation Spring

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

Page 38: Formation Spring

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

Page 39: Formation Spring

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

Page 40: Formation Spring

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

Page 41: Formation Spring

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

Page 42: Formation Spring

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

Page 43: Formation Spring

www.objis.com - Formation SPRING

Intégration d'aspect via @Aspect

www.objis.com - Formation SPRING 43

Page 44: Formation Spring

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 !

Page 45: Formation Spring

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

Page 46: Formation Spring

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

Page 47: Formation Spring

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

Page 48: Formation Spring

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

Page 49: Formation Spring

www.objis.com - Formation SPRING

Exceptions sans / avec SPRING

www.objis.com - Formation SPRING 49

Page 50: Formation Spring

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

Page 51: Formation Spring

www.objis.com - Formation SPRING

Templates disponibles

51

Page 52: Formation Spring

www.objis.com - Formation SPRING

Injection jdbcTemplate dans DAO

www.objis.com - Formation SPRING 52

Page 53: Formation Spring

www.objis.com - Formation SPRING

Injection jdbcTemplate dans DAO

www.objis.com - Formation SPRING 53

Page 54: Formation Spring

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

Page 55: Formation Spring

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

Page 56: Formation Spring

www.objis.com - Formation SPRING

Exemple DAO Support

www.objis.com - Formation SPRING 56

Page 57: Formation Spring

www.objis.com - Formation SPRING

Exemple DAO Support

www.objis.com - Formation SPRING 57

Page 58: Formation Spring

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

Page 59: Formation Spring

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

Page 60: Formation Spring

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

Page 61: Formation Spring

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

Page 62: Formation Spring

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

Page 63: Formation Spring

www.objis.com - Formation SPRING

Bonne pratique configuration DataSource

www.objis.com - Formation SPRING 63

Page 64: Formation Spring

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

Page 65: Formation Spring

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

Page 66: Formation Spring

www.objis.com - Formation SPRING

DAO par injection HibernateTemplate

www.objis.com - Formation SPRING 66

Page 67: Formation Spring

www.objis.com - Formation SPRING

DAO par héritage de HibernateDaoSupport

www.objis.com - Formation SPRING 67

Page 68: Formation Spring

www.objis.com - Formation SPRING

DA0 'non intrusif'

www.objis.com - Formation SPRING 68

Page 69: Formation Spring

www.objis.com - Formation SPRING

Déclaration du DAO

www.objis.com - Formation SPRING 69

Page 70: Formation Spring

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

Page 71: Formation Spring

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

Page 72: Formation Spring

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

Page 73: Formation Spring

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

Page 74: Formation Spring

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

Page 75: Formation Spring

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

Page 76: Formation Spring

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 ?

Page 77: Formation Spring

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

Page 78: Formation Spring

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

Page 79: Formation Spring

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

Page 80: Formation Spring

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

Page 81: Formation Spring

www.objis.com - Formation SPRING

Transaction programmative

www.objis.com - Formation SPRING 81

Page 82: Formation Spring

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

Page 83: Formation Spring

www.objis.com - Formation SPRING

Intercepteur : proxy AOP

www.objis.com - Formation SPRING 83

Page 84: Formation Spring

www.objis.com - Formation SPRING

Configuration XML : namespace tx

www.objis.com - Formation SPRING 84

Page 85: Formation Spring

www.objis.com - Formation SPRING

Configuration XML : interception AOP

www.objis.com - Formation SPRING 85

Page 86: Formation Spring

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

Page 87: Formation Spring

www.objis.com - Formation SPRING

@Transactional

www.objis.com - Formation SPRING 87

Page 88: Formation Spring

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

Page 89: Formation Spring

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

Page 90: Formation Spring

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

Page 91: Formation Spring

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

Page 92: Formation Spring

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

Page 93: Formation Spring

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

Page 94: Formation Spring

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

Page 95: Formation Spring

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

Page 96: Formation Spring

www.objis.com - Formation SPRING

Architecture & cinématique

www.objis.com - Formation SPRING 96

Page 97: Formation Spring

www.objis.com - Formation SPRING

Dispatcheur

www.objis.com - Formation SPRING 97

web.xmlweb.xml

Page 98: Formation Spring

www.objis.com - Formation SPRING

Controleur

www.objis.com - Formation SPRING 98

Page 99: Formation Spring

www.objis.com - Formation SPRING

Config des couches applicatives

www.objis.com - Formation SPRING 99

Voir le TP Dédié

web.xmlweb.xml

Page 100: Formation Spring

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

Page 101: Formation Spring

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

Page 102: Formation Spring

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

Page 103: Formation Spring

www.objis.com - Formation SPRING

Etape 9 : Sécurité

Introduction : les étapes

Authentification

Autorisations

www.objis.com - Formation SPRING 103

Page 104: Formation Spring

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

Page 105: Formation Spring

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

Page 106: Formation Spring

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

Page 107: Formation Spring

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

Page 108: Formation Spring

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

Page 109: Formation Spring

www.objis.com - Formation SPRING

Configuration web.xml : Filtre de sécurité

www.objis.com - Formation SPRING 109

web.xmlweb.xml

Page 110: Formation Spring

www.objis.com - Formation SPRING

Configuration web.xml : ContextListener

www.objis.com - Formation SPRING 110

web.xmlweb.xml

Page 111: Formation Spring

www.objis.com - Formation SPRING

Stratégie de sécurité et utilisateurs

www.objis.com - Formation SPRING 111

ApplicationContext-security.xmlApplicationContext-security.xml

Page 112: Formation Spring

www.objis.com - Formation SPRING

Stratégie de sécurité et utilisateurs

www.objis.com - Formation SPRING 112

Page 113: Formation Spring

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

Page 114: Formation Spring

www.objis.com - Formation SPRING

Service 'Remember Me'

Page 115: Formation Spring

www.objis.com - Formation SPRING

Authentification base de données

www.objis.com - Formation SPRING 115

Page 116: Formation Spring

www.objis.com - Formation SPRING

Authentification 'prêt à l'emploi'

www.objis.com - Formation SPRING 116

Page 117: Formation Spring

www.objis.com - Formation SPRING

Authentification personalisée

www.objis.com - Formation SPRING 117

Page 118: Formation Spring

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)

Page 119: Formation Spring

www.objis.com - Formation SPRING

@Secured

www.objis.com - Formation SPRING 119

Page 120: Formation Spring

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

Page 121: Formation Spring

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

Page 122: Formation Spring

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

Page 123: Formation Spring

www.objis.com - Formation SPRING

Queue / Topic

www.objis.com - Formation SPRING 123

Page 124: Formation Spring

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

Page 125: Formation Spring

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

Page 126: Formation Spring

www.objis.com - Formation SPRING

Config Active MQ dans Spring

www.objis.com - Formation SPRING 126

Page 127: Formation Spring

www.objis.com - Formation SPRING

Envoi message avec JmsTemplate

www.objis.com - Formation SPRING 127

InjectionsInjections

Callback MessageCreatorCallback MessageCreator

Queue ou Topic ?

Page 128: Formation Spring

www.objis.com - Formation SPRING

Configuration JmsTemplate

www.objis.com - Formation SPRING 128

Page 129: Formation Spring

www.objis.com - Formation SPRING

Réception Asynchrone de message

www.objis.com - Formation SPRING 129

Page 130: Formation Spring

www.objis.com - Formation SPRING

Réception Asynchrone de message

www.objis.com - Formation SPRING 130

Page 131: Formation Spring

www.objis.com - Formation SPRING

Namespace jms

www.objis.com - Formation SPRING 131

Page 132: Formation Spring

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

Page 133: Formation Spring

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

Page 134: Formation Spring

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

Page 135: Formation Spring

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

Page 136: Formation Spring

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

Page 137: Formation Spring

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

Page 138: Formation Spring

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

Page 139: Formation Spring

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

Page 140: Formation Spring

www.objis.com - Formation SPRING

TestContext : Demo PetClinic

www.objis.com - Formation SPRING 140

Page 141: Formation Spring

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

Page 142: Formation Spring

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

Page 143: Formation Spring

www.objis.com - Formation SPRING

Architecture multicouche

143

Page 144: Formation Spring

www.objis.com - Formation SPRING

Architecture J2EE

144www.objis.com - Formation SPRING

Page 145: Formation Spring

www.objis.com - Formation SPRING

Livraisons J2EE

145

Page 146: Formation Spring

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

Page 147: Formation Spring

www.objis.com - Formation SPRING

Exemple log4j.xml

147www.objis.com - Formation SPRING

Page 148: Formation Spring

www.objis.com - Formation SPRING

Vue 'DashBoard' SpringSource Tool Suite

148www.objis.com - Formation SPRING

4

21

3

5

Page 149: Formation Spring

www.objis.com - Formation SPRING

Interroger la base de connaissances SpringSource Tool Suite

149www.objis.com - Formation SPRING

4

2

1

3

5

Page 150: Formation Spring

www.objis.com - Formation SPRING

Configurer SpringSource Tool Suite

150www.objis.com - Formation SPRING

2

1

3

Page 151: Formation Spring

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

Page 152: Formation Spring

www.objis.com - Formation SPRING

Déploiement de serveurs SpringSourcedans un nuage Amazon EC2

152www.objis.com - Formation SPRING

...

Amazon EC2+

S3

sts

Page 153: Formation Spring

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

Page 154: Formation Spring

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

[email protected]

Tél : 04 78 29 37 26 / 06 60 46 76 45

www.objis.com - Formation SPRING 154