La semaine dernière s'est tenu la première réunion du Paris JUG de l'année
!
Au menu, présentation de la future spécification Java EE 6 par
Antonio Goncalves (également co-organisateur du Paris JUG), et présentation du
serveur d'applications de Sun - Glassfish - par Alexis Moussine Pouchkine.
La soirée commence avec quelques annonces :
- La prochaine réunion sera spéciale, le Paris JUG fêtera sa première année
(déjà !). Pour l'occasion, les organisateurs des JUG français ainsi que
l'organisateur de Devoxx seront présents, et on aura le droit à une série de
Quickies sur différents sujets. Tarik Filali Ansary, chef de projet technique
chez Sfeir, viendra nous présenter Wicket.
- Le Paris JUG, attirant de plus en plus de monde, commence à être victime de
son succès. Trop de monde, pas assez de budget pour investir dans une autre
salle -> inscription obligatoire pour les prochaines réunions.
- Après XP France, un nouveau groupe d'agilistes est en cours de création, le
French Scrum User Group. Lancement prévu le 19 mars, avec Jeff Sutherland
himself, rédacteur du manifeste agile et fondateur de Scrum.
Ces annonces faites, Antonio a commencé à nous présenter
Java EE 6. Pour info, Antonio est JCP Expert Member de
Java EE 6, JPA 2.0, et EJB 3.1.
Java EE 6
Java EE 6, c'est 28 JSRs, environ 500 pages par spec. Le travail
est encore en cours, peu de JSRs ont atteint le statut de public draft, et la
sortie est prévue pour mai 2009.
... et présenté par Antonio, c'est façon Daft Punk : richer, easier,
lighter !
Richer et en même temps lighter ?
Oui, c'est possible grâce à l'apparition :
- des EJB Lite. La spécification EJB-lite est un
sous-ensemble de la spécification EJB qui supprime notamment le support de RMI,
EJB 2.x, Message Driven Bean.
- des profiles. Le profile "web" permet de supporter la base
de "Java EE", et même plus puisque cela inclut les EJB-Lite. Cela permettra à
des serveurs d'applications légers d'être certifié sur un sous-ensemble de
Java EE 6.
- du pruning. Plus fort que le deprecated, le pruning doit
permettre de se séparer des vieux morceaux obligatoirement présents en raison
de compatibilité ascendante. A noter que Entity CMP, JAX-RPC et JAX-R seront
"prunées" dans Java EE 6. Cela signifie que ces APIs seront tout
simplement supprimées dans la spécification Java EE 7 !
Antonio a ensuite zoomé sur certaines spécifications :
- Servlet 3.0 : on peut se passer du web.xml en le
remplaçant par des annotations. Pour plus de modularité, il sera également
possible de casser le web.xml en fragments. La nouvelle version de la JSR
permettra également le mode asynchrone. Une partie du mode asynchrone est déjà
implementée dans glassfish et permet de faire du reverse Ajax.
- JSF 2.0 : de nouvelles annotations vont permettre de
simplifier le développement d'applications JSF, et comme pour l'API Servlet
3.0, de rendre optionnel le fichier faces-config.xml. JSF 2.0 intégrera
facelet.
- EJB 3.1 : oh ! des annotations. Entre autres, une
annotation Singleton, et une autre facilitant la gestion des appels asynchrones
(par simple annotation sur une méthode d'EJB). Cela permet de se passer de
l'utilisation de JMS qui peut être plus fastidieuse. Nouveauté également, on
peut créer facilement un container d'EJBs à la volée (très pratique pour les
tests unitaires). La définition d'EJB devient extrêment simplifiée : il suffit
de rajouter l'annotation @Stateless pour qu'un simple POJO devienne un EJB,
plus besoin de configuration XML lourde. D'autre part, pour un EJB local, une
interface de l'EJB n'est plus nécessaire. Enfin, on pourra dorénavant créer des
EJBs directement dans un WAR (plus besoin d'un EAR, qui contient un JAR EJB).
Ainsi le développement d'EJB devient beaucoup plus simple à mettre en oeuvre
pour un développeur. C'est cette simplicité qui a jusqu'ici fait défaut aux
EJB, au profit de Spring. Dernier point : les noms JNDI des EJB deviennent
portables (plus de nom JNDI adhérent au serveur d'applications).
- Timer services : une nouvelle syntaxe apparaît (avec des
annotations !), s'inspirant de Cron et de Quartz. Séduisant par son apparente
simplicité.
- JPA 2.0 : La spécification JPA 2.0 est désormais
complètement indépendante de la spécification EJB, elle n'est plus vue comme un
sous-ensemble de EJB (comme c'était le cas dans JPA 1.0, source de confusion).
On notera la possibilité d'utiliser JPA 2.0 dans Java SE, de mapper des
collections de types simples, d'utiliser des locks pessimistes, et une API
"Criteria" (proche d'easyMock dans l'esprit). Rien de nouveau, mais JPA
couvrira désormais plus largement les fonctionnalités d'Hibernate.
- JAX-RS 1.1 : API permettant d'implémenter des Web Services
RESTfull. Encore une fois, tout est basé sur les annotations. Il suffit de
rajouter l'annotation @Path("/helloWorld") devant une classe POJO et une
annotation @GET devant la méthode qui sera appelée pour les appels en méthode
GET, pour obtenir une ressource REST. L'API est donc simple à utiliser. A voir
pour les cas plus complexes.
Antonio nous a ensuite affiché un arbre représentant la stack technologique
Java EE 6. Maintenant, avec la simplicité apportée par
Java EE 6, on peut faire une application JSF / EJB / JTA / JPA dans
un simple WAR.
Pour finir, on nous a présenté l'implémentation de référence de chaque JSR.
GlassFish V3, présenté dans la 2e partie de soirée, sera l'implémentation de
référence de EJB 3.1 et Servlet 3.0.
C'est tout pour la présentation de Java EE 6, qui sortira cette
année. A noter que Java EE 5 a 3 ans et que la plupart des serveurs
d'applications sont compliant Java EE 5 depuis peu, le dernier en
date étant JBoss en décembre 2008...
La présentation s'est terminée par une session de questions-réponses, en
voici quelques-unes :
- D'un côté Java EE 6 présente 5 conteneurs différents, de l'autre
Spring n'en présente qu'un, pourquoi, quel est l'intérêt ? Antonio répond que
le sujet des Web Beans n'est pas tout à fait réglé, sans plus de détails.
Nicolas Martignole semble avoir obtenu plus d'informations
sur le sujet au cours de la 3ème mi-temps !
- Pourquoi ne pas mettre plus le focus sur la JSR Servlet 3.0, ça semble
pourtant être la principale avancée ? Réponse : Parce que cette spécification a
été sujet à controverse, n'est pas finie, et n'est pas des plus faciles à
appréhender.
- JSF est un framework orienté composant, il n'y a rien sur les frameworks
orientés actions ? Réponse : en effet !
GlassFish
Quelques retrouvailles / petits fours / t-shirts Glassfish plus tard, Alex
Moussine-Pouchkine nous présente GlassFish. Plus précisément GlassFish V3
Prelude, qui est un "prelude to Java EE 6". GlassFish veut être early
adopter de la spécification Java EE 6. La plupart des futures
spécifications sont d'ailleurs déjà implémentées, en mode preview. On retrouve
ainsi JSF 2.0 Preview et EJB3.1 Preview.
Glassfish est à l'origine basé sur Tomcat, mais se veut un serveur
d'applications complet.
Alexis commence la session en essayant une comparaison Glassfish / JBoss pas
vraiment équitable, puisque les téléchargements GlassFish prennent en compte le
nombre de téléchargements du SDK Java EE 5 (Glassfish est inclus dans
le SDK Java EE 5).
Glassfish se présente comme étant "au même niveau côté performances" que
WebSphere et WebLogic. La mode étant au light (lightweight containers,
lightweight ESBs, EJB lite ...), GlassFish se présente comme un
"lightweight application server". Glassfish pourrait
d'ailleurs être l'un des premiers à se positionner sur les serveurs
d'applications "web profile compliant", mais c'est également bien plus, comme
on a pu le voir par la suite.
GlassFish se veut avant tout modulaire et
extensible. Modulaire car son noyau est basé sur OSGi (ce qui
est transparent pour les développeurs). Extensible car basé sur HK2. GlassFish
v3 a ainsi un socle ouvert, permettant à tout le monde de pouvoir créer et
déployer ses extensions HK2.
Alexis nous fait ensuite une démonstration : GlassFish possède des
fonctionnalités intéressantes pour les développeurs, en particulier la
sérialisation de sessions HTTP et le “compile on change” (rechargement à chaud
des modifications, très pratique en phase de développement). Le démarrage
rapide (15 à 20 secondes sur un ordinateur portable), grâce à un système de
mise en cache, est également mis en avant. Enfin GlassFish propose un AppStore
façon serveur d'applications : l'Update Center. Semblable au apt-get de Debian,
l'Update Center permet d'ajouter des briques logicielles à son serveur
d'applications. On y trouve par exemple des composants permettant l'intégration
de Grails ou Rails.
Côté versions, la 2UR2 (bientôt 2.1) est celle mise en avant
commercialement, pour sa robustesse et son support SUN. La V3 définitive
sortira vers juin 2009, pour être présentée à JavaOne 2009, et devrait être
certifiée Java EE 6. Attention, certains composants Glassfish v2 ne
sont pas portés sur Glassfish v3 pour le moment. Ainsi la V3.1, apportant le
clustering, sera disponible fin 2009.
Bienvenue au Paris Java
User Group !
GlassFish - Open
Source Application Server
Résultats du Tableau Blanc lors du buffet
Article rédigé par les sfeiriens du Paris JUG : Fabien Baligand, Tanguy
Bayard et Tarik Filali Ansary.