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