Une journée Devoxx au coeur de Java

Java au programme d’une journée à Devoxx

Il y avait beaucoup d’interventions autour du Big Data et de l’intelligence artificielle cette année.
J’étais présent à la première journée et j’ai choisi un programme entièrement Java Core.

Java 9 sort en juillet, cette version apporte la modularité, et les sujets Java ne manquaient pas. J’ai concentré mon attention sur les fondamentaux, en laissant de côté (au moins pour une journée) les API autres que celles du JDK, les serveurs d’applications, les frameworks comme Spring, même si tous ces sujets ne sont jamais éloignés quand on parle des fondamentaux du développement Java.

Et j’ai approfondi les questions suivantes :
Comment organiser une application Java, notamment Java 9
Comment faire de la programmation fonctionnelle en Java et comment la rendre plus souple
Comment analyser les problèmes mémoire d’une application, et comment comprendre son fonctionnement

Ma journée Devoxx a commencé par une présentation directement au coeur du sujet : La modularité selon Java 9.
Assurée par deux intervenants bien connus du monde Java, Alexis Hassler et Rémi Forax, la conférence donnait une bonne approche de la modularité, à la fois sur un plan théorique et sur un plan pratique, grâce à la complémentarité du binôme.

Outre le changement de nommage du JDK, devenu plus clair, Rémi Forax a surtout bien expliqué les enjeux et les contraintes du projet Jigsaw, qui rend Java modulable après avoir été plusieurs fois repoussé. On partait des bases, la définition, la compilation et le lancement d’une application Java 9 avec le fichier de description module-info.java et le module-path pour aller vers des questions qui vont concerner tous les projets de migration. Notamment comment inclure une dépendance vers une librairie non modularisée. D’où le choix de compromis comme les automatic modules. Le but est d’éviter le saut qu’a représenté le passage de Python 2 à Python 3.
Alexis Hassler mettait en application les explications de Rémi Forax sur un tutoriel en direct illustrant tous les sujets abordés, avec compilation, lancement des modules et des modules de tests, et mettant bien en évidence les différentes erreurs.
On sort de là avec une bonne idée sur la modularité, sur ses avantages, et sur les difficultés auxquelles on doit se préparer.

Après ce regard vers l’avenir, j’ai continué ma journée Java avec un retour sur Java 8, et sur la programmation fonctionnelle. Au cours d’une présentation très dense et très claire, Mathieu Ancelin présentait des cas d’utilisation de la librairie Javaslang. Tout en se félicitant des apports de Java 8 sur la programmation fonctionnelle, il pointait ses manques : une classe Optional non sérialisable et non itérable, des API pas encore au point, notamment CompletableFuture, l’absence de tuple. Pour un utilisateur de Scala notamment, ça reste frustrant. D’où l’utilisation de la librairie Javaslang qui rend plus simple et plus souple la programmation fonctionnelle en Java.

Sa présentation consistait à refactorer devant nous avec Javaslang une classe écrite en Java 8, et couvrant tous les aspects du sujet, Optional, streams, CompletableFuture. A retenir notamment :
– des instances de collections immutables plus faciles à créer, de type List et Map notamment, avec en plus une classe Lazy pour différer l’instantiation
– des classes représentant des conditions, comme Try ou Either, venant enrichir la programmation fonctionnelle
– des améliorations de CompletableFuture comme les classes Promise et Future, permettant de distinguer le pilotage et le déclenchement de l’action, Promise, et le résultat, Future
Cette présentation rondement menée et efficace donne envie d’utiliser Javaslang. La librairie offre des améliorations que j’ai déjà vues implémentées de façon isolée par plusieurs clients, et d’autres plus pratiques encore. On pense aussi à Guava bien sûr, ou à la librairie Strata réalisée par OpenGamma dans une optique métier plus précise.

Cette journée aux fondamentaux de Java se continuait avec une présentation de Jean Bisutti sur les outils permettant de diagnostiquer des soucis de mémoire.
Un bon rappel sur les paramètres JVM, l’analyse du garbage collector (GCViewer), la création et l’analyse d’un heap dump (jmap, jcmd en Java 9, Memory Analyzer).
La présentation se terminait sur Java Mission Control, disponible depuis Java 7, et gratuit hors production, un profiler avec un faible impact sur la mémoire.

Enfin, pour compléter les différents sujets Java de la journée, j’ai écouté la présentation d’un outil d’analyse de la structure et du comportement d’une application. Il a été fait en deux ans par deux développeurs, Yoann Buch et Yiquan Zhou, ayant été confrontés à un problème que la plupart des auditeurs ont rencontré un jour ou l’autre : devoir analyser une application qu’on ne connaît pas, sans documentation. Ils présentaient eux-mêmes leur outil, Flow.

Un outil gratuit, lancé par un agent Java grâce à un plugin IntelliJ, permettant de prendre de la hauteur pour analyser une application, et venant en complément d’une analyse par le debugger. Toutes les entrées de méthodes sont enregistrées et restituées dans une application web avec deux vues très fluides et interactives : un graphe des appels de méthodes, et une vue temporelle des appels. La prise en main est rapide et donne envie de tester l’outil.

Ma journée à Devoxx s’est terminée là-dessus. Un programme complet autour de Java qui donne envie d’autres découvertes. Il y avait de nombreuses interventions encore, notamment sur Java 9 qui est très attendu, ce qui indique que Java reste incontournable.
Tout comme Devoxx ! La conférence s’appuie sur une très bonne organisation, un staff toujours disponible, dans une ambiance détendue et studieuse, avec des rencontres et des échanges.