ArticleApplications & Développement
Java 11 : Les ajouts et suppressions dans la feuille de route
Alors qu'Oracle a annoncé la disponibilité générale du JDK 10 le 21 mars dernier, le JDK 11 pointe déjà son nez, avec une sortie prévue pour septembre prochain, conformément au nouveau calendrier semestriel défini par Oracle pour Java SE.

Pour l’instant, Oracle a confirmé l’ajout de quatre fonctionnalités dans le Java JDK 11, mais d’autres pourraient s’ajouter d’ici là. L’éditeur a aussi entériné la suppression des modules Corba, Java EE (récemment rebaptisé Jakarta EE) et de JavaFX.
À la différence du JDK 10, le JDK 11 est une version LTS (support à long terme) et servira d’implémentation de référence pour l’édition Java standard (Java SE) 11 de la plateforme Java. Le JDK 11 bénéficiera du support de premier niveau d'Oracle jusqu'en septembre 2023 et d’un support étendu avec correctifs et alertes de sécurité, jusqu'en 2026.
Les ajouts attendus
Pour l’instant, Oracle a confirmé l’ajout de quatre fonctionnalités au JDK 11, même si d’autres sont à l'étude.
-
HTTP Client (Standard) : il standardise l’API client HTTP introduite dans le JDK 9 et mise à jour dans le JDK 10. L'API apporte une sémantique demande/réponse non bloquante grâce à la classe CompleteableFutures, qui peut être associée pour déclencher des actions dépendantes. L'implémentation, désormais asynchrone, a été presque complètement réécrite, après incubation dans les JDK 9 et 10. Le concept RX Flow a été introduit dans l’implémentation, rendant inutiles de nombreux concepts personnalisés jusque-là nécessaires pour prendre en charge le HTTP/2. Le flux de données est désormais plus facile à tracer, depuis le niveau utilisateur des éditeurs de demande/réponse jusqu'au socket sous-jacent. Cela réduit la complexité et optimise les options de réutilisation entre HTTP/1 et HTTP/2.
-
Le ramasse-miettes ou « garbage collector » Epsilon, qualifié de ramasseur « no-op », gèrera l'allocation mémoire sans mettre en œuvre de véritables mécanismes de récupération de mémoire. Epsilon pourra servir pour les tests de performance, la pression de la mémoire et l'interface de la machine virtuelle. Il pourra également être utilisé pour des tâches à courte durée de vie.
-
Une syntaxe à variable locale pour les paramètres lambda devrait suivre la syntaxe d'une déclaration de paramètre formelle dans une expression implicitement tapée avec la syntaxe d'une déclaration de variable locale. Cela permettra d'utiliser le mot-clef « var » lors de la déclaration des paramètres formels d'une expression lambda implicitement typée.
-
Le format de fichier de classe Java sera étendu pour prendre en charge une nouvelle forme de pool de constantes, CONSTANT_Dynamic. L'objectif est de réduire les coûts et les ruptures liés à l'élaboration de nouvelles formes de contraintes matérialisables dans les dossiers de classe.
Les fonctions à l'étude
Les développeurs de Java 11 travaillent sur d’autres modifications ou ajouts au JDK 11, notamment :
-
Ajout de chaînes de caractères brutes à Java. Cela faciliterait l'expression des séquences de caractères sous une forme lisible, sans indicateurs Java. Cela simplifierait également l’écriture de chaînes de caractères ciblées pour des langages autres que Java, et de chaînes de caractères couvrant plusieurs lignes de code source sans l’ajout d'indicateurs spéciaux.
-
Extension de l'instruction conditionnelle switch, afin qu'elle puisse être utilisée soit comme instruction, soit comme expression. Cela améliorerait également la manière dont switch gère les nulls. Ces modifications simplifieraient le codage et prépareraient le filtrage par motif dans switch.
-
Le contrôle d'accès basé sur l'imbrication, un concept qui colle avec la notion actuelle de types imbriqués dans Java. Les imbrications permettent aux classes qui font logiquement partie de la même entité de code, mais compilées en fichiers de classes distincts d'accéder aux variables de classes privées de tous les autres sans que les compilateurs aient besoin d’insérer des passerelles pour étendre l'accessibilité.
Les suppressions
Les modules Java EE et Corba sont dépréciés depuis Java SE 9, l'intention d’Oracle étant de les supprimer dans une version ultérieure, et le JDK 11 sera le premier à en bénéficier. Java SE 6, livré en décembre 2006, comprenait une pile complète de services Web pour faciliter le travail des développeurs, dont quatre technologies spécialement conçues pour la plate-forme Java EE : JAX-WS (Java API for XML-based Web Services), JAXB (Java Architecture for XML Binding), JAF (JavaBeans Activation Framework) et Common Annotations for Java. Mais les versions Java EE ont évolué dans le temps, entraînant des complications pour Java SE : ces technologies ne sont plus pertinentes pour Java SE et la maintenance est plus difficile dans les deux éditions Java.
Les technologies Java EE étant disponibles en versions indépendantes sur des sites tiers, Oracle estime qu'il n'est plus nécessaire de les inclure dans Java SE ou dans le JDK. Cependant, certaines applications ne compileront pas ou ne s'exécuteront pas si elles s'appuient sur un support prêt à l'emploi dans le JDK pour les API et les outils Java EE. Des incompatibilités binaires et sources pourraient survenir lors de la migration des JDK 6, 7 ou 8 vers une version ultérieure. Oracle conseille aux développeurs concernés par ces risques de déployer à la place les versions alternatives des technologies Java EE.
La fin de Corba
Aujourd’hui, Oracle estime que Corba, apparu dans les années 1990, apporte peu de chose au développement d'applications Java modernes. De plus, les coûts de maintenance de Corba deviennent rédhibitoires par rapport aux derniers avantages. Mais, la suppression de Corba peut empêcher des implémentations Corba de fonctionner si elles n'incluent qu'un sous-ensemble des API Corba et se reposent sur le JDK pour le reste. Il n'existe pas de version Corba de tierce partie, et il n'est pas certain qu'un tiers puisse prendre en charge la maintenance de l'API Corba.
JavaFX a été supprimé et il n'est plus concerné par le calendrier de mise à jour semestriel de Java JDK.


