Migration depuis les versions antérieures d' IBM Semeru Certified Edition pour z/OS

Vous trouverez ici un résumé des modifications apportées au SDK et à l'environnement d'exécution dont vous devez tenir compte lors de la migration depuis des versions antérieures d' IBM®Semeru Certified Edition pour z/OS®.

Cette version comporte quelques différences par rapport à IBM Semeru Certified Edition for z/OS, version 21, qui pourraient nécessiter une certaine planification. Pour un aperçu, consultez la rubrique « Nouveautés ».

Changements importants

Si vous effectuez une migration depuis la version 21 d' IBMSemeru Certified Edition pour z/OS, les modifications suivantes s'appliquent.
  1. JEP 472 : Avertissements relatifs aux méthodes restreintes pour l'accès aux bibliothèques natives

    À partir de Java 25, les applications qui chargent des bibliothèques natives à l'aide de méthodes restreintes telles que System.loadLibrary() ou System.load() recevront des avertissements lorsque ces méthodes seront appelées. Cette modification s'inscrit dans le cadre de la JEP 472, qui prépare à de futures restrictions concernant l'accès natif. Le message d'avertissement s'affiche comme suit :

    WARNING: A restricted method in java.lang.System has been called
    WARNING: java.lang.System::loadLibrary has been called by com.example.MyClass in an unnamed module
    WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module
    WARNING: Restricted methods will be blocked in a future release unless native access is enabled
    Les mesures d'atténuation sont les suivantes.
    Option 1 : Option de ligne de commande « JVM »
    • Masquer les avertissements concernant les modules sans nom : ajoutez l'option ` JVM ` --enable-native-access=ALL-UNNAMED à la commande de démarrage de votre application. Cela permet à tout le code des modules sans nom d'appeler des méthodes restreintes sans générer d'avertissements.
    • Masquer les avertissements pour des modules spécifiques : si votre application utilise des modules nommés, indiquez le nom du module : --enable-native-access=module.name.
    • Masquer les avertissements pour plusieurs modules : utilisez une liste séparée par des virgules : --enable-native-access=module1,module2.
    Option 2 : attribut de manifeste JAR
    Ajouter Enable-Native-Access: ALL-UNNAMED au manifeste d'un fichier JAR exécutable. Cela permet au fichier JAR d'appeler des méthodes restreintes sans avoir besoin d'options de ligne de commande.
    Voici les points importants à prendre en considération.
    • Ces options d' JVM ation doivent être ajoutées au niveau de l'application, et non dans le code de la bibliothèque ou du framework.
    • Ces avertissements sont purement informatifs et n'empêchent pas l'application de fonctionner sous Java 25.
    • Dans une prochaine version de Java, les méthodes restreintes seront bloquées par défaut, à moins que l'accès natif ne soit explicitement activé.
    • Prévoyez de mettre à jour les scripts de démarrage de votre application, les configurations de déploiement ou les manifestes JAR afin d'y inclure l'activation de l'accès natif appropriée.
    Pour plus d'informations sur l'activation de l'accès natif et des méthodes restreintes, consultez :
  2. Les limites de taille des entités JAXP ont été réduites dans Java 24 et les versions ultérieures

    À partir de Java 24, plusieurs limites de sécurité des API JAXP (Java API for XML Processing) ont été abaissées afin de renforcer la protection contre les attaques basées sur le XML. Ces modifications font partie de la version JDK-8343004 et concernent les applications qui traitent des documents XML contenant des entités volumineuses ou des structures fortement imbriquées.

    Les limites suivantes sont réduites :

    • jdk.xml.totalEntitySizeLimit - Réduit de 5 × 10⁷ (50 000 000) à 1 × 10⁵ (100 000)
    • jdk.xml.maxGeneralEntitySizeLimit - Modifié de 0 (illimité) à 1×10⁴ (10 000)
    • jdk.xml.maxParameterEntitySizeLimit - Réduit de 1×10⁶ (1 000 000) à 1×10⁴ (10 000)
    • jdk.xml.entityExpansionLimit - Réduit de 64 000 à 6 400
    • jdk.xml.entityReplacementLimit - Réduit de 3 × 10⁶ (3 000 000) à 1 × 10⁵ (100 000)

    Lorsque des applications traitent des documents XML qui dépassent ces limites, des erreurs telles que celles-ci se produisent :

    JAXP00010004: The accumulated size of entities is "100,003" that exceeded the "100,000" limit set by "jdk.xml.totalEntitySizeLimit"

    Ce problème a été constaté dans les flux de travail de la Facilité de gestion (MF) d' z/OS. Il peut également affecter d'autres applications qui traitent des fichiers XML volumineux, notamment des fichiers de configuration ou des formats d'échange de données.

    Mesures d'atténuation :

    Option 1 : Augmenter les limites à l'aide des propriétés du système
    Définissez des limites plus élevées lors du démarrage de l' JVM. Par exemple, pour rétablir les valeurs par défaut précédentes :
    java -Djdk.xml.totalEntitySizeLimit=50000000
    -Djdk.xml.maxGeneralEntitySizeLimit=0
    -Djdk.xml.maxParameterEntitySizeLimit=1000000
    -Djdk.xml.entityExpansionLimit=64000
    -Djdk.xml.entityReplacementLimit=3000000
    Avertissement : l'augmentation de ces limites peut exposer votre application à des failles de sécurité liées au format XML. Ce paramètre jdk.xml.maxGeneralEntitySizeLimit=0 supprime complètement la limite, ce qui correspondait à la valeur par défaut précédente, mais n'est pas recommandé pour des raisons de sécurité. N'augmentez les limites qu'après un examen minutieux des mesures de sécurité.
    Option 2 : Utiliser le fichier de configuration JAXP
    Créez un fichier de configuration JAXP personnalisé pour définir des limites à l'échelle du système à l'aide du modèle fourni à cet effet. Copiez le modèle et créez un fichier de configuration personnalisé :
    cp $JAVA_HOME/conf/jaxp-strict.properties.template <my_path>/jaxp.properties
    Modifiez le fichier de configuration pour définir les limites souhaitées :
    jdk.xml.totalEntitySizeLimit=50000000
    jdk.xml.maxGeneralEntitySizeLimit=0
    jdk.xml.maxParameterEntitySizeLimit=1000000
    jdk.xml.entityExpansionLimit=64000
    jdk.xml.entityReplacementLimit=3000000
    Spécifiez ensuite le fichier de configuration au démarrage de l' JVM :
    java -Djava.xml.config.file=<my_path>/jaxp.properties
    Remarque : cette méthode vous permet de gérer les paramètres JAXP de manière centralisée sans avoir à modifier les scripts de démarrage de l'application pour chaque propriété.
    Option 3 : Définir des limites par programmation
    Configurez les limites dans le code de votre application à l'aide de l'API JAXP :
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setAttribute("jdk.xml.entityExpansionLimit", "64000");
    factory.setAttribute("jdk.xml.maxGeneralEntitySizeLimit", "0");
    Option 4 : Refactorisation du traitement XML
    Envisagez de restructurer les documents XML volumineux en fichiers plus petits et plus faciles à gérer, ou utilisez des API de traitement en continu (telles que StAX ) qui traitent le XML de manière incrémentielle plutôt que de charger des documents entiers en mémoire.

    Pour plus d'informations sur les restrictions de sécurité JAXP et les bonnes pratiques, consultez le Guide de sécurité de l'API Java pour le traitement XML (JAXP).

  3. JEP 486 : Security Manager désactivé de manière permanente

    La JEP 486 désactive définitivement le gestionnaire de sécurité dans Java 25. Par conséquent, certaines fonctionnalités d' JAAS s ne prennent plus en charge le Gestionnaire de sécurité, et plusieurs méthodes ont été modifiées. Pour plus d'informations, consultez la section « Désinstallation de Security Manager ».

    • doAs() les méthodes ont été transférées vers callAs().
    • doAsPrivileged() et privateDoAs() les méthodes ont été transférées vers callAsPrivileged().

    Pour plus d'informations sur les modifications apportées au niveau de l' JAAS, consultez la documentation disponible à l'adresse JAAS ainsi que la documentation relative à l'API sur JAAS.

  4. OpenJCEPlus La bibliothèque cryptographique est désormais un module distinct.

    Dans Java 25, le module « OpenJCEPlus » n'est plus inclus dans l'image d'exécution de base; il est désormais distribué sous forme de module autonome. Cette modification concerne les images d'exécution personnalisées créées avec jlink, dans lesquelles le module doit être ajouté explicitement. Sans OpenJCEPlus,, les applications se rabattront sur les autres implémentations JCE, ce qui peut entraîner une baisse significative des performances cryptographiques et l'absence de certains algorithmes accélérés par le matériel disponibles sur IBM Z.

    Pour inclure OpenJCEPlus dans une image d'exécution personnalisée, utilisez :

    jlink --add-modules <existing_modules>,openjceplus ...

    Vérifiez vos scripts de compilation et vos images de conteneur pour vous assurer que le module est bien ajouté au cours jlink du traitement. Aucune modification n'est nécessaire pour les installations standard du SDK ou lors de l'exécution directe de Java.

  5. Comportement d'encodage de la classe PEMRecord - Dans le cadre de la JEP 470, Java 25 introduit la PEMRecord classe permettant de représenter des données encodées au format PEM. Les certificats Privacy Enhanced Mail ( PEM ) peuvent contenir des données préliminaires, définies comme tout contenu non PEM e apparaissant avant l'en-tête PEM lors du décodage. Lors de la lecture de certificats à l'aide de java.security.PEMRecord, les octets renvoyés par leadingData() sont encodés selon le Charset.defaultCharset() codage, qui peut varier en fonction file.encoding des paramètres de. Les applications qui interprètent, comparent ou stockent des données de tête doivent tenir compte de ce comportement d'encodage.
  6. Les classes de sécurité interne ont été supprimées de Java 25

    Les classes internes des paquets com.ibm.securitycom.ibm.misc et, incluses dans les versions précédentes d' Semeru, ne sont plus disponibles. Si vous essayez d'utiliser ces classes, vous obtiendrez une erreur indiquant que le paquet n'existe pas.

  7. À partir de Java 11, les polices ne sont plus fournies avec le SDK. Semeru utilise désormais les polices d' WorldType s installées sur le système. La dernière version des polices d' WorldType s se trouve sous forme de fichiers UNIX (fichiers HFS (Hierarchical File System) ou MFS ( z/OS® File System (zFS) )) à l'emplacement suivant :
    /usr/lpp/fonts/worldtype
    Pour plus d'informations sur la prise en charge des polices, consultez la page « Prise en charge des polices » sur Semeru à l'adresse z/OS.
  8. Contrairement à IBM Java 8, Semeru les SDK contiennent une modification délibérée du traitement acheminé vers IBM z le processeur d'informations intégré ( zIIP ), ce qui peut entraîner une augmentation de l'utilisation du processeur central (CPU) pour certaines charges de travail spécifiques. Cette modification fonctionne comme prévu et corrige un problème présent dans Java 8, où certaines opérations étaient confiées à l' zIIP, alors qu'elles ne remplissaient pas les conditions requises pour l' zIIP.
  9. À partir de Java 21, le format de transformation « algorithm/mode/padding » est appliqué de manière plus stricte, conformément à la documentation de l'API. Les versions précédentes de Java offraient davantage de souplesse et permettaient que les transformations ne comportent ni mode ni remplissage. Une valeur par défaut appropriée serait alors choisie en fonction de l'algorithme spécifié. Toutefois, cette approche est en cours d'abandon dans les fournisseurs de sécurité « OpenJDK » et « Semeru ».
    Voici quelques exemples de transformations de chiffrement valides.
    • « AES »
    • « AES// »
    • "AES/GCM/NoPadding"
    • "AES/CBC/NoPadding"
    Voici quelques exemples de transformations de chiffrement non valides qui entraînent des erreurs.
    • « AES/ /NoPadding"
    • "AES/CBC/NoPadding/"
    • « AES/CBC/ »
    • « AES/CBC »
  10. À partir de la version 18 du JDK, le jeu de caractères par défaut sur toutes les plateformes est « UTF-8 ». Cette modification pourrait poser des problèmes de migration pour les applications Java existantes exécutées sur z/OS qui interagissent avec des fichiers non-UTF-8 lors de la migration vers Java 25 à partir de la version 17 ou d'une version antérieure. Pour plus d'informations, consultez la section « Migration depuis les versions précédentes » dans la rubrique JEP 400.
Pour plus d'informations sur les modifications apportées au JDK à chaque nouvelle version de Java, consultez les documents suivants.

Ces modifications pourraient avoir une incidence sur la compatibilité des applications avec cette version. Pour plus d'informations sur ces modifications et pour savoir comment déterminer si vos applications présentent des problèmes de compatibilité, consultez la section « Compatibilité des versions ».

Fonctionnalités obsolètes et suppressions

Pour obtenir la liste complète des méthodes JDK obsolètes et supprimées, consultez la section « API, outils et composants supprimés ».

Migration depuis les éditions antérieures

Si vous effectuez une migration à partir d'une version antérieure à IBM Semeru Certified Edition pour z/OS, version 11, consultez la rubrique « Migration à partir de versions antérieures » de la version 11.

Si vous effectuez une migration à partir d'une version antérieure à IBM Semeru Certified Edition pour z/OS, version 17, consultez la rubrique « Migration à partir de versions antérieures » pour la version 17.

Si vous effectuez une migration à partir d'une version antérieure à IBM Semeru Certified Edition pour z/OS, version 21, consultez la rubrique « Migration à partir de versions antérieures » pour la version 21.