Par Antoine Sabot-Durand (Ippon Technologies) : Les rendez-vous manqués de Spring Un besoin de disposer de composants plus évolués et de la persistance

La génèse de l'IoC et des conteneurs en Java

Les débuts de J2EE en 1999 furent un peu décevants. Si les spécifications servlet et JSP étaient prometteuses et le concept des EJB plutôt bon, la mise en œuvre de ces derniers était extrêmement lourde et contraignante. Ainsi EJB ne rencontra pas le niveau d'adoption espéré par ses concepteurs et c'est probablement de ce loupé qu'est né le schisme entre serveurs d'applications J2EE "lourd" et serveurs "léger" (n'implémentant que les spécifications Servlet et JSP).


Cependant, le besoin d'un conteneur léger pour gérer des composants métiers ou techniques était bien réel et comme aucune solution standard n'existait, des initiatives privées commencèrent à apparaître. Le premier fut probablement le projet Apache Avalon (1999) qui introduisit ces concepts bien avant 2004. On se rappelle de l'article fondateur de Martin Fowler sur le sujet.

Beaucoup de projets se sont formés pour répondre aux besoins d'ORM, dont Hibernate.

Cette même année 2004, Rod Johnson et Juergen Hoeller publiaient le célèbre "J2EE Development without EJB", et la version 1.0 de Spring voyait le jour. Cette solution rencontra très vite un succès important (preuve de la réalité du besoin et de la malformation congénitale d'EJB). Elle est encore aujourd'hui la solution phare en la matière.

Les frameworks Web et leur besoin de "managed beans"

Parallèlement à ces concepts très élaborés, le besoin de disposer de composants plus évolués que de simples classes Java en termes d'interopérabilité ou de cycle de vie, s'est rapidement fait sentir pour les frameworks Web naissant. Les formBeans de Struts, apparu en 2000, constituent probablement la première solution de ce genre. Craig R. McClanahan, le papa de Struts s'embarqua dès 2001 dans la JSR 127 qui devait donner naissance trois ans plus tard au très controversé JSF 1.0 qui fut le premier Framework UI à introduire explicitement la notion de "managed bean" que l'on retrouvera dans Java EE 6 et CDI en 2009.
De son côté Spring, adressa ce besoin dès la version 1.0 (2004) par des classes permettant de mettre à disposition de la couche Web des beans du conteneur. Tout ça devait évoluer plus tard vers Spring MVC qui deviendrait un concurrent sérieux de Struts dès 2005.

Le besoin de persistance et l'arrivée des ORMs

Un autre aspect absent d'EJB 1.X et maltraité par EJB 2.X était la persistance. Ce concept d'association d'Objet à un modèle de base relationnel (Object Relational Mapping), n'était pas nouveau, et avait déjà été pas mal exploré avec des langages comme Smalltalk.


En Java, beaucoup de projets se sont formés pour répondre à ce besoin d'ORM. On peut citer par exemple JDO, iBatis ouToplink. Mais, l'acteur majeur dans le domaine fut sans conteste Hibernate. A l'instar de Rod Johnson, Gavin King le père d'Hibernate est lui aussi une star du monde Open Source Java, et l'affrontement entre les deux hommes et de leurs disciples, à défaut de leur donner une bonne image, occupa une bonne partie de la communauté des développeurs à partir du moment où Hibernate (racheté par JBoss fin 2003) fit le choix d'une stratégie beaucoup plus ambitieuse que Spring pour tenter d'imposer ses outils...