From ff05902c4ba7c5a16087265b29ff9cba577b372f Mon Sep 17 00:00:00 2001 From: Jean-Michel Doudoux <144702096+jmdoudoux-sciam@users.noreply.github.com> Date: Tue, 5 Nov 2024 17:58:19 +0100 Subject: [PATCH] Article/nouveautes jdk 23 partie 3 (#110) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Antoine Sabot-Durand Co-authored-by: Clément de Tastes --- ...2024-11-05-nouveautes-java-23-partie3.adoc | 544 ++++++++++++++++++ images/nouveautes-java-23-partie3-001.png | Bin 0 -> 10866 bytes images/nouveautes-java-23-partie3-002.png | Bin 0 -> 60066 bytes images/nouveautes-java-23-partie3-003.png | Bin 0 -> 15421 bytes 4 files changed, 544 insertions(+) create mode 100644 _posts/2024-11-05-nouveautes-java-23-partie3.adoc create mode 100644 images/nouveautes-java-23-partie3-001.png create mode 100644 images/nouveautes-java-23-partie3-002.png create mode 100644 images/nouveautes-java-23-partie3-003.png diff --git a/_posts/2024-11-05-nouveautes-java-23-partie3.adoc b/_posts/2024-11-05-nouveautes-java-23-partie3.adoc new file mode 100644 index 00000000..48148afe --- /dev/null +++ b/_posts/2024-11-05-nouveautes-java-23-partie3.adoc @@ -0,0 +1,544 @@ += Les nouveautés de Java 23 : partie 3 +:showtitle: +:page-navtitle: Les nouveautés de Java 23 : partie 3 +:page-excerpt: Ce troisième article est consacré aux évolutions dans JVM Hotspot, dans les outils, les API et dans la sécurité. +:layout: post +:author: jeanmicheldoudoux +:page-tags: [Java, Java 23, Projet Amber, Projet Panama, Projet Loom] +:page-vignette: java-23.png +:page-liquid: +:page-categories: software news + +Le premier article de cette série a détaillé les fonctionnalités proposées via des JEPS relatives à la syntaxe et aux API dans le JDK 23. +Comme pour les précédentes versions de Java, cette version 23 inclut des JEPs, mais aussi, et surtout, des évolutions et des améliorations sur la fiabilité (corrections de nombreux bugs), l’outillage, la performance et la sécurité. + +Le second article a détaillé les autres évolutions dans les API ainsi que les fonctionnalités dépréciées et retirées. + +Ce troisième article est consacré aux évolutions dans la JVM HotSpot, dans les outils et dans la sécurité. + + +== Les évolutions dans la JVM HotSpot + +Une seule JEP concerne des évolutions dans la JVM : + +* JEP 474 : https://openjdk.org/jeps/474[ZGC: Generational Mode by Default] + +Mais plusieurs autres évolutions sont proposées dans la JVM Hotspot. + +=== La JEP 474 : le mode générationnel par défaut dans ZGC + +ZGC (Z Garbage Collector) est un ramasse-miettes hautement scalable et à faible latence introduit dans la JVM Hotspot de Java 11 à titre expérimental et garanti pour une utilisation en production à partir de Java 15. + +Son objectif principal est de gérer des heaps de très grande taille (jusqu’à 16 téraoctets) avec un impact minimal sur les performances des applications, en se concentrant particulièrement sur un temps de pause inférieur à la milliseconde. + +Le mode générationnel pour Z Garbage Collector a été introduit dans le JDK 21 via la https://openjdk.org/jeps/439[JEP 439]. Avant cela, ZGC gérait tous les objets dans un même ensemble. + +Avec le mode générationnel, ZGC gère deux générations séparées : une pour les objets jeunes et une pour les objets anciens, ce qui implique qu’elle peut récupérer les objets jeunes plus fréquemment. Ainsi, la surcharge du processeur est plus faible et la quantité de mémoire libérée est plus importante et plus rapidement. + +La https://openjdk.org/jeps/474[JEP 474] définit le mode générationnel comme utilisé par défaut pour ZGC : la valeur par défaut de l’option `ZGenerational` passe donc de `false` à `true`. + +Le mode non générationnel, qui est généralement moins bon que le mode générationnel dans la plupart des cas, est déclaré comme déprécié dans cette version et sera supprimé dans une version future. + +Avec ces modifications, le comportement suivant sera observé en fonction des arguments de ligne de commande fournis : + +* `-XX:+UseZGC` +** Le mode générationnel de ZGC est utilisé +* `-XX:+UseZGC -XX:+ZGenerational` + +** Le mode générationnel de ZGC est utilisé. Un avertissement indiquant que l’option `ZGenerational` est dépréciée et sera supprimée dans une future version est émis ++ +[source,plain] +---- +C:\java>java -XX:+UseZGC -XX:+ZGenerational HelloWorld +OpenJDK 64-Bit Server VM warning: Option ZGenerational was deprecated in version 23.0 and will likely be removed in a future release. +Hello World +---- +* `-XX:+UseZGC -XX:-ZGenerational` + +** Le mode non générationnel de ZGC est utilisé. Un avertissement indiquant que l’option `ZGenerational` est dépréciée et sera supprimée dans une future version est émis. Un avertissement indiquant que le mode non générationnel est déprécié. ++ +[source,plain] +---- +C:\java>java -XX:+UseZGC -XX:+ZGenerational HelloWorld +OpenJDK 64-Bit Server VM warning: Option ZGenerational was deprecated in version 23.0 and will likely be removed in a future release. +Hello World +---- + +Cette évolution peut induire des impacts sur les applications existantes utilisant ZGC : + +* Les JVM qui utilisaient ZGC et qui basculent vers ZGC générationnel peuvent rencontrer des différences dans la sortie des journaux et dans les données disponibles à partir des API de maintenance et de gestion +* ZGC générationnel se comporte différemment du ZGC non générationnel. Le principal risque que cela présente est que certaines applications qui sont non générationnelles par nature pourraient subir une légère dégradation des performances. Cette situation devrait être rare + +=== Le nouvel événement JFR `jdk.SerializationMisdeclaration` (https://bugs.openjdk.org/browse/JDK-8275338[JDK-8275338]) + +Un nouvel événement JFR est ajouté dans le JDK 23 : `jdk.SerializationMisdeclaration`. + +Cet événement est émis à l’exécution lorsqu’un aspect des champs et méthodes liés à la sérialisation est mal déclaré. En activant l’événement `jdk.SerializationMisdeclaration`, un événement JFR sera émis pour chaque aspect incorrectement déclaré d’une classe `Serializable` lorsqu’elle est chargée dans la JVM. + +Par exemple, si la méthode `writeObject()` d’une classe `Serializable` a une signature correcte, mais est déclarée publique par inadvertance, elle n’est pas utilisée par le mécanisme de sérialisation. +Cela pourrait surprendre le développeur de la classe. Pour aider à diagnostiquer de tels problèmes, l’événement `jdk.SerializationMisdeclaration` peut être activé. +Exemple : + +.le fichier User.java +[source,java] +---- +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +public class User implements Serializable { + + private static final long serialVersionUID = -8980564301845020399L; + + private String nom; + private String prenom; + + public User(String nom, String prenom) { + this.nom = nom; + this.prenom = prenom; + } + + public User() { + } + + private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException { + nom = aInputStream.readUTF(); + prenom = aInputStream.readUTF(); + } + + public void writeObject(ObjectOutputStream aOutputStream) throws IOException { + aOutputStream.writeUTF(nom); + aOutputStream.writeUTF(prenom); + } + + public static void main(String[] args) { + User user = new User("Dupond", "Martin"); + + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("User.ser"))) { + oos.writeObject(user); + } catch (IOException i) { + i.printStackTrace(); + } + } +} +---- + +Les événements `jdk.SerializationMisdeclaration` doivent être activés. +Le profil par défaut `default.jfc` n’active pas ces événements, contrairement au profil `profile.jfc`. + +Le code ci-dessus peut être compilé et exécuté avec une activation de JFR avec le profil `profile` enregistré dans un fichier `user.jfr`. +Ce fichier contient un événement de type `jdk.SerializationMisdeclaration` + +[source,plain] +---- +C:\java>javac User.java + +C:\java>java -XX:StartFlightRecording=settings=profile,disk=false,dumponexit=true,duration=60s,filename=user.jfr User +[0.444s][info][jfr,startup] Started recording 1. The result will be written to: +[0.444s][info][jfr,startup] +[0.444s][info][jfr,startup] C:\java\user.jfr + +C:\java>jfr print --events jdk.SerializationMisdeclaration user.jfr +jdk.SerializationMisdeclaration { + startTime = 20:17:15.319 (2024-09-30) + misdeclaredClass = User (classLoader = app) + message = "method public void User.writeObject(java.io.ObjectOutputStream) throws java.io.IOException must be private" +} +---- + +=== Le nouvel algorithme lors de Full GC pour Parallel GC (https://bugs.openjdk.org/browse/JDK-8329203[JDK-8329203]) + +L’algorithme précédent consistait en trois passages par chaque objet actif dans le heap de la JVM : + +[arabic] +. Marquage d’objets utilisés +. Calcul de nouveaux emplacements pour chaque objet vivant + +. Déplacement d’objets vers de nouveaux emplacements et mise à jour des champs de chaque objet + +Les emplacements des objets calculés à l’étape 2 sont stockés à l’aide de mémoire off heap pour éviter un quatrième passage pour parcourir les objets utilisés dans le heap. + +Le problème est que ce schéma ne s’adapte pas bien à certaines typologies d’application. De plus, cette structure de données utilise 1,5 % du heap Java dans la mémoire off heap. + +L’algorithme Full GC du ramasse-miettes Parallel GC a été réimplémenté pour utiliser un algorithme parallèle plus classique Mark-Sweep-Compact : il utilise désormais le même algorithme de full GC que celui des ramasse-miettes Serial et G1. + +Le nouvel algorithme fonctionne nettement mieux pour les typologies d’applications problématiques et n’a pas besoin de mémoire supplémentaire, ce qui réduit l’empreinte mémoire. Il permet ainsi d’optimiser les performances dans certains cas spécifiques, en réduisant l’utilisation du heap de 1,5 % lors de l’utilisation de Parallel GC. + +=== Le Parallel GC lève une `OutOfMemoryException` avant que le heap ne soit complètement étendu (https://bugs.openjdk.org/browse/JDK-8328744[JDK-8328744]) + +Un bug existant peut avoir empêché l’utilisation complète du heap de la JVM alloué avec l’option en ligne de commande -Xmx. Ce bug a été corrigé. + +En tant qu’effet de bord de ce correctif, les JVM peuvent rencontrer une utilisation accrue du heap lors de l’utilisation de Parallel GC. Les utilisateurs doivent, si nécessaire, ajuster la taille maximale du heap. + +=== Le changement de la valeur de `LockingMode` de `LM_LEGACY` à `LM_LIGHTWEIGHT` (https://bugs.openjdk.org/browse/JDK-8319251[JDK-8319251]) + +Un nouveau mécanisme de verrouillage léger pour le verrouillage du moniteur d’objets a été introduit dans le JDK 21 (https://bugs.openjdk.org/browse/JDK-8291555[JDK-8291555]). + +L’option `LockingMode` de la JVM a été introduite pour permettre la sélection de ce nouveau mécanisme (`LM_LIGHTWEIGHT`, valeur `2`) à la place du mécanisme par défaut (`LM_LEGACY`, valeur `1`). + + +Dans le JDK 23, la valeur par défaut de `LockingMode` a été remplacée par `LM_LIGHTWEIGHT`. Cela ne devrait pas modifier le comportement sémantique du verrouillage du moniteur Java. Il devrait être neutre en termes de performances pour presque toutes les applications. + +Il est possible de revenir au mécanisme historique, en utilisant l’option en ligne de commande `-XX:LockingMode=1`, mais il faut tenir compte que le mode historique devrait être supprimé dans une version future. + + +=== L’assouplissement de l’alignement des tableaux (https://bugs.openjdk.org/browse/JDK-8139457[JDK-8139457]) + +Les bases des éléments de tableau ne sont plus alignées inconditionnellement sur huit octets. +Au lieu de cela, ils sont désormais alignés sur la taille de leur type d’élément. +Cela améliore l’empreinte mémoire dans certains modes de la JVM. +Comme l’alignement des éléments de tableau Java n’est pas exposé aux utilisateurs, il n’y a aucun impact sur le code Java standard qui accède aux éléments individuels. + +Par contre, ce changement a des implications sur les méthodes d’accès de bas niveau. +Les accès non sécurisés aux tableaux pourraient désormais être non-alignés. +Par exemple, il n’est pas garanti que le fonctionnement de `Unsafe.getLong(byteArray, BYTE_ARRAY_BASE_OFFSET + 0)` soit effectué sur des plates-formes qui n’autorisent pas les accès non-alignés. + +Une solution de contournement est l’utilisation des méthodes `Unsafe.[get|put]Unaligned*`. Les API `ByteBuffer` et `VarHandle` qui autorisent les vues de `byte[]` sont mises à jour pour refléter cette modification (https://bugs.openjdk.org/browse/JDK-8318966[JDK-8318966]). +Les tableaux obtenus via `GetPrimitiveArrayCritical()` ne doivent pas être exploités sous l’hypothèse d’un alignement de base de tableau particulier. + +=== L'option `TrimNativeHeapInterval` de la JVM Hotspot n’est plus expérimentale (https://bugs.openjdk.org/browse/JDK-8325496[JDK-8325496]) + +L’option `TrimNativeHeapInterval` permet à la JVM de réduire le heap natif à intervalles réguliers. + +La syntaxe de cette option est de la forme : `-XX:TrimNativeHeapInterval=__millis__` + +La valeur, précisée en ms, indique l’intervalle auquel la JVM réduira le heap natif. +Des valeurs plus faibles récupéreront de la mémoire plus rapidement au prix d’une surcharge plus élevée. +La valeur `0` (par défaut) désactive la réduction du heap natif. +La réduction du heap natif est effectuée dans un thread dédié. + +Cette option, qui était une option expérimentale, a été officiellement promue en tant qu’option produit. + +Cette option n’est disponible que sur Linux avec GNU C Library (glibc). + +[source,plain] +---- +C:\java>java -XX:TrimNativeHeapInterval=1000 Main +[0.032s][warning][trimnative] Native heap trim is not supported on this platform +---- + +== Les évolutions dans l’outillage + +Plusieurs améliorations sont apportées à des outils fournis dans le JDK. + +=== La modification de la politique de traitement des annotations par défaut de javac (https://bugs.openjdk.org/browse/JDK-8321314[JDK-8321314]) + +Les annotations peuvent être traitées lors de la compilation, où `javac` analyse les fichiers sources à compiler à la recherche d’annotations, puis le classpath pour trouver les processeurs d’annotations correspondants, afin qu’ils puissent générer du code source. + +Jusqu’au JDK 22, cette fonctionnalité était activée par défaut, ce qui était peut-être raisonnable lorsqu’elle a été introduite dans le JDK 6 vers 2006, mais d’un point de vue actuel, dans le but de rendre la sortie de construction plus robuste contre les processeurs d’annotations placés dans le classpath par inadvertance, c’est beaucoup moins raisonnable. + +Jusqu’au JDK 22 inclus, le code qui nécessite un traitement des annotations avant la compilation pouvaient s’appuyer sur le comportement par défaut de `javac` pour traiter les annotations, mais ce n’est plus le cas. + +À partir du JDK 23, l’option `-proc:` a été enrichie : `` peut maintenant avoir les valeurs suivantes : + +* `none` : compilation sans traitement d’annotation. Cette politique existe depuis le JDK 6 +* `only` : traitement des annotations sans compilation. Cette politique existe depuis le JDK 6 +* `full` : traitement des annotations suivi de la compilation. Cette politique est la valeur par défaut dans les JDK ≤ 22, mais la valeur elle-même est nouvelle + +Par conséquent, à partir du JDK 23, `javac` nécessite une option de ligne de commande supplémentaire pour activer le traitement des annotations. +Le traitement des annotations n’est exécuté qu’avec une configuration explicite de ce traitement ou avec une demande explicite d’exécution du traitement des annotations sur la ligne de commande `javac`. +Si ni `-processor`, ni `--processor-path` ni `--processor-module-path` n’est utilisé, `-proc:only` ou `-proc:full` doit être utilisé. +En d’autres termes, en l’absence d’autres options de ligne de commande, `-proc:none` est la valeur par défaut dans le JDK 23. + +Il s’agit d’un changement de comportement par rapport à la valeur par défaut existante qui consiste à chercher un traitement d’annotations en recherchant des processeurs dans le classpath sans qu’aucune option explicite liée au traitement d’annotation ne doive être présente. + +Ainsi les utilisations de `javac` qui doivent traiter des annotations sans aucune configuration explicite de ces traitements devront être mis à jour pour continuer à exécuter les processeurs d’annotations. Dans les JDK 21 et 22, `javac` affiche une note identifiant ces appels. + +Pour conserver l’ancien comportement, l’option `-proc:full` peut être passé à `javac`. La prise en charge de `-proc:full` a été rétroportée dans plusieurs mises à jour de versions LTS antérieures. + +Avec Maven, il est possible d’utiliser la propriété `maven.compiler.proc` pour préciser le comportement : `-Dmaven.compiler.proc=full` dans l’option en ligne de commande. + +Plusieurs mesures ont été prises pour aider les projets à se préparer au passage à `-proc:full`. + +* Depuis les mises à jour de sécurité du JDK d’avril 2024, la prise en charge de `-proc:full` a été rétroportée dans les versions 17.0.11 et 11.0.23 pour les distributions JDK et OpenJDK d’Oracle +* De plus, la version 8u411 d’Oracle prend également en charge `-proc:full`. Avec `-proc:full` rétroporté, il est possible de configurer une compilation qui fonctionnera de la même manière avant et après le changement de la politique par défaut de `javac` +* À partir du JDK 21, `javac` affiche un message d’information si l’utilisation implicite du traitement des annotations dans le cadre de la politique par défaut est détectée + +=== Le nouvel avertissement dangling-doc-comments de -Xlint (https://bugs.openjdk.org/browse/JDK-8303689[JDK-8303689]) + +Un nouvel avertissement nommé `dangling-doc-comments` est fourni pour l’option `-Xlint` de `javac`, afin de détecter les problèmes liés au placement des commentaires de documentation dans le code source. + +Cet avertissement peut être spécifié explicitement (par exemple, `-Xlint:dangling-doc-comments`) ou implicitement en activant toutes sous-options (par exemple, `-Xlint` ou `-Xlint:all`). + +Lorsque l’avertissement est activé, `javac` signale tout commentaire de documentation inattendu ou mal placé à proximité d’une déclaration, comme dans les situations suivantes : + +* un commentaire de documentation pour une classe de niveau supérieur avant la déclaration du package ou d’importations +* un commentaire de documentation pour une déclaration qui apparaît après le premier élément de cette déclaration, par exemple après des annotations ou des modificateurs de la déclaration +* tout commentaire supplémentaire de documentation avant une déclaration, que `javac` ignorerait autrement + +.le fichier MaClasse.java +[source,java] +---- +/** + * Un commentaire de documentation mal placé + */ + +import java.util.*; + +public class MaClasse { + + public static void main(String[] args) { + System.out.println("Bonjour"); + } + + @Override + /** + * Un second commentaire de documentation mal placé + */ + public String toString() { + return "MaClasse"; + } +} +---- + +La compilation de cette classe avec tous les avertissements activés affiche deux avertissements de type `dangling-doc-comments`. + +[source,plain] +---- +C:\java>javac -Xlint:all MaClasse.java +MaClasse.java:1: warning: [dangling-doc-comments] documentation comment is not attached to any declaration + /** + ^ +MaClasse.java:14: warning: [dangling-doc-comments] documentation comment is not attached to any declaration + /** + ^ +2 warnings +---- + +Comme pour toute sous-option pour `-Xlint`, les avertissements peuvent être supprimés localement, en utilisant l’annotation `@SuppressWarnings` sur une déclaration englobante, en spécifiant les noms des sous-options pour les avertissements à supprimer. + +.le fichier MaClasse.java +[source,java] +---- +/** + * Un commentaire de documentation mal placé + */ + +import java.util.*; +@SuppressWarnings("dangling-doc-comments") +public class MaClasse { + + public static void main(String[] args) { + System.out.println("Bonjour"); + } + + @Override + /** + * Un second commentaire de documentation mal placé + */ + public String toString() { + return "MaClasse"; + } +} +---- + +La compilation de cette classe avec tous les avertissements activés n’affiche aucun avertissement puisque les avertissements de type `dangling-doc-comments` ont été supprimés au niveau de la classe. + +[source,plain] +---- +C:\java>javac -Xlint:all MaClasse.java + +C:\java> +---- + +Remarque : il est possible que lorsque l’avertissement est activé, `javac` signale des « faux positifs » s’il y a des commentaires décoratifs commençant par `/**` et peuvent donc ressembler à un commentaire de documentation. Par exemple, les commentaires qui utilisent une ligne d’astérisques avant et après le reste du texte du commentaire, pour aider à faire ressortir le commentaire. La solution dans de tels cas est de changer le commentaire de sorte qu’il ne commence pas par `/**`, par exemple en changeant au moins un des deux astérisques en un autre caractère. + +=== Le support des modules JavaScript par l’outil `javadoc` (https://bugs.openjdk.org/browse/JDK-8317621[JDK-8317621]) + +L’option `--add-script` de l'outil `javadoc` prend désormais en charge les modules JavaScript en plus des fichiers de script conventionnels. Les modules sont détectés automatiquement en inspectant l’extension ou le contenu du fichier passé en argument d’option. + +=== L'amélioration de la navigation structurelle dans la documentation `javadoc` (https://bugs.openjdk.org/browse/JDK-8320458[JDK-8320458]) + +La documentation de l’API générée par le doclet standard est désormais dotée de fonctionnalités de navigation améliorées, notamment une barre latérale contenant une table des matières pour la page actuelle et un fil d’Ariane pour l’élément d’API actuel dans l’en-tête de la page. + +image:nouveautes-java-23-partie3-001.png[barre latérale javadoc,width=498,height=330] + +Dans la documentation des classes et des interfaces, les entrées de la table des matières peuvent être filtrées à l’aide d’un champ de saisie de texte en haut de la barre latérale. + +image:nouveautes-java-23-partie3-002.png[barre latérale javadoc,width=605,height=209] + +Un bouton situé en bas de la barre latérale permet de réduire ou de développer la table des matières pour la page en cours. + +image:nouveautes-java-23-partie3-003.png[barre latérale javadoc,width=476,height=708] + +=== La vérification des classes par `javap` (https://bugs.openjdk.org/browse/JDK-8182774[JDK-8182774]) + +La nouvelle option `-verify` de l’outil `javap` affiche des informations supplémentaires sur la vérification du bytecode de classe. + +== Les évolutions relatives à la sécurité + +Il y a plusieurs mises à jour des certificats racines de deux fournisseurs dans le truststore cacerts. + +Certaines fonctionnalités renforcent la sécurité sur des points précis. + +=== Les mises à jour de certificats racines dans le truststore cacerts (*https://bugs.openjdk.org/browse/JDK-8316138[JDK-8316138]* et https://bugs.openjdk.org/browse/JDK-8321408[JDK-8321408]) + +Quatre certificats racines ont été ajoutés dans le truststore cacerts : + +* GlobalSign R46 et E46 +* Certainly R1 et E1 + +=== La méthode `Subject.getSubject()` requiert la propriété `java.security.manager` avec la valeur 'allow' (https://bugs.openjdk.org/browse/JDK-8296244[JDK-8296244]) + +En prévision de la suppression du Security Manager dans une version ultérieure, la méthode `Subject.getSubject(AccessControlContext)`, dépréciée pour suppression, a été modifiée pour lever une exception de type `UnsupportedOperationException` si elle est appelée lorsqu’un Security Manager n’est pas permis. + + +Lorsque le Security Manager sera supprimé dans une version ultérieure, la méthode `Subject.getSubject(AccessControlContext)` sera encore modifiée pour lever une exception de type `UnsupportedOperationException` de manière inconditionnelle. + +Pour cette version 23 du JDK, le comportement est différent selon qu’un Security Manager est autorisé ou non : + + +* Si un gestionnaire de sécurité est autorisé, c’est-à-dire que la propriété système `java.security.manager` est définie sur la ligne de commande avec une chaîne vide, un nom de classe ou la valeur `allow`, il n’y a pas de changement de comportement par rapport aux versions précédentes. +* Si un gestionnaire de sécurité n’est pas autorisé, si la propriété système `java.security.manager` n’est pas définie sur la ligne de commande ou a été définie sur la ligne de commande avec la valeur `disallow`, les méthodes `doAs()` ou `callAs()` appellent une action avec un `Subject` comme `Subject` actuel pour l’exécution de l’action sur une période limitée. +Le `Subject` peut être obtenu à l’aide de la méthode `Subject.current()` lorsqu’il est appelé par le code exécuté par l’action. La méthode `Subject.getSubject()` ne peut pas obtenir le `Subject`, car cette méthode lève une exception de type `UnsupportedOperationException`. +L’objet n’est pas hérité automatiquement lors de la création ou du démarrage de nouveaux threads avec l’API Thread. +L’objet est hérité par les threads enfants lors de l’utilisation de la concurrence structurée. + +La solution de contournement temporaire dans cette version pour maintenir le code plus ancien fonctionnel consiste à utiliser l’option `-Djava.security.manager=allow` pour permettre la définition d’un Security Manager. La méthode `Subject.getSubject()` ne définit pas de Security Manager, mais exige que la fonctionnalité soit autorisée en raison du paramètre `AccessControlContext`. + +La migration du code utilisant `Subject.doAs()` et `Subject.getSubject()` est fortement encouragée vers les API de remplacement, `Subject.callAs()` et `Subject.current()`, dès que possible. +L’outil `jdeprscan` peut être utilisé pour analyser le classpath à la recherche d’utilisations d’API obsolètes et peut être utile pour trouver l’utilisation de ces deux méthodes. + +Le code qui stocke un `Subject` dans un `AccessControlContext` et appelle `AccessController.doPrivileged()` avec ce contexte doit également être migré dès que possible, car ce code cessera de fonctionner lorsque le Security Manager sera supprimé. + +Les mainteneurs de code qui utilise l’API `Subject` doivent également auditer leur code pour tous les cas où il peut dépendre de l’héritage du `Subject` actuel dans les threads nouvellement créés. +Ce code doit être modifié pour transmettre le sujet au thread nouvellement créé ou modifié pour utiliser la concurrence structurée. + +=== Le changement de comportement des méthodes `RandomGeneratorFactory.create(long)` et `create(byte[])` (https://bugs.openjdk.org/browse/JDK-8332476[JDK-8332476]) + +Dans les versions précédentes du JDK, `RandomGeneratorFactory.create(long)` utilise comme solution de fall back l’invocation de la méthode `create()` sans argument si l’algorithme sous-jacent ne prend pas en charge une graine (seed) longue. La méthode `create(byte[])` fonctionne de la même manière. + +À partir de cette version, ces méthodes lèvent désormais une exception `UnsupportedOperationException` plutôt que d’utiliser silencieusement `create()`. + +=== Le support pour le Keystore KeychainStore-ROOT (https://bugs.openjdk.org/browse/JDK-8320362[JDK-8320362]) + +L’utilisation de la classe `HttpsURLConnection` pour se connecter à l’url https://github.com échoue avec l’utilisation du trustStore KeychainStore de MacOS : + +[source,plain] +---- +java -Djavax.net.ssl.trustStoreType=KeychainStore DemoHttpsURLConnection https://github.com + +SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target +---- + +Cela se produit parce que le KeychainStore ne contient pas les certificats d’autorité de certification intermédiaire requis et que le fournisseur d’Apple ne renvoie pas de certificats racines. + +Le « KeychainStore » du fournisseur Apple prend désormais en charge deux types de keystores : + +* « KeychainStore » : contient les clés privées et les certificats pour le trousseau actuel de l’utilisateur +* « KeychainStore-ROOT » : contient les certificats du trousseau de certificats racine du système + +=== Les options `thread` et `timestamp` de la propriété `java.security.debug` (https://bugs.openjdk.org/browse/JDK-8051959[JDK-8051959]) + +La propriété système `java.security.debug` accepte désormais des arguments qui ajoutent l’ID du thread, le nom du thread, les informations de l’appelant et les informations d’horodatage aux instructions de débogage pour tous les composants ou un composant spécifique. + +`+timestamp` peut être ajouté aux options de débogage pour afficher un horodatage pour cette option de débogage + +`+thread` peut être ajouté aux options de débogage pour afficher les informations sur le thread et l’appelant pour cette option de débogage + +Exemples : + +* `-Djava.security.debug=all+timestamp+thread` ajoute des informations d’horodatage et de thread à chaque instruction debug générée. + +* `-Djava.security.debug=properties+timestamp` ajoute des informations d’horodatage à chaque instruction de débogage générée pour le composant properties. + +Il est possible d’utiliser l’option `-Djava.security.debug=help` pour afficher une liste complète des composants et arguments pris en charge. + +[source,plain] +---- +C:\java>java -Djava.security.debug=help Main + +all turn on all debugging +access print all checkPermission results +certpath PKIX CertPathBuilder and + CertPathValidator debugging +combiner SubjectDomainCombiner debugging +gssloginconfig + GSS LoginConfigImpl debugging +configfile JAAS ConfigFile loading +configparser JAAS ConfigFile parsing +jar jar verification +logincontext login context results +jca JCA engine class debugging +keystore KeyStore debugging +pcsc Smartcard library debugging +policy loading and granting +provider security provider debugging +pkcs11 PKCS11 session manager debugging +pkcs11keystore + PKCS11 KeyStore debugging +pkcs12 PKCS12 KeyStore debugging +properties Security property and configuration file debugging +sunpkcs11 SunPKCS11 provider debugging +scl permissions SecureClassLoader assigns +securerandom SecureRandom +ts timestamping +x509 X.509 certificate debugging + ++timestamp can be appended to any of above options to print + a timestamp for that debug option ++thread can be appended to any of above options to print + thread and caller information for that debug option + +The following can be used with access: + +stack include stack trace +domain dump all domains in context +failure before throwing exception, dump stack + and domain that didn't have permission + +The following can be used with stack and domain: + +permission= + only dump output if specified permission + is being checked +codebase= + only dump output if specified codebase + is being checked + +The following can be used with provider: + +engine= + only dump output for the specified list + of JCA engines. Supported values: + Cipher, KeyAgreement, KeyGenerator, + KeyPairGenerator, KeyStore, Mac, + MessageDigest, SecureRandom, Signature. + +The following can be used with certpath: + +ocsp dump the OCSP protocol exchanges +verbose verbose debugging + +The following can be used with x509: + +ava embed non-printable/non-escaped characters in AVA components as hex strings + +Note: Separate multiple options with a comma +---- + +=== La possiblité d'une vérification sensible à la casse dans ccache et keytab lors de la recherche d’entrée Kerberos (https://bugs.openjdk.org/browse/JDK-8331975[JDK-8331975]) + +Lors de la recherche d’une entrée keytab ou d’un cache d’informations d’identification (ccache) pour un Principal dans Kerberos, le nom du Principal est comparé au nom de l’entrée d’une manière non sensible à la casse. +Toutefois, de nombreuses implémentations Kerberos traitent les noms de Principal comme sensibles à la casse. +Par conséquent, si deux Principal ont des noms qui ne diffèrent que par la casse, il existe un risque de sélectionner le mauvais keytab ou l’entrée ccache. + +Une nouvelle propriété de sécurité nommée `jdk.security.krb5.name.case.sensitive` est introduite pour contrôler la comparaison des noms. +Si cette propriété vaut `true`, alors la comparaison des noms de Principal lors de la recherche d’entrée keytab et ccache sera sensible à la casse. +La valeur par défaut est `false` pour garantir la compatibilité descendante. + +De plus, si une propriété système portant le même nom est spécifiée, elle remplacera la valeur de la propriété de sécurité définie dans le fichier `java.security`. + +== Conclusion + +Java poursuit son évolution avec le JDK 23 qui propose beaucoup de nouveautés et d’améliorations qui vont permettre à Java de rester pertinent aujourd’hui et demain. + +Ce troisième article de cette série est consacré aux évolutions dans JVM Hotspot, dans les outils, les API et dans la sécurité. + +Il y a notamment un gros changement sur le comportement par défaut du ramasse-miettes Z (ZGC) et que les développeurs doivent se préparer à la suppression des méthodes d’accès à la mémoire de la classe `sun.misc.Unsafe`. + +Toutes les évolutions proposées dans le JDK 23 sont détaillées dans les https://jdk.java.net/23/release-notes[releases notes]. + +N’hésitez donc pas à télécharger et tester une distribution du JDK 23 auprès d’un fournisseur pour anticiper la release de la prochaine version LTS de Java. \ No newline at end of file diff --git a/images/nouveautes-java-23-partie3-001.png b/images/nouveautes-java-23-partie3-001.png new file mode 100644 index 0000000000000000000000000000000000000000..7b80197e90bdcaea2a11da4559d5d04981b5f529 GIT binary patch literal 10866 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 UnsAnPKNPrZY<{ukykqqL0%NLiGynhq literal 0 HcmV?d00001 diff --git a/images/nouveautes-java-23-partie3-002.png b/images/nouveautes-java-23-partie3-002.png new file mode 100644 index 0000000000000000000000000000000000000000..773092a5112934c6f9a82e6957a2899f86730f0f GIT binary patch literal 60066 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%0AG;r2 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 Q$uGuxIW^g88I!R80|qZ+kpKVy literal 0 HcmV?d00001