SlideShare une entreprise Scribd logo
Stateful is Beautiful
   Retour aux sources de Java EE
<ego>A propos de... </ego>

Antoine Sabot-Durand
Expert Java EE
16 ans d’expérience
Leader sur Seam Social
Membre de l’EG CDI 1.1
Twitter : @antoine_sd
Hastag : #StatefulIsBeautiful
<pub>A propos de...</pub>

Ippon Technologies
Java EE
Portail
SOA
RIA
e-commerce
Mobilité
De quoi sera-t’il question ?

               Stateless / Stateful & cie
               EJB
               CDI
               JPA
               Pattern Stateful
               des trolls sur Spring
Stateless et Stateful
sont sur un bateau
De quoi parle-t’on ?
  La stack Java EE dispose de 3 approches
  possibles :



StateLess          Stateful Dry       StateFul
StateLess

Aucun état côté serveur
Tout est stocké côté
client
Le client gère la mise à
jour
La même requête
donnera toujours le
même résultat
Stateful Dry
       L’état est stocké côté
       serveur
       Il est «déshydraté» via
       une solution de cache ou
       dans une BDD
       Puis réhydraté à chaque
       requête pour récréer le
       contexte utilisateur
       A la fin de la requête
       l’état en mémoire est
       détruit
Stateful is beautiful
Stateful


Le serveur stocke l’état
de session utilisateur
Cet état est accessible
en mémoire
Le client se contente de
transmettre un id
Stateful dry vs Stateless ?

Sont souvent confondus
L’appli full Stateless ne
créé pas d’état mémoire
temporaire
Le full Stateless est donc
plus rare qu’on ne le
pense
Statefuldry vs Stateful

                                                         data




                                                        Scope HTTP
                                                          Requete
                                                 Contexte
Container EJB/CDI




          Scope HTTP
            Session

Session
Pourquoi le Stateful
 est-il mal aimé ?
Les légendes urbaines
Le Stateful
               Lourd et Compliqué
  c’est...
               Non scalable
               Contre nature car http
               est stateless
               Ringard
               Cancérigène
Historique Java EE
                                                                                                                       Spring 2.5.1
                                                                                                                       supporte les
                                                                                                                           EJB3
                                                                                                                        11/01/2008

                                                            Spring 1.0
                                                           24/03/2004
                                                                              Spring arrive sur
                                                                                Sourceforge
                                                                                                   Spring 2.0      Spring 2.5       Spring 3.0
                                                                                20/02/2003
                                                                                                  03/10/2006     supporte les      19/12/2009
                                                                                                                 annotations
                                                                                                                  17/11/2007
Java Professional           J2EE 1.2     J2EE 1.3        J2EE 1.4           Java SE 5.0     Java EE 5                              Java EE 6
     Edition               12/12/1999   24/09/2001      11/11/2003          30/09/2004     11/05/2006                             10/12/2009
    Mai 1999




     1998           1999       2000     2001     2002     2003       2004     2005        2006      2007        2008       2009       2010       2011
La réalité
Plus de la moitié des développements Java
utilisent Spring
Spring supporte le Stateful à contre coeur et
de manière très partielle
Les problèmes de scalabilité du stateful sont
solutionnables mais pas avec Spring
Donc près de 3/4 des developpeurs Java
jugent le stateful à travers un outil inadapté
au stateful
Spring, le Marteau Doré
« Un outil ou framework, pour lequel une
équipe a acquis un niveau de compétence tel
qu’il sera systématiquement mis en oeuvre
pour toute nouvelle problématique quelque
soit son niveau d’adéquation aux besoins
réels »


« Quand on détient un marteau doré, tous les
problèmes ressemblent à un clou »
Le stateful avec Java EE
Les Acteurs du Stateful


Les scopes servlet et JSF
CDI et ses scopes
EJB 3.X et son @stateful
JPA et le persistence
context
Scopes servlet et JSF
Scope Application
La session
Le Scope view : qui permet de stocker de
l’information le temps d’une vue
Le Scope Flash : qui survit d’une requête à
l’autre
Le scope requête : le scope du Stateful Dry
CDI 1/2
Solution d’injection de dépendance
 couplage faible
 fortement typée
Patterns mis en oeuvre
 Interceptor
 Decorator
 Observer
Scope conversation : je contrôle enfin le cycle
de vie de mon scope
CDI 2/2 Les idées reçues
CDI 1.0 n’est pas exploitable car trop jeune
  Héritage de Seam & Guice
