Java EE & CDI vs. Spring
Fabian Piau | jeudi 13 octobre 2011 - 21:58Mercredi soir au JUG nantais, nous avons pu assister à la présentation « Stateful is beautiful » d’Antoine Sabot-Durand.
Expert en Java EE depuis plusieurs années, Antoine nous a donné sa vision sur le paysage Java actuel, en particulier sur Java EE (Enterprise Edition) et l’alternative Spring.
Spring est un conteneur dit léger qui permet d’obtenir une infrastructure similaire à celle d’un serveur d’application Java EE plus lourd. Si le premier ne connait que les beans stateless, le second connait aussi les beans stateful.
L’exemple d’un site e-commerce est souvent choisi pour expliquer concrètement ces deux notions.
Le panier sera représenté par un bean stateful dans le code. Son état est conservé pendant une certaine durée. Cela commence quand l’utilisateur ajoute un produit et prend fin lorsqu’il saisit son numéro de carte bancaire pour payer. L’état stateless est suffisant pour la consultation du catalogue de produits. Pour afficher une fiche produit, on ne se préoccupe pas des produits que l’utilisateur aura consulté précédemment. Le produit sera représenté par un bean stateless.
Antoine a également passé en revue les idées reçues sur Java EE. Ces idées découlent pour la plupart de son historique et continuent de le poursuivre. A l’époque de J2EE (comprenez Java EE 4 et inférieur – les versions sorties jusqu’en 2003), la spécification EJB 1.X – 2.1 incluse a essuyé de nombreuses critiques de la part de la communauté Java. Très lourde à mettre en oeuvre du fait de sa complexité et rendant vite votre code très difficilement testable, cette plateforme Java dédiée Entreprise n’a pas convaincu…
Ce manque a même donné naissance au développement de solutions alternatives dans le monde Open Source, tels que Spring et Hibernate.
Depuis, la plateforme (renommée Java EE) a évolué et a été simplifiée, la nouvelle spécification EJB 3.X incluse est devenue plus légère se rapprochant ainsi de ses concurrents. Cela est particulièrement vrai pour la dernière version Java EE 6 sortie fin 2009. En effet, celle-ci inclut CDI (Contexts and Dependency Injection), le standard qu’il lui manquait pour concurrencer sérieusement Spring. Elle inclut également la notion de « profile », permettant à Java EE de se spécialiser. Dans les grandes lignes, on ne prend que les composants dont on a besoin. Pour les tests d’intégration dans le conteneur, Antoine nous a conseillé d’utiliser l’outil Arquillian.
Spring a fait le choix de ne pas implémenter le nouveau standard CDI. Pourquoi? La réponse n’est pas si simple. Peut-être qu’implémenter ce nouveau standard allait être impactant sur le code existant et risquait de mettre un frein aux évolutions du framework. En même temps, fort de son nombre d’utilisateurs, peut-être que SpringSource a décidé de continuer son développement parallèle en espérant un jour détrôner définitivement CDI. En général, les entreprises sont plutôt frileuses lorsqu’il s’agit de revoir leurs habitudes, connaissances et autres bonnes pratiques (utiliser CDI au lieu de Spring serait un investissement très important). En même temps, cela peut être à double tranchant si CDI se met à décoller dans les années à venir. Affaire à suivre!
A noter : contrairement à Spring, Hibernate implémente JPA pour la couche de persistance (qui est le standard Java EE) lui assurant une plus grande pérennité pour l’avenir.
Comme Antoine l’a rappelé à de nombreuses reprises, le but de sa présentation n’est pas de dénigrer Spring. Bien au contraire, il continue d’ailleurs de l’utiliser et pourrait difficilement s’en passer. Il a notamment fait la métaphore du « marteau doré » avec Spring que j’ai trouvée plutôt intéressante. Aujourd’hui, la majorité des développeurs Java ne se posent pas de questions lorsqu’ils veulent faire de l’injection de dépendance et utilisent spontanément Spring (on a un clou, hop on prend notre marteau favori). Pourtant, il faudrait pouvoir poser ce marteau doré quelques temps et voir ce qui se fait autour. En fonction du projet, Spring n’est pas toujours le plus adéquat.
Aujourd’hui, le succès de Java EE reste globalement mitigé, les idées reçues ont la dent dure, Spring a encore de beaux jours devant lui. Combien de temps encore? Seul l’avenir nous le dira… En attendant, Antoine nous invite fortement à essayer Java EE 6 pour se faire sa propre opinion. A la fin, nous avons eu le droit à une démonstration : un projet exemple en Java EE, créé en quelques minutes à partir d’un archetype Maven et exploitant les notions stateful et stateless.
Pour en savoir davantage, je vous invite à lire ces deux articles écrits par Antoine :
Commentaires récents