Transcript SPRING - Objis
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
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
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 10
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
solutions
Problèmes couplage fort
Pas de 'Saxophone' sans 'Musicien'
Difficile de tester la Classe Musicien
Difficile de réutiliser la Classe Musicien
!
1 ) Masquer l'implémentation avec Interfaces 2 ) Injection de code à l'exécution.
17
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
Ici les classes sont indépendantes.
Couplage faible
Exemple de couplage faible
19
Déclaration Musicien et Saxophone
REFERENCE : http://static.springframework.org/spring/docs/2.5.x/reference/beans.html
Fichier de configuration de Spring :
applicationContext.xml
20
Lancement de l'Application
1)Chargement conteneur 2 )Récupération bean 3) Utilisation bean joue Vive le vent... : TOOT TOOT TOOT 21
Modification paramétrage...
Le musicien change d'instrument...
22
Lancement de l'Application
1)Chargement conteneur 2 )Récupération bean 3) Utilisation bean joue Vive le vent... : PLINK PLINK PLINK 23
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.DelegatingAction
Proxy ) afin de déléguer à Spring la gestion de l ’action struts.
Ces ‘nouvelles actions struts’ ont des capacités bien supérieures aux actions classiques, réduisant ainsi les faiblesses de Struts.
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 ,
path= ‘/login’ name= ‘loginForm’ type= ‘org.springframework.web.struts. DelegatingActionProxy parameter= ‘method’ validate= ‘false’ ’ input= ‘/WEB-INF/jsp/login.jsp’>
Mise en oeuvre Struts + Spring
Dans le fichier de configuration Spring actionservlet.xml, cette action est configurée de la façon suivante : name= ‘/login’
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 code 35
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
Queue ou Topic ?
Envoi message avec JmsTemplate
Injections Callback MessageCreator 40
2 1
Réception Synchrone de message
3 41
Réception Asynchrone de message
42
Réception Asynchrone de message
43
Namespace jms
44
Convertion de type : interface Converter
45
ANNEXES
Ressources Architecture JEE Architecture en couche API JEE 46
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 Binding 51