dimanche 20 octobre 2013

JEE


     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 :
     Au delà la spécification il y a une implémentation de référence (Glassfish, Metro, ...) mais chaque éditeur, projet peut proposer une implémentation compatible avec la spécification. Par exemple IBM avec son serveur applicatif Websphere propose ses propres implémentations d'un certain nombre de composants JEE.

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)
     En utilisant une implémentation autre que la RI (Reference Implementation) le développeur pourra aussi avoir le choix entre rester sur le standard  (JPA 2.0 dans ce cas) et demeurrer compatible avec toutes les implémentations JPA 2.0 ou utiliser des fonctionnalités spécifiques (hors spec) de la solution. Ceci aura pour conséquence de le lier plus fortement à l'implémentation qu'il a choisi. Ce n'est pas forcément un problème mais il faut en être conscient.

     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#Java
Tomcat (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

Aucun commentaire:

Enregistrer un commentaire