18 novembre 2010

Keynote day 2

Après le traditionnel tour des stands à la pêche aux goodies - pas de canard Adobe cette année :'( - je m'y prend un peu plus tôt ce matin pour m'installer dans les confortables fauteuils de la salle 8, qui accueille la keynote. L'immense écran (Devoxx se tient dans un cinéma multiplex) affiche un twitt-wall gigantesque sur lequel nous sommes quelques-un a jouer au social-network sur écran géant :


Stéphan Jansen fait une rapide intervention - et interrompt le jeu des twitts :'( - pour nous annoncer qu'il y a déjà 70 inscrits au channel payant de Devoxx 2010,  qui donnera accès dans quelques jours à TOUS les talks de devoxx, alors que les autres devront attendre leur publication au compte goute au cours de l'année, et qui permet de suivre les keynote en streaming direct.

On passe ensuite (enfin ?) à la keynote, consacrée à l'avenir de JavaEE.

Si JavaEE propose un modèle fiable et reconnu, lorsqu'on considère la montée en puissance du Cloud il manque de nombreuses API standardisées pour la gestion propre à ce mode de fonctionnement (stockage distribué à la S3 par exemple). JavaEE doit aussi repenser son modèle de packaging : le déploiement de versions concurrentes d'une même application, l'upgrade de version, le versionning des données associées, sont des éléments indispensables pour une utilisation en mode cluster/cloud, mais encore absents de la norme.

Pour ne pas rester sur de la théorie, on passe maintenant à une démo de ce que propose GlassFish en mode cloud. Pour la petite histoire, la démo est faite sur un MacBook ... sous Ubuntu ! C'est vraiment une conférence de geeks ;) Sur la base d'une image JeOS ("Just Enough OS", un OS réduit et optimisé pour la VM) Glassfish, un cluster virtuel est lancé. Les commandes asadmin proposée par glassfish permettent de lancer et d'administrer un cluster Glassfish en trois commandes sur une IaaS.

Retour sur les slides. JavaEE 7 exploitera la modularité JavaSE 7 (donc, oubliez OSGi pour l'instant). La modularité permet d'identifier les composants redondants et de les partager automatiquement, évitant les doublons et autres conflits dans le classpath.

JSF de son côté va profiter de quelques évolutions dans la version 2.1, mais le plus intéressant viendra avec JSF 2.2 et le support d'HTML 5. JMS va également subir un lifting pour clarifier quelques points et s'ouvrir aux nouvelles tendances expérimentés dans le monde du MOM. La couche Web se met à jour avec le support des web-Sockets, de JSON, de HTML5, et l'utilisation des nouvelles nouvelles I/O (NIO-2) pour le connecteur HTTP (ce qui devrait reléguer le couple Apache-JK au rang d'antiquité).

Linda DeMichiel prend la parole pour faire un focus plus approfondi sur JPA 2.1. Basé sur les demandes de la communautés, une liste de fonctionnalités candidates est présenté :

  • les types custom
  • les fetch plans
  • de nouvelles méta-données de mapping
  • des stratégies de nommage définies par l'utilisateur
  • plus de flexibilité sur les valeurs générées (et pas seulement les clés)
  • la gestion des attributs immuable (readonly)
  • plus de flexibilité dans le descripteur XML
L'API évolue aussi pour dévoiler les fonctionnalités internes du mapper O/R: listeners, extension du méta-modèle, détection de l'état "dirty" des entités... Le langage de requête s'enrichit pour accéder aux procédures stockées, downcasing (accès à un sous-type précis), outer-joins avec condition "ON", élargissement de l'API Critéria aux Updates et Delete.

Globalement, JPA 2.1 cherche donc à consolider sa place de norme largement adoptée en restant à l'écoute du terrain et en intégrant les extension / évolutions réclamées par les utilisateurs. Exemple : l'unwrapping de l'EntityManager pour accéder à l'implémentation sera explicite, permettant d'utiliser quand c'est nécessaire les fonctionnalités propres à Hibernate ou EclipseLink.

On passe enfin à JAX-RS. Exclu du web profile de JavaEE 6, JAX-RS est cependant une norme majeure avec de nombreuses implémentations open-source. Dans les deux années qui nous séparent de JAX-RS 1.0, ces framework ont beaucoup évolué et innové. Il est temps d'intégrer les innovations qui ont fait leur preuve dans la norme : Premature Standardization is Evil ;)

La fonctionnalité la plus attendue et l'API cliente JAX-RS. Jusqu'ici on pouvant écrire des service mais pas les consommes sans partir sur du code propre à une implémentation, c'est donc un complément indispensable. L'intégration avec les autres briques JavaEE avance, avec le support de @Inject et de gros progrès dans l'intégration avec CDI. De nombreux points restent encore en suspens pour une syntaxe légère et non surchargée d'annotations.

 La gestion asynchrone, basée sur Atmosphere, est aussi au rendez-vous. L'API de @Broadcast est d'une grande simplicité et masque complètement la complexité de la technologie. Il faudra qu'on fasse une session sur le sujet au BreizhJUG ;)