Un bien petit acronyme derrière lequel se cachent bien d'autres acronymes avec beaucoup de concepts derrières. L'objet de ce post n'est pas d'en faire le détail (il existe de très bon livres, articles techniques à ce sujet) mais plutôt de donner une approche générale et quelques points de repères.
JEE : c'est quoi
Pour commencer c'est déjà un acronyme signifiant Java Entreprise Edition. Souvent source de confusion la dénomination J2EE peut aussi être rencontrée. Le changement a eu lieu au moment du passage J2EE 1.4 à JEE5 : abandon de la dénomination java2 pour java et incrément des numéros 1.x à x directement.Ensuite c'est une spécification (caractérisée par une JSR) regroupant un ensemble de spécifications (elles même caractérisées par des JSR).
Les spécifications JEE et leur JSR principale :
- JEE7 (Juin 2013, 34 spec) La description Oracle et la JSR 342
- JEE6 (Décembre 2009, 28 spec) La description Oracle et la JSR 316
- JEE5 (Mai 2006, 23 spec) la description Oracle et la JSR 244
Il est possible de download les bundles et exemples de codes :
http://www.oracle.com/technetwork/java/javaee/downloads/index-jsp-140710.html
On peut aussi via un repository Maven récupérer les implémentations des composants JEE7 :
https://wikis.oracle.com/display/GlassFish/Java+EE+7+Maven+Coordinates
JEE : ça sert à quoi
JEE propose des composants, services, containers, standards permettant de faciliter l'intégration des applications développées au sein d'un systèmes d'information.- Par exemple pour les développements orienté Web : les servlet, JSP, JSF.
- Ou encore JNDI (Java Naming Directory Interface) qui permet de décorréler son code applicatif de constantes propre aux environnements locaux tel des path sur la machine, ... Le code utilise des clés et le serveur via un "arbre JNDI" fourni les constantes locales correspondant à ces clés.
- mais aussi les EJB, webservices, ...
Après le développeur reste libre d'utiliser ces composants ou de choisir une alternative (hors JEE) quand il y en a. Par exemple utiliser des Spring Beans plutôt que des EJB.
Derrière la spécification : l’implémentation
Comme je le disais plus haut pour un composant de JEE je peux avoir derrière la spécification plusieurs implémentations proposées.Par exemple JEE6 contient JPA 2.0 (Java Persistance API) piloté par la JSR 317 qui est implémenté par un certain nombre de solutions :
- Hibernate
- OpenJPA
- EclipseLink (anciennement TopLink)
Les serveurs applicatifs de par leur fonction sont amenés à proposer des services JEE et doivent donc fournir leur implémentation de ces services aux applications qu'ils hébergent.
Les différents serveurs peuvent implémenter (et ainsi proposer) tout ou une partie de JEE. Par exemple Tomcat propose un container web permettant de déployer un war et faire tourner des servlet mais pas d'EJB.
Pour répondre à ces implémentations partielles de JEE, Oracle avec JEE6 à mis en place la notion de profiles (avec le Web Profile).
Oracle liste également les serveur applicatifs qui sont certifiés JEE compliant
http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html
Quelques matrices de compatibilité serveurs applicatifs / JEE
Liste générale : http://en.wikipedia.org/wiki/Comparison_of_application_servers#JavaTomcat (Apache) : http://tomcat.apache.org/whichversion.html
TomEE (Apache) : http://tomee.apache.org/comparison.html
WAS (IBM) : http://en.wikipedia.org/wiki/IBM_WebSphere_Application_Server
Jetty (Eclipse Fondation)
http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Table
http://en.wikipedia.org/wiki/Jetty_%28web_server%29
Weblogic (BEA - Oracle) : http://en.wikipedia.org/wiki/Oracle_WebLogic_Server
Quelques liens pour aller plus loin
points d'entré pour la documentation Oracle Java :http://docs.oracle.com/javaee/
http://docs.oracle.com/javase/
Quelques samples de code JEE7 (websocket, batch, json, and so on) :
https://blogs.oracle.com/arungupta/entry/java_ee_7_samples_galore
https://blogs.oracle.com/arungupta/entry/java_ee_7_key_features
Support de JEE7 dans Kepler (petit dernier d'eclipse) :
http://www.jabby-techs.fr/eclipse-kepler-est-arrive/
Un historique des versions JEE
http://en.wikipedia.org/wiki/Java_EE_version_history
Présentation des composants et modèle JEE 6
http://fr.slideshare.net/shreeg/java-ee-6-component-model-explained