Compte rendu du Paris JUG (Java User Group) JSF 2.0, Servlet 3.0
Bonjour,
Pour ceux qui ne connaissent pas le JUG pour Java User Group est une conférence gratuite mensuelle organisée (en ce moment du moins) dans les locaux de l’ISEP à Paris.
L’objectif de ce post est de faire un compte rendu de la scéance du mardi 13 octobre sur JSF 2.0 et servlet 3.0.
Tout d’abord précisons que les slides de la précédente session du JUG, celle du 15 septembre sur la qualité logicielle, sont disponibles en téléchargement sur le site du Paris JUG.
Il est également possible de visionner les conférences en vidéo, en streaming sur le site beta.parleys.com.
JSF 2.0
Damien Gouyette, François Petitit
La conférence était divisée en deux parties, séparées par un buffet. La première partie, présentée par Damien Gouyette, qui s’occupe actuellement des normes et des pratiques JSF à Generali et par François Petitit, de Octo, portait sur les nouveautés de JSF 2.0. Ces messieurs ont fait un bref rappel de l’historique et des fonctionnalités de JSF puis ont présenté les nouveautés, assaisonnées de petites démonstrations.
Historique :
JSF est le framework MVC de JEE, dont la première version (1.0) est sortie en 2004 (JSR 127 ). La version 1.2 (JSR 252) sortie en 2006 apportait quelques améliorations. Et la version 2.0, sortant donc en 2009 et correspondant à la JSR 314, inclut pas mal de nouveautés.
Nouveautés de JSF 2.0 :
- Inclusion de facelets en natif (mais une implémentation de JSF valide doit toujours supporter les JSP).
- Import de ressources statiques dans le répertoire resources.
- Possibilité de forwarder les validations de hibernate validator (ou autres implémentations de la JSR 303) jusqu’aux pages JSF avec la balise f:validateBean.
- Possibilité de configurer les managed beans avec des annotations, ce qui rend le fichier faces-config.xml facultatif. Pour transformer un bean en manager bean JSF il suffit de l’annoter avec @ManagedBean. On peut lui donner le scope request avec @RequestScoped.
- Ajout du scope “view”, pratique pour les applications utilisant Ajax.
- Facilitation de l’ajax un peu dans l’esprit de ajax4jsf (richfaces) avec (entre autres je suppose, mais c’est celle qui a été présentée) une balise f:ajax.
- Possibilité d’utiliser des profils d’utilisation : dev, prod, unit test
- Possibilité de faire des requêtes get, ce qui permet de faire de faciliter les bookmarks.
JSF 2.0 est inclus dans JEE6 et compatible avec JEE5.
Nous avons eu droit à une démonstration de ezcomp, outil fourni avec JSF 2.0 pour faciliter la création de composants. L’idée est de créer un fichier dans le répertoire resources, de le configurer avec un peu de xml pour préciser par exemple les paramètres qu’il peut utiliser, et de le réutiliser ailleurs ensuite.
Puis ils ont fait une démonstration de l’utilisation des validations avec hibernate validator basée sur un formulaire de contact (avec des tableaux de présentation
). Le même formulaire a ensuite été utilisé pour montrer qu’on peut utiliser les mêmes validations, cette fois en ajax avec f:ajax.
Au moment des questions, Emmanuel Bernard, spec leader de la JSR 303 (bean validation), est venu apporter des précisions sur son sujet. Il conseille d’utiliser un seul bean en tant que managed bean JSF et en tant qu’EJB chargé de requêter la base. Lorsque quelqu’un dans l’assistance a parlé de la différentiation du conteneur de servlet et du conteneur d’EJB, la réponse fuse :
On s’en fout de celà ! Dans 99% des cas ils sont dans la même VM.
Il est remarquable que le nom de seam n’ait jamais été prononcé alors que beaucoup de ces fonctionnalités (il faut le dire, des manques de JSF 1.2) sont inspirés de ce framework. Web Beans (qui ne s’appelle plus comme ça) a tout de même été évoqué par E. Bernard.
(Buffet : J’ai eu le plaisir, au buffet entre les deux conférences, de goûter une boisson semblant être un mélange de jus de raisin et de miel … un peu surprenant (je m’attendais à du vin) mais intéressant)
Servlet 3.0
Rémy Maucherat
La seconde partie de la conférence, portant sur Servlet 3.0, a été assurée par le fort sympathique Rémy Maucherat, travaillant pour Redhat sur JBoss Web, le conteneur web de JBoss AS. Rémy a précisé qu’il était commiteur sur tomcat depuis 2000, membre de l’apache software foundation et membre de l’expert group pour la JSR 315 (servlet 3.0 donc).
La présentation était très technique, avec beaucoup de morceaux de code (une mise à jour prochaine liera les slides quand ils auront été publiés). Elle a suscité pas mal de réactions.
Ce qui ressort dès le départ c’est que le sujet concerne surtout les éditeurs de frameworks. Ce qui peut se comprendre : qui fait encore des servlets dans le cadre de ses développements ?
L’intérêt pour les frameworks est d’être importé en tant que jar et ne pas réclamer de configuration supplémentaire (sachant que l’utilisateur peut ensuite écraser les configurations introduites par le framework).
Voici la liste des nouveautés :
- Possibilité de configurer les servlets, des filtres, des listeners par des annotations. Il faut toujours implémenter les interfaces, la configuration dispense uniquement de la configuration dans le fichier web.xml. L’utilité des annotations est de pouvoir configurer les mappings (entres autres) sans passer par le descripteur de déploiement. Le présentateur s’est montré un peu ironique sur l’ajout des annotations comme @WebServlet, @WebFilter ou @WebListener :
- Je vais dire un peu de mal de Sun … Sun voulait des annotations, alors on a mit des annotations.
- Possibilité d’ajouter et/ou de supprimer des servlets, des filtres ou des listeners de façon programmatique dans un Listener ou dans le ServletContextInitializer
- Gestion de l’upload de fichiers :
- Un peu comme dans commons-fileupload … d’ailleurs c’est ce qu’on a fait
- Overlays : possibilité d’importer des jars de ressources (par exemples des CSS, javascript, …). Ce sera clairement un soulagement pour beaucoup de monde : plus besoin de copiés/collés de ressources pour utiliser le thème graphique de la boite, ou de web app mappées sur un contexte conventionné “on suppose que c’est là”. Il faut les ajouter dans le répertoire META-INF/resources du jar (qui est lui dans WEB-INF/lib).
- Possibilité d’exécuter des opérations de manières asynchrone. L’API est selon Rémy Maucherat le plus gros morceau. Il a décrit en détail l’API, avec les méthodes à utiliser, le système de listener, précisé qu’il ne fallait pas faire d’IO bloquante, etc … avant de conclure qu’il fallait éviter d’utiliser directement cette fonctionnalité, sauf si absolument nécessaire.
- Gestion de “web fragments”. Un web fragment est en gros un descripteur de déploiement secondaire, qui peut être présent dans un jar (dans META-INF). D’ailleurs la balise racine est web-fragment au lieu de web-app, le reste étant assez similaire.
- Amélioration de la gestion de la sécurité. L’api fournit une méthode authenticate ainsi que des méthodes login et logout.
- Pluggabilité des implémentations de JSP. L’idée est de pouvoir changer d’implémentation de JSP. Selon Remy Maucherat cette fonctionnalité est utile pour tester les différentes implémentations mais déconseillée en prod.
- Gestion de la session configurable : on peut maintenant changer le nom du paramètre jsessionid, mais avec prudence toutefois, beaucoup d’outils l’utilisant (comme modjk). Il est également possible de choisir le tracking mode : Cookie, URL ou SSL ce dernier étant :
- très bien en théorie mais en fait ça marche pas.
On le voit la plupart de ces fonctionnalités sont clairement destinées aux frameworks, l’idée étant que l’on puisse importer un jar, par exemple de spring mvc, et ne toucher à aucun autre fichier, même pas le descripteur de déploiement, pour l’utiliser.
Rémy a également précisé que la plupart de ces features allaient d’après lui prendre du temps a devenir mainstream, sauf l’asynchronicité et l’import des ressources.
Cette présentation a été suivie de pas mal de réactions. Quelqu’un a par exemple demandé s’il serait possible de récupérer des “paramètres du path” pour faire des URL à la REST (comme dans seam) (la réponse est non). Quelqu’un d’autre a demandé si les responsables de la JSR 315 étaient en contact avec des développeurs de frameworks. La réponse est, là encore, non.
Malheureusement pour une question de timing la salle a du être libérée et la séance suspendue.
Conclusion
Au final, comme je ne connaissais pas les nouveautés, j’ai personnellement trouvé les deux présentations assez intéressantes. Je précise qu’il valait mieux bien connaître JSF pour suivre la première. Emmanuel Bernard m’a impressionné par son talent oral : il a prit la parole sans préparation particulière à la suite de Damien et François et a su capter l’attention et préciser quelques points avec aisance. De même Rémy Maucherat a un style détendu où l’humour tient une place importante, que j’ai plutôt apprécié.
Je ne suis pas allé à la troisième mi-temps au pub, ayant prévu d’aller me coucher. Je me rattraperai la prochaine fois.

La troisième mi-temps s’est déroulée au Vavin, et franchement c’était bien sympa. Un bon moyen d’échanger sur les conférences qui viennent de se dérouler, et d’éclaircir certains détails autour d’une bonne bière.
Les slides des conférences sont maintenant disponibles sur le site du paris Jug : http://www.parisjug.org/xwiki/bin/view/Meeting/20091013
D’autres comptes rendus ont été écrit comme celui du touilleur express : http://www.touilleur-express.fr/2009/10/16/retour-sur-la-soiree-jsf-2-0-et-servlet-3-0/
Il y a aussi “the coders breakfast” sur JSF 2.0 : http://thecodersbreakfast.net/index.php?post%2F2009%2F10%2F14%2FCompte-rendu-du-Paris-JUG-JSF2-%2F-Servlets-3
et sur servlets 3.0 : http://thecodersbreakfast.net/index.php?post%2F2009%2F10%2F15%2FCompte-rendu-du-Paris-JUG%2C-part.-2-%3A-Servlets-3.0 où le ton sarcastique est délicieux. Remy Maucherat répond dans les commentaires.