
Conformément au calendrier de sortie du JDK 19, Mark Reinhold, architecte en chef du groupe Java Platform d'Oracle, a annoncé que les ajouts à la prochaine version du kit de développement sont terminés. Pour rappel, une nouvelle version standard de Java est publiée tous les six mois. Avec cette dernière étape dans le processus de publication de la version standard de Java, les autres fonctionnalités prévues, telles que les génériques universels et les objets de valeur, devront attendre une version ultérieure de la plateforme. Les nouvelles fonctionnalités du JDK 19 comprennent :
Schémas de signature
security-libs/javax.net.ssl
De nouvelles API Java SE, javax.net.ssl.getSignatureSchemes() et javax.net.ssl.setSignatureSchemes(), ont été ajoutées pour permettre aux applications de personnaliser les schémas de signature utilisés dans les connexions TLS ou DTLS individuelles. Le fournisseur sous-jacent peut définir les schémas de signature par défaut pour chaque connexion TLS ou DTLS.
Les applications peuvent également utiliser les propriétés système existantes jdk.tls.client.SignatureSchemes et/ou jdk.tls.server.SignatureSchemes pour personnaliser les schémas de signature par défaut spécifiques au fournisseur. S'ils ne sont pas nuls, les schémas de signature transmis à la méthode setSignatureSchemes() remplaceront les schémas de signature par défaut pour les connexions TLS ou DTLS spécifiées.
Un fournisseur peut ne pas avoir été mis à jour pour prendre en charge les nouvelles API et dans ce cas, il peut ignorer les schémas de signature définis. Le fournisseur JDK SunJSSE prend en charge cette méthode. Il est recommandé aux fournisseurs tiers d'ajouter la prise en charge de ces méthodes lorsqu'ils ajoutent la prise en charge du JDK 19 ou des versions ultérieures.
Nouvelles propriétés système pour System.out et System.err
core-libs/java.lang
Deux nouvelles propriétés système, stdout.encoding et stderr.encoding, ont été ajoutées. La valeur de ces propriétés système est l'encodage utilisé par les flux de sortie standard et d'erreur standard (System.out et System.err). Les valeurs par défaut de ces propriétés système dépendent de la plateforme. Les valeurs prennent la valeur de la propriété native.encoding lorsque la plate-forme ne fournit pas de flux pour la console. Les propriétés peuvent être remplacées par l'option de ligne de commande du lanceur (avec -D) pour les définir en UTF-8 lorsque cela est nécessaire.
Prise en charge d'Unicode 14.0
core-libs/java.lang
Cette version met à jour la prise en charge d'Unicode à 14.0, ce qui inclut les éléments suivants : la classe java.lang.Character prend en charge la base de données de caractères Unicode du niveau 14.0, ce qui ajoute 838 caractères, pour un total de 144 697 caractères. Ces ajouts incluent 5 nouveaux scripts, pour un total de 159 scripts, ainsi que 37 nouveaux caractères emoji. Les classes java.text.Bidi et java.text.Normalizer prennent en charge le niveau 14.0 des annexes standard Unicode, respectivement #9 et #15. Le paquet java.util.regex prend en charge les grappes de graphèmes étendues basées sur le niveau 14.0 de l'annexe standard Unicode #29. Pour plus de détails sur Unicode 14.0, reportez-vous à la note de publication du Consortium Unicode.
Prise en charge de la liaison de canal HTTPS pour Java GSS/Kerberos
core-libs/java.net
La prise en charge des jetons de liaison de canal TLS pour l'authentification Negotiate/Kerberos sur HTTPS a été ajoutée via javax.net.HttpsURLConnection. Les jetons de liaison de canal sont de plus en plus nécessaires comme forme de sécurité renforcée. Ils fonctionnent en communiquant d'un client à un serveur la compréhension par le client de la liaison entre la sécurité de la connexion, représentée par un certificat de serveur TLS, et les informations d'authentification de niveau supérieur, telles qu'un nom d'utilisateur et un mot de passe. Le serveur peut alors détecter si le client a été trompé par un MITM et interrompre la session ou la connexion. Cette fonctionnalité est contrôlée par une nouvelle propriété système jdk.https.negotiate.cbt qui est décrite en détail dans Propriétés de mise en réseau.
Formats de date et d'heure supplémentaires
core-libs/java.time
Des formats de date/heure supplémentaires sont maintenant introduits dans les classes java.time.format.DateTimeFormatter/DateTimeFormatterBuilder. Dans les versions précédentes, seuls 4 styles prédéfinis, à savoir FormatStyle.FULL/LONG/MEDIUM/SHORT, étaient disponibles.
Maintenant, les utilisateurs peuvent spécifier leur propre style flexible avec la nouvelle méthode DateTimeFormatter.ofLocalizedPattern(String requestedTemplate). Par exemple, DateTimeFormatter.ofLocalizedPattern("yMMM"

Support de la protection PAC-RET sur Linux/AArch64
hotspot/compilateur
Le support de la protection PAC-RET sur la plateforme Linux/AArch64 a été introduit. Lorsqu'il est activé, OpenJDK utilisera les caractéristiques matérielles de l'extension PAC (Pointer Authentication Code) ARMv8.3 pour se protéger contre les attaques ROP (Return Orientated Programming). Pour plus d'informations sur l'extension PAC, voir "Providing protection for complex software" ou « la section Pointer authentication in AArch64 state » dans le ARM Arm.
Pour profiter de cette fonctionnalité, OpenJDK doit d'abord être construit avec l'option de configuration --enable-branch-protection en utilisant GCC 9.1.0+ ou LLVM 10+ . Ensuite, l'indicateur d'exécution -XX:UseBranchProtection=standard activera la protection PAC-RET si le système la prend en charge et si le binaire Java a été compilé avec la protection des branches activée ; sinon l'indicateur est ignoré en silence. Alternativement, -XX:UseBranchProtection=pac-ret activera également la protection PAC-RET, mais dans ce cas, si le système ne la prend pas en charge ou si le binaire java n'a pas été compilé avec la protection des branches activée, un avertissement sera imprimé.
Prise en charge de l'architecture de jeu d'instructions Linux/RISC-V
RISC-V est une architecture de jeu d'instructions (ISA) RISC libre et open source, conçue à l'origine à l'Université de Californie, Berkeley, et maintenant développée en collaboration sous le parrainage de RISC-V International. Elle est déjà prise en charge par un large éventail de chaînes d'outils de langage. Selon l'équipe du JDK, avec la disponibilité croissante du matériel RISC-V, un portage du JDK serait précieux. Avec le portage Linux/RISC-V, Java obtiendrait la prise en charge d'un jeu d'instructions matérielles qui est déjà pris en charge par un large éventail de chaînes d'outils de langage.
RISC-V est en fait une famille d'ISA connexes. Le portage Linux/RISC-V ne prendrait en charge que la configuration RV64GV de RISC-V, un ISA 64 bits à usage général qui inclut des instructions vectorielles. Les développeurs de Java pourraient envisager d'autres configurations RISC-V à l'avenir.
Génération automatique de l'archive CDS
hotspot/runtime
L'option JVM -XX:+AutoCreateSharedArchive peut être utilisée pour créer ou mettre à jour automatiquement une archive CDS pour une application. Par exemple : java -XX:+AutoCreateSharedArchive -XX...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.