Nécessite de travailler avec les EJB
  Les deux se marient bien mais rien n’est obligé
Ne fonctionne qu’avec Java EE 6
  Tourne sur Tomcat 6
Ne fonctionne qu’avec JSF
  Extension pour JSF, Servlet, Gwt, Wicket
  Tourne aussi sur Java SE en standalone
Pas d’interoperrabilité avec Spring
  Extension CDI-Spring bridge dans les deux sens
LES EJB 1/2
Transactionnels et distribuables
Existent en plusieurs parfum :
 Stateless
 Stateful
Gèrent la planification, le JMS
Disposent d’un conteneur spécifique géré par le
serveur
 Permettant de partager naturellement des services
 entre plusieurs applications
Par défaut sont des Bean CDI
LES EJB 2/2 idées reçues
Lourd et compliqués       @Stateful
                          public class MonEjb {
Pas testables
                              public void MaMethode(){
Ne font que du stateful       }
                                ...


Utilisable que dans des   }

développements Web
Le Persistence context
En provenance de JPA
Gère l’interaction avec la BDD
Le Mapping avec les entités
Le cache de niveau 1 : l’entity manager cache
les entités qu’il manage
Le cache de niveau 2 : JPA cache ses
interactions avec la BDD
Vaut mieux qu’un DAO Stateless
Ces outils sont vos amis
Polyvalents
Facile à prendre en mai
Savent cohabiter avec
votre marteau doré
Permettent de créer des
architectures nouvelles
Arrêtez de tordre
Spring quand Java EE est
plus adapté
Pourquoi le Stateful est
      beautiful ?
Pourquoi a-t’on oublié...
La sérialisation des services ?
 Parce que les bean spring ne sont pas facilement
 serialisables (problèmes avec les proxys d’injection)
 Parce qu’elle n’est utile que dans le cadre d’une
 architecture Stateful
La Passivation des services ?
 Parce qu’elle ne fonctionne que si la serialisation
 est possible
 Parce que le conteneur Spring ne l'intègre pas dans
 son cycle de vie
Mais il n’est pas trop tard
Les EJB et les bean CDI sont vraiment
serialisables
Du coup la passivation est utilisable
 Pour les EJB c’est monnaie courant et facile à
 gérer avec @PrePassivate et @PostActivate
Et peut servir à tranformer le StateFul en
StateDry automatiquement :
 la sérialization devient un stockage lent
 pour les beans non sollicités depuis un temps
 donné
Le Stateful peut être restful
Etre stateful n’empêche pas la résilience :
 Possibilité de récréer une session à partir d’une
 information envoyée par le client.
Ainsi tout une partie de l’application peut
rester restful et une autre peut n’être que
stateful :
 Catalogue, puis tunnel de vente.
Architectures possibles 1/3
Architectures possibles 1/2

Pour ceux qui aiment les
couches
Il est toujours possible
de faire ça
On peut même en
mettre plus qu’avec
Spring
Architectures possibles 3/3


Une architecture
beaucoup plus ramassée
Mise en oeuvre du
pattern Gateway
Permet un
développement rapide
Conclusion :
   Les outils du Stateful
permettent de faire aussi du
Stateless (sans être tordus).

Contenu connexe

En vedette

Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011
Ippon
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Ippon
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
Ippon
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014
Ippon
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec Ippon
Ippon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Ippon
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
Ippon
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
Ippon
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
Ippon
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
Ippon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
Ippon
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfait
Ippon
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
Ippon
 
Judoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentationJudoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentation
Philippe Minart
 
Lego4 Scrum - Scrum Day 2012
Lego4 Scrum - Scrum Day 2012Lego4 Scrum - Scrum Day 2012
Lego4 Scrum - Scrum Day 2012
Pascal Poussard
 
Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014
vberetti
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corp
Geoffray Gruel
 
Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)
Malakocktail
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
Stephan Lagraulet
 

En vedette (20)

Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011Présentation Ippon DGA Liferay Symposium 2011
Présentation Ippon DGA Liferay Symposium 2011
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014Formation Usine Logicielle gratuite par Ippon 2014
Formation Usine Logicielle gratuite par Ippon 2014
 
Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014Formation html5 CSS3 offerte par ippon 2014
Formation html5 CSS3 offerte par ippon 2014
 
Mule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec IpponMule ESB Summit 2010 avec Ippon
Mule ESB Summit 2010 avec Ippon
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Scrum et forfait
Scrum et forfaitScrum et forfait
Scrum et forfait
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Judoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentationJudoclubgrandhornu.be présentation
Judoclubgrandhornu.be présentation
 
Lego4 Scrum - Scrum Day 2012
Lego4 Scrum - Scrum Day 2012Lego4 Scrum - Scrum Day 2012
Lego4 Scrum - Scrum Day 2012
 
Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corp
 
Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
 

Similaire à Stateful is beautiful

Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
Alexis Moussine-Pouchkine
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
Algeria JUG
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
Nathaniel Richand
 
Presentation jsf2
Presentation jsf2Presentation jsf2
Presentation jsf2
Damien GOUYETTE
 
Language java
Language javaLanguage java
Language java
LAMINE KACIMI
 
EJB.pdf
EJB.pdfEJB.pdf
EJB.pdf
ssuser192642
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
Julien Dubois
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
Winslo Nwan
 
Ejb 3
Ejb 3Ejb 3
Ejb 3
daliing
 

Similaire à Stateful is beautiful (10)

Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Presentation jsf2
Presentation jsf2Presentation jsf2
Presentation jsf2
 
Language java
Language javaLanguage java
Language java
 
EJB.pdf
EJB.pdfEJB.pdf
EJB.pdf
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Ejb 3
Ejb 3Ejb 3
Ejb 3
 

Plus de Ippon

Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
Ippon
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Ippon
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Ippon
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra application
Ippon
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
Ippon
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Ippon
 

Plus de Ippon (6)

Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
 
Multi criteria queries on a cassandra application
Multi criteria queries on a cassandra applicationMulti criteria queries on a cassandra application
Multi criteria queries on a cassandra application
 
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
One Web (API?) – Alexandre Bertails - Ippevent 10 juin 2014
 
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delàCassandra Java Driver : vers Cassandra 1.2 et au-delà
Cassandra Java Driver : vers Cassandra 1.2 et au-delà
 

Stateful is beautiful

  • 1. Stateful is Beautiful Retour aux sources de Java EE
  • 2. <ego>A propos de... </ego> Antoine Sabot-Durand Expert Java EE 16 ans d’expérience Leader sur Seam Social Membre de l’EG CDI 1.1 Twitter : @antoine_sd Hastag : #StatefulIsBeautiful
  • 3. <pub>A propos de...</pub> Ippon Technologies Java EE Portail SOA RIA e-commerce Mobilité
  • 4. De quoi sera-t’il question ? Stateless / Stateful & cie EJB CDI JPA Pattern Stateful des trolls sur Spring
  • 6. De quoi parle-t’on ? La stack Java EE dispose de 3 approches possibles : StateLess Stateful Dry StateFul
  • 7. StateLess Aucun état côté serveur Tout est stocké côté client Le client gère la mise à jour La même requête donnera toujours le même résultat
  • 8. Stateful Dry L’état est stocké côté serveur Il est «déshydraté» via une solution de cache ou dans une BDD Puis réhydraté à chaque requête pour récréer le contexte utilisateur A la fin de la requête l’état en mémoire est détruit
  • 10. Stateful Le serveur stocke l’état de session utilisateur Cet état est accessible en mémoire Le client se contente de transmettre un id
  • 11. Stateful dry vs Stateless ? Sont souvent confondus L’appli full Stateless ne créé pas d’état mémoire temporaire Le full Stateless est donc plus rare qu’on ne le pense
  • 12. Statefuldry vs Stateful data Scope HTTP Requete Contexte Container EJB/CDI Scope HTTP Session Session
  • 13. Pourquoi le Stateful est-il mal aimé ?
  • 14. Les légendes urbaines Le Stateful Lourd et Compliqué c’est... Non scalable Contre nature car http est stateless Ringard Cancérigène
  • 15. Historique Java EE Spring 2.5.1 supporte les EJB3 11/01/2008 Spring 1.0 24/03/2004 Spring arrive sur Sourceforge Spring 2.0 Spring 2.5 Spring 3.0 20/02/2003 03/10/2006 supporte les 19/12/2009 annotations 17/11/2007 Java Professional J2EE 1.2 J2EE 1.3 J2EE 1.4 Java SE 5.0 Java EE 5 Java EE 6 Edition 12/12/1999 24/09/2001 11/11/2003 30/09/2004 11/05/2006 10/12/2009 Mai 1999 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
  • 16. La réalité Plus de la moitié des développements Java utilisent Spring Spring supporte le Stateful à contre coeur et de manière très partielle Les problèmes de scalabilité du stateful sont solutionnables mais pas avec Spring Donc près de 3/4 des developpeurs Java jugent le stateful à travers un outil inadapté au stateful
  • 17. Spring, le Marteau Doré « Un outil ou framework, pour lequel une équipe a acquis un niveau de compétence tel qu’il sera systématiquement mis en oeuvre pour toute nouvelle problématique quelque soit son niveau d’adéquation aux besoins réels » « Quand on détient un marteau doré, tous les problèmes ressemblent à un clou »
  • 18. Le stateful avec Java EE
  • 19. Les Acteurs du Stateful Les scopes servlet et JSF CDI et ses scopes EJB 3.X et son @stateful JPA et le persistence context
  • 20. Scopes servlet et JSF Scope Application La session Le Scope view : qui permet de stocker de l’information le temps d’une vue Le Scope Flash : qui survit d’une requête à l’autre Le scope requête : le scope du Stateful Dry
  • 21. CDI 1/2 Solution d’injection de dépendance couplage faible fortement typée Patterns mis en oeuvre Interceptor Decorator Observer Scope conversation : je contrôle enfin le cycle de vie de mon scope
  • 22. CDI 2/2 Les idées reçues CDI 1.0 n’est pas exploitable car trop jeune Héritage de Seam & Guice Nécessite de travailler avec les EJB Les deux se marient bien mais rien n’est obligé Ne fonctionne qu’avec Java EE 6 Tourne sur Tomcat 6 Ne fonctionne qu’avec JSF Extension pour JSF, Servlet, Gwt, Wicket Tourne aussi sur Java SE en standalone Pas d’interoperrabilité avec Spring Extension CDI-Spring bridge dans les deux sens
  • 23. LES EJB 1/2 Transactionnels et distribuables Existent en plusieurs parfum : Stateless Stateful Gèrent la planification, le JMS Disposent d’un conteneur spécifique géré par le serveur Permettant de partager naturellement des services entre plusieurs applications Par défaut sont des Bean CDI
  • 24. LES EJB 2/2 idées reçues Lourd et compliqués @Stateful public class MonEjb { Pas testables public void MaMethode(){ Ne font que du stateful } ... Utilisable que dans des } développements Web
  • 25. Le Persistence context En provenance de JPA Gère l’interaction avec la BDD Le Mapping avec les entités Le cache de niveau 1 : l’entity manager cache les entités qu’il manage Le cache de niveau 2 : JPA cache ses interactions avec la BDD Vaut mieux qu’un DAO Stateless
  • 26. Ces outils sont vos amis Polyvalents Facile à prendre en mai Savent cohabiter avec votre marteau doré Permettent de créer des architectures nouvelles Arrêtez de tordre Spring quand Java EE est plus adapté
  • 27. Pourquoi le Stateful est beautiful ?
  • 28. Pourquoi a-t’on oublié... La sérialisation des services ? Parce que les bean spring ne sont pas facilement serialisables (problèmes avec les proxys d’injection) Parce qu’elle n’est utile que dans le cadre d’une architecture Stateful La Passivation des services ? Parce qu’elle ne fonctionne que si la serialisation est possible Parce que le conteneur Spring ne l'intègre pas dans son cycle de vie
  • 29. Mais il n’est pas trop tard Les EJB et les bean CDI sont vraiment serialisables Du coup la passivation est utilisable Pour les EJB c’est monnaie courant et facile à gérer avec @PrePassivate et @PostActivate Et peut servir à tranformer le StateFul en StateDry automatiquement : la sérialization devient un stockage lent pour les beans non sollicités depuis un temps donné
  • 30. Le Stateful peut être restful Etre stateful n’empêche pas la résilience : Possibilité de récréer une session à partir d’une information envoyée par le client. Ainsi tout une partie de l’application peut rester restful et une autre peut n’être que stateful : Catalogue, puis tunnel de vente.
  • 32. Architectures possibles 1/2 Pour ceux qui aiment les couches Il est toujours possible de faire ça On peut même en mettre plus qu’avec Spring
  • 33. Architectures possibles 3/3 Une architecture beaucoup plus ramassée Mise en oeuvre du pattern Gateway Permet un développement rapide
  • 34. Conclusion : Les outils du Stateful permettent de faire aussi du Stateless (sans être tordus).