Compte rendu de la soirée Jigsaw

Après les déboires de salles fermées le 19 septembre, nous avons finalement pu assister à la présentation de Paul Sandoz sur Jigsaw le 26 septembre.

Pour ceux qui ne sont pas au courant, Paul Sandoz a quitté CloudBees pour retourner chez Oracle et participe au développement de Jigsaw.

Jigsaw était initialement prévu avec la sortie du JDK 8 mais a été finalement repoussé au JDK 9. Et pour cause, Jigsaw n’est ni plus ni moins que la modularisation statique de la plate-forme Java et le chantier de transformation du JDK est assez ardu. En effet, avec l’évolution et les versions du JDK, des références entre les différents composants dans l’implémentation se sont multipliées, rendant ainsi délicat la séparation du JDK en plusieurs modules. Cette modularisation du JDK va nous permettre de pouvoir embarquer avec nos applications Java uniquement ce dont elles nécessitent, permettant ainsi une plus faible emprunte mémoire et faciliter par ce biais l’adaptation de Java aux plate-formes embarquées (smartphones, tablettes, …)

Non content de vouloir transformer le JDK, c’est aussi tout l’écosystème Java qui va être touché. En effet, avec Jigsaw, la construction de programmes Java prend désormais un nouveau tournant ; il est la rencontre de la partie modulaire de OSGi (sans l’aspect dynamique) et de celle apportée par Maven ; avec Jigsaw, les applications pourront être construites par la constitution d’un ou de plusieurs modules développés pour la circonstance ou récupérés d’un dépôt distant d’un tiers-partie. Les dépendances seront gérées statiquement, ne laissant ainsi pas de surprises désagréables à l’exécution.

Chaque module est décrit par des méta-données fournies par un nouveau fichier, module-info.java, et qui stipulent, entre autre, quels sont les paquetages Java publiés ou quelle est l’entrée principale du programme. Les dépendances entre les composants ne se font donc que par le biais des interfaces ou des classes des paquetages exposés et elles sont résolues à la compilation. Pour ce faire, de nouveaux outils font leur apparition, dédiés à la compilation, à l’exécution, à l’archivage de codes Java et avec eux un nouveau format d’archivage fait aussi son apparition. Inspiré des OBR de OSGi et des dépôts Maven, les modules Java pourront eux aussi être stockés dans des dépôts publiés sur le WEB et être récupérés automatiquement par le compilateur lors de la résolution des dépendances. L’application finale comportera alors non seulement les modules applicatifs mais aussi ceux des bibliothèques desquelles ils dépendent.

Avec Jigsaw, afin de permettre cette modularisation, les classloaders avec leurs hiérarchies sont désormais abandonnées. Le code relatif à ces derniers restent présent pour l’instant mais n’ont plus aucun effet. Toutefois, pour des raisons de compatibilités, mais surtout pour permettre la migration de l’écosystème vers cette nouvelle approche, la construction et l’exécution classique de programme Java (avec les classloaders) seront gardées en parallèle de Jigsaw, mais il faudra choisir l’un des deux modèles au développement de nouveaux logiciels en gardant en tête que l’un des deux modèles sera voué à disparaître à terme.