Selon un responsable d‘Oracle, le système de modules de Java SE (Standard Edition) 9, attendu pour l'année prochaine, permettra de traiter chaque module comme un composant fondamental et améliorera l'évolutivité et la performance de la plateforme.

Dans un blog, Mark Reinhold, architecte en chef de la plate-forme Java chez Oracle, a exposé les objectifs du système de modules. Selon lui, le plus important est de rendre la configuration fiable en remplaçant le « fragile mécanisme dit des classpaths » par un système de composants permettant de fixer plus précisément les dépendances. L’autre objectif est d’arriver à un niveau élevé d’encapsulation : ainsi, un composant pourra fixer les types de composants publics accessibles à d'autres composants. « Ces fonctions bénéficieront directement aux développeurs d'applications, aux développeurs de bibliothèques et aux concepteurs de la plate-forme Java SE », a-t-il déclaré. « Indirectement, elles permettront de rendre la plateforme évolutive, d’accroître son intégrité, et d'améliorer sa performance ».

Le langage des modules deviendra familier dans quelques années

Selon la définition de Mark Reinhold, un module est un ensemble de code et de données autodécrites. Le code inscrit dans les modules est organisé comme un ensemble de paquets contenant des types, essentiellement des classes et des interfaces. Les données inscrites dans les modules comprennent des ressources et d'autres informations statiques. Même si le système de module comporte de nombreuses facettes, la plupart des développeurs utiliseront toujours les mêmes.

« Nous pensons que dans les années à venir la plupart des développeurs Java seront familiarisés avec le langage des modules, les fichiers JAR, les graphiques, les chemins et les modules sans nom », explique l’architecte. « En revanche, des fonctions plus avancées comme les exportations qualifiées, la meilleure lisibilité, et les couches ne seront utilisées que par un plus petit nombre d’entre eux ».

Projet Jigsaw pour améliorer la sécurité et les performances de Java SE

Les modules de la plate-forme incluront un module de base appelé java.base. On devrait aussi trouver un module java.sql, pour gérer la connectivité de la base de données, un module java.xml pour le traitement XML, et un module java.logging pour l’identification. « Le seul module spécifiquement reconnu par le système est le module de base », a déclaré Mark Reinhold. « Il définit et exporte tous les paquets de base de la plate-forme, y compris le système de module lui-même ». Mais le cœur de ce système modulaire repose sur le Projet Jigsaw, qui permet de rendre Java SE et le Java Development Kit (JDK) plus évolutifs et de les adapter à des appareils plus petits. Un autre objectif du Projet Jigsaw est d’améliorer la sécurité et les performances de Java SE, et du JDK en particulier. Il vise aussi à simplifier la construction et la maintenance des bibliothèques et des grandes applications Java SE et EE.

« Jigsaw marque une étape importante dans l'évolution de Java », estime pour sa part Jeffrey Hammond, analyste de Forrester Research. « La modularité devrait contribuer à améliorer Java, surtout s’il est livré avec un gestionnaire de paquets similaire à npm de Node.js ou à NuGet de .Net », ajoute-t-il. « Cela fait des années que les développeurs s’intéressent à la question des modules. L’Open Services Gateway Initiative (OSGi) a essayé de résoudre le problème de l’extérieur, mais il fallait vraiment ajouter quelque chose dans le langage de base, et c’est ce que Jigsaw permet de faire. À certains égards, le Projet Jigsaw me fait penser au système de paquets très efficace Ada Packages ». Le Projet Jigsaw devait être intégré à Java SE 8, sorti l'année dernière. Mais il a été reporté à Java 9 pour donner aux développeurs plus de temps pour évaluer ce que Mark Reinhold qualifie de « changement profond » dans Java. Récemment, la modularisation a fait l’objet de quelques critiques : certains développeurs reconnus ont été très contrariés d’apprendre que le processus pourrait entrainer l'élimination des API privées, en particulier de sun.misc.Unsafe. Mais Oracle a modifié sa feuille de route pour permettre à quelques API non prises en charge, dont sun.misc.Unsafe, d’être toujours accessibles dans Java 9.