Notion de conteneur d'applications
Notion de conteneur¶
Java EE a pour vocation de définir un ensemble de règles normées, les spécifications, définies à travers le processus d'adoption des JSR, les Java Specification Requests.
Ce qui distingue Java EE de Java SE, c'est la nature de ces spécifications, qui sont orientées pour résoudre les problématiques des logiciels d'entreprise telles que :
- accès concurents, multithreading - accès distants (remote ou remoting) - interfaces web (servlets, JSP, JSF, etc).
- intégrité des données (transactions et XA)
- fiabilité, fail-over
- performance et haute-disponibilité (clustering et high availability)
- sécurité (role et realm)
Dans le standard Java EE, l'exécution d'une fonction métier tire tout ou partie des services précédemment cités.
Java EE n'est pas un logiciel ou un programme, c'est une norme.
Ce sont les éditeurs de logiciels qui fournissent des implémentations du standard.
On parle alors de conteneurs.
Depuis Java 5, l'utilisation des annotations dans la norme EJB3 a permi d'alléger considérablement le développement (anciennement très lourd) d'EJBs. Cependant, les concepts manipulés n'en restent pas moins triviaux. En outre, la mise en œuvre des conteneurs d'application à base d'EJB s'avérant parfois complexe, cette technologie souffre d'une certaine désaffection de la part des industriels. En pratique, même si les conteneurs full Java EE sont choisis par les industriels, les applications utilisent très rarement la panoplie complète de la spécification.
Principe de fonctionnement¶

Différence majeure avec Java SE : plus de main
Processus de fabrication¶
Le processus de fabrication d'une application Java EE est en trois phases :
build, c'est la compilation du projetdeploy, comprend le packaging, c'est à dire l'archivage enWARou enEARdu code compilé. Une fois construite, l'archive est déposée (déployée) dans un dossier du conteneur prévu à cet effet.run, c'est le démarrage par le serveur, autrement dit de la JVM qui lance le main du conteneur

Quelques exemples de conteneurs¶
Les conteneurs ne couvrent pas forcément l'ensemble des spécifications de la norme Java EE. Ainsi, certains sont plus ou moins légers afin de mieux s'adapter aux besoins des développeurs. On peut néanmoins distinguer deux grandes familles de conteneurs :
- Les conteneurs Full Java EE.
- Les conteneurs légers, dits de servlet.
Le mécanisme d'interface Java permet de découpler ses développements
de l'implémentation fournie par l'éditeur du conteneur.
Autrement dit, une application développée sur le conteneur A devrait pouvoir être exécutée sur le conteneur B.
Conteneurs Full Java EE¶
Tous couvrent l'ensemble de la norme Java EE, mais ils se distinguent sur différents points comme l'interface d'administration, certaines facilités de clusterisation ou encore l'intégration plus ou moins poussée à un IDE.
Conteneurs de Servlets¶
On parle alors de servlet container ! Ils intègrent un sous-ensemble de la spécification, essentiellement pour les accès web. Les bibliothèques manquantes peuvent naturellement être intégrées à l'application.
Les principales implémentations disponibles sont :
Pour autant, les problématiques d'entreprises encadrées par Java EE ne sont pas oubliées, mais confiées à des implémentations séparées.
Conteneurs, promesse tenue ?¶
Les besoins qui ont fait naître les spécifications Java EE sont toujours d'actualité. Les difficultés de mise en œuvre dans un premier temps, puis les batailles industrielles des éditeurs ont laissé le champ libre à de nombreuses initiatives open-source plus légères. Aujourd'hui, les dernières évolutions de la spécification ont permis de rattraper un certain retard sans pour autant détrôner les nombreux frameworks qui sont devenus des standards d'usage à défaut de respecter une norme de JSR. Dans la pratique, les solutions modernes n'utilisent que des bouts de la spécification Java EE !
Toutefois, Java EE a permis de définir les bases des architectures modernes. Les conteneurs ne demeurent pas moins incontournables pour les services de bas niveau (multi-threading, etc.), et Java, EE ou pas, reste une technologie de choix pour l'implémentation de services métiers.