Par Antoine Sabot-Durand (Ippon Technologies) : Les rendez-vous manqués de Spring EJB 3 vs Spring

EJB est mort, vive EJB !

C'est fin 2003 que Sun forma le groupe d'experts autour d'EJB 3. A cette occasion, Gavin King et Emmanuel Bernard, éminents membres du projet Hibernate, rejoignirent le JCP et participèrent à l'Expert Group d'EJB3. Leurs travaux débutèrent mi 2004 pour s'achever le 11 mai 2006.


Cette nouvelle version d'EJB fut une refonte totale (n'ayant en commun avec la version 2.1 que le nom) intégrant les concepts d'injection de dépendance et d'AOP rendus populaires par Spring. Ni Interface21 (la société qui devait devenir SpringSource fin 2007), ni Rod Johnson (pourtant membre du JCP suite à sa collaboration à la spécification Servlet 2.4) ne furent membre de l'expert group EJB3. L'une des grosses innovations de cette nouvelle mouture fut la spécification JPA (Java Persistence API). Cette API de persistance totalement calquée sur Hibernate réussit même le tour de force de s'extirper de la spécification EJB3 pour pouvoir être exploitée directement sous Java SE et des frameworks léger comme Spring.

L'attitude de JBoss était plutôt offensive et celle de Spring défensive


A travers sa participation à l'expert group EJB3, JBoss réussit a promouvoir son Framework Hibernate au rang d'implémentation de référence de JPA et à l'intégrer avec une solution standard et alternative à Spring : EJB3. Belle réussite, mais la moitié du chemin restait à faire pour sérieusement contre-carrer Spring.

Java EE5, une nouvelle ère pour le JCP

Java EE 5 dans lequel s'intègre EJB 3.0, marque un tournant important dans l'approche générale du JCP. L'entité pilotée par Sun intègre maintenant plus d'individus et d'entreprises issues du monde Open Source. La principale conséquence de cette ouverture est la création d'implémentations avant les spécifications. Ainsi, Hibernate fut adapté au fur et à mesure par JBoss pour devenir à terme l'implémentation de référence de JPA 1.0, et JBoss commença à travailler sur des betas d'EJB3 et de JPA dès octobre 2004 (plus d'un an et demi avant la sortie de la spécification).


Ces premières versions permettent à JBoss de commencer à proposer une alternative à Spring pour exploiter Hibernate. Avec l'arrivée de cette nouvelle solution JBoss ouvre les hostilités en dénonçant la façon dont Spring exploite la session Hibernate et en expliquant qu'avec EJB3 ce sera tellement mieux. De son côté, Spring n'hésite pas à montrer Hibernate du doigt quand des utilisateurs du framework viennent sur les forums Spring poser des questions au sujet des exceptions de type LazyInitializationException en expliquant que c'est la faute d'Hibernate si ces exceptions surviennent. Ce n'est clairement pas l'objet de cet article de prendre parti, mais on peut dire que côté agressivité et mauvaise foi les deux parties firent match nul. On pourra revoir certaines de ces passes d'armes qui ne font pas franchement l'honneur des deux camps ici ou .


Sur le fond, avec 5 ans de recul, on peut quand même dire sans trop de subjectivité que l'attitude de JBoss était plutôt offensive et celle de Spring défensive. Ce qui résume plutôt bien le rapport de ces deux compagnies au marché des technologies Java.


Quoiqu'il en soit, il était évidemment que Spring était de loin une solution plus mature et plus complète pour couvrir toute la pile applicative du front à la persistance en passant par la couche métier. EJB3 de sont côté remplissait le contrat côté couche métier et persistance mais son exploitation à travers une webapp restait assez compliqués de par la différence entre les cycles de vie des EJB3 et ceux des Servlets, sans parler du recours systématique à JNDI pour interagir avec les EJB3 qui n'était pas pour faciliter la vie du développeur. Gavin King avait manifestement réalisé cette grosse lacune (même si officiellement il clamait qu'EJB3 remplaçait avantageusement Spring) et décida dès 2005 de se lancer dans la réalisation d'un nouveau framework pour la combler.