Formation Spring Spécifique

51
Formation Spring Spécifique 1

description

Formation Spring Spécifique. 1. SOMMAIRE ‏. Historique, définition et architecture (p3) Concept clé N°1 : injection de dépendances (p13) DEV : Intégration Spring / JMS (p31) DEV : Intégration Spring / Struts (p24) Conclusion – ressources – Rappels J2EE (p46). 2. - PowerPoint PPT Presentation

Transcript of Formation Spring Spécifique

Formation SpringSpécifique

1

SOMMAIRE

• Historique, définition et architecture (p3) • Concept clé N°1 : injection de dépendances (p13)• DEV : Intégration Spring / JMS (p31)• DEV : Intégration Spring / Struts (p24) • Conclusion – ressources – Rappels J2EE (p46)

2

Etape 1 : Introduction Spring

Historique

Définition

Architecture

3

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

4

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 ?.)

5

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..)

6

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

7

SPRING : architecture modulaire

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

8

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.

9

10

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

SPRING : architecture modulaire

Exemple modules pour appli Struts/Hibernate

11

SPRING : architecture modulaire

Exemple modules pour appli Struts/JMS

12

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

13

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...

14

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é.

15

Exemple de couplage fort

16

Problèmes couplage fort

Pas de 'Saxophone' sans 'Musicien'

Difficile de tester la Classe Musicien

Difficile de réutiliser la Classe Musicien

17

solutions1) Masquer l'implémentation avec Interfaces !2) Injection de code à l'exécution.

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.

18

Exemple de couplage faible

19

Ici les classes sont indépendantes.

Couplage faible

Déclaration Musicien et Saxophone

20

Fichier de configuration de Spring : applicationContext.xml

REFERENCE : http://static.springframework.org/spring/docs/2.5.x/reference/beans.html

Lancement de l'Application

21

joue Vive le vent... : TOOT TOOT TOOTjoue Vive le vent... : TOOT TOOT TOOT

1)Chargement conteneur

3) Utilisation bean

2)Récupération bean

Modification paramétrage...

22

Le musicien change d'instrument...

Lancement de l'Application

23

joue Vive le vent... : PLINK PLINK PLINKjoue Vive le vent... : PLINK PLINK PLINK

1)Chargement conteneur

3) Utilisation bean

2)Récupération bean

Intégration Struts / Spring

Valeur ajoutée et limite de Struts

Ce qu'apporte Spring à Stuts

Stratégie d'intégration : délégation de Proxy

24

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 !

25

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.

26

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>

27

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 …

28

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…

29

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é.

30

Intégration Spring / JMS

API JMS

Fournisseur ActiveMQ

JmsTemplate de Spring

Envoi/réception de message

31

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)

32

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

33

Queue / Topic

34

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 code35

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

36

Config Active MQ dans Spring

37

Configuration JmsTemplate

38

JmsTemplate : gestion Exceptions

39

Envoi message avec JmsTemplate

40

InjectionsInjections

Callback MessageCreatorCallback MessageCreator

Queue ou Topic ?

Réception Synchrone de message

41

1

2

3

Réception Asynchrone de message

42

Réception Asynchrone de message

43

Namespace jms

44

Convertion de type : interface Converter

45

ANNEXES

46

Ressources

Architecture JEE

Architecture en couche

API JEE

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)

47

Architecture multicouche

48

Architecture J2EE

49

Livraisons J2EE

50

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 Binding51