Devoxx 2011 : comment se dessine l'avenir de Java

La semaine Devoxx 2011 vient de s'achever. Cette année encore, l'événement a été, de l'avis de tous, hors norme. Les keynotes, conférences et quickies se sont enchaînés à un rythme effréné. C'est donc le moment de prendre un peu de recul et de faire le bilan de trois jours de conférence.

Devoxx, c'est avant tout un événement autour des technologies Java. Utilisant moi-même Java depuis plusieurs années, je décide tout naturellement d'assister à la conférence JDK 7, 8 et 9 (histoire de savoir ce qui m'attend très prochainement).

Pour Java 7, des fonctionnalités prometteuses sont annoncées. Parmi elles, je retiendrai :
  • le multi-catch d'exceptions permettant de traiter en un seul bloc plusieurs types d'exceptions (Ex : IOException | SQLException)
  • la nouvelle API IO pour toutes les opérations d'écriture / lecture de fichiers et flux
  • l'instauration du try-with-resources permettant de gérer plus facilement les exceptions et les fermetures automatiques de ressources (notamment grâce à la création d'une nouvelle interface AutoCloseable)
  • le framework Fork/Join permettant de réaliser enfin facilement des traitements en parallèle

Pour Java 8, deux projets sont à l'honneur : le projet Jigsaw et le projet Lambda. Je suis assez séduite par la présentation de Jigsaw où la notion de modules apparaît. De la même façon que les fichiers "package-info.java" permettent aujourd'hui de décrire le contenu d'un package, les fichiers "module-info.java" permettront demain de recenser pour un module l'ensemble des dépendances nécessaires et leurs versions. L'objectif de ce projet est d'optimiser le chargement des éléments nécessaires au fonctionnement d'une application.
Ce ne sera plus la définition du classpath mais la configuration par module qui permettra d'obtenir des temps de chargement plus rapide et moins gourmand en espace.
Pour Java 9, l'une des grandes fonctionnalités prévue est la possibilité de customiser sa propre JVM. On parle aussi pour cette version de BigData, de réification des Generics et d'amélioration de l'intégration de composants natifs (C++).

Autre style de conférence, celle traitant des "anti-patterns" les plus courants avec Hibernate. La présentation est originale et basée sur des cas d'utilisation concrets. Et c'est aux participants de la salle de voter pour trouver, dans chacun des cas, quel est le nombre et le type de requêtes générées. On prend alors toute la mesure de la difficulté d'avoir un modèle de données métier bien configuré. Le point le plus délicat dans la mise en place d'un modèle est la gestion des associations entre les objets. En fonction du type de chargement et du choix de l'objet utilisé pour représenter une liste, les résultats sont édifiants. Le choix d'une Collection, d'une List ou d'un Set peut paraître à première vue anodin mais il n'en est rien.
Je découvre également le framework Play que je ne connaissais pas. Beaucoup d'enthousiasme pour ce framework d'autant plus que les speakers ont annoncé la sortie de la version 2.0. La démonstration est convaincante. Tout est compilé y compris le fichier de configuration des routes, les fichiers javascript et les feuilles de style. Les erreurs de compilation apparaissent directement dans le navigateur.
Une application Play 2.0 peut être facilement déployée dans le cloud (Elastic Deploiement). C'est la plateforme de cloud Heroku qui est prise pour la démonstration. En quelques commandes et un peu de connaissances GIT, l'application est montée dans le cloud.
Seul bémol de taille pour les utilisateurs courants de Play, la migration de version 1.x vers la version 2.0 n'est pas possible en partie à cause du changement effectué dans la façon d'appréhender les templates.

La productivité des développements a évidemment été abordée à travers des présentations sur la génération de code à partir de modèles et outils. Les différences d'approche entre le projet EMF d'Eclipse et Spring ROO ont été mises en parallèle. Il en ressort que le choix EMF ou Spring ROO n'a pas de réponse simple et unique : des aspects organisationnels et financiers pèseront dans la balance. En tout état de cause, Spring ROO permet de générer très rapidement, depuis des commandes shell, les classes de différentes couches applicatives (DAO, Service, Repository, IHM). Le framework propose pour la génération un large panel de technologies allant de la base de données à la couche IHM (Hibernate, Spring, JPA, JSF2).
Spring ROO propose également de faire du "Reverse Engineering" en créant une application à partir d'une base de données existante.
La productivité apportée par l'outil est évidente. Il faudrait bien entendu regarder en détail le code généré pour bien mesurer sa qualité et les dépendances créées. En tout cas, pour une réalisation de prototype ou une application de "Reverse Engineering", la solution Spring ROO n'est pas à écarter.
Pour terminer, quelques mots sur la conférence "Socializing your Spring Applications". Les applications aujourd'hui ont besoin de récupérer les informations d'un profil Facebook, de récupérer des tweets sur un sujet donné, de récupérer sur FlickR des photos d'un tag particulier... Spring Social est une extension de Spring Framework dont le but est de permettre et faciliter la connectivité avec d'autres systèmes fournisseurs de services. La classe RestTemplate permettait déjà de faire des opérations de ce genre dans différents modes (REST / HTTP) et différents formats (JSON, XML). Spring Social propose désormais des templates spécifiques à chaque fournisseur (TwitterTemplate, LinkedInTemplate...) et propose un mode d'authentification simplifié basé sur le protocole oAuth2 où il n'est plus nécessaire de gérer une politique complexe de token.
Venir à Devoxx, c'est se faire une idée des outils et frameworks de demain. Sortir du quotidien des projets et regarder ce qu'il existe sur le marché permettra de proposer des technologies parfois plus adaptées ou plus productives. Donc si vous avez l'occasion de participer à Devoxx l'année prochaine, surtout n'hésitez pas.