Configuration des bibliothèques natives dans les bibliothèques partagées

Les bibliothèques natives sont des fichiers de bibliothèque spécifiques à des plateformes, y compris des .dll, .so, ou des objets *SRVPGM, pouvant être configurés au sein de bibliothèques partagées. Les bibliothèques sont visibles pour un chargeur de classe d'application dès que la bibliothèque partagée est associée à une application. De la même façon, les bibliothèques natives sont visibles à un chargeur de serveur d'applications dès que la bibliothèque partagée est associée à un serveur d'applications.

Avant de commencer

Lors de la conception d'une bibliothèque partagée, respectez les conditions suivantes concernant la prise en charge de bibliothèque native Java :
  • La machine JVM ne permet qu'à un seul chargeur de classe de charger une bibliothèque native particulière.
  • Il n'existe pas d'API permettant de décharger une bibliothèque native d'un chargeur de classe.

    Les bibliothèques natives sont déchargées par JVM lorsque le chargeur de classe ayant trouvé la bibliothèque est collecté du segment de mémoire au cours de la récupération de place.

  • Les chargeurs de classe du serveur d'applications, à la différence du chargeur de classe JVM natif, chargent uniquement les bibliothèques partagées natives qui utilisent l'extension du système d'exploitation par défaut de la plateforme actuelle. Par exemple, sur AIX, l'extension des bibliothèques partagées natives doit se terminer par .a lorsqu'elles sont chargées par les chargeurs de classe du serveur d'applications. Le chargeur de classe JVM charge les fichiers se terminant par .a ou .so.

    [AIX]Java Web Start peut charger uniquement les bibliothèques partagées natives portant l'extension de fichier .so. Renommez les bibliothèques partagées natives avec l'extension .so avant de les regrouper dans un fichier JAR (Java archive) pour le déploiement Java Web Start.

  • Les chargeurs de serveur d'applications sont conservés pendant la durée du serveur d'applications.
  • Les chargeurs de classe d'applications sont conservés jusqu'à ce qu'une application soit interrompue ou dynamiquement rechargée.

    Si une bibliothèque partagée configurée avec un chemin d'accès à la bibliothèque native est associée à une application, lorsque l'application est redémarrée ou dynamiquement rechargée, elle risque d'échouer, avec une erreur UnsatisfiedLinkError indiquant que la bibliothèque est déjà chargée. L'erreur intervient car, lorsque l'application redémarre, elle demande à la classe de bibliothèque partagée de recharger la bibliothèque native. Toutefois, la bibliothèque native est encore chargée en mémoire dans le chargeur de classe d'applications qui avait précédemment chargé la bibliothèque native n'a pas encore subi le processus de récupération de place.

  • Seul un chargeur de classe JVM peut charger une bibliothèque native dépendante.

    Par exemple, si NativeLib1 est dépendante de NativeLib2, NativeLib2 doit être visible pour le chargeur de classe JVM. Le chemin contenantNativeLib2 doit être spécifié dans le chemin de bibliothèque Java défini par la variable d'environnement LIBPATH.

    [z/OS]La propriété LIBPATH (java.library.path) est configurée à l'aide de la variable d'environnement nom_processus_chemin_bibliothèque_région, telle chemin_bibliothèque_région_contrôle, chemin_bibliothèque_région_serveur ou chemin_bibliothèque_auxiliaire. Pour apprendre à définir les variables de région LIBPATH, voir Modification des valeurs des variables référencées dans les messages BBOM0001I.

    Si une bibliothèque native configurée dans une bibliothèque partagée est dépendante d'autres bibliothèques natives, les bibliothèques dépendantes doivent être configurées sur le LIBPATH de la machine JVM hébergeant le serveur d'applications afin que cette librairie soit chargée correctement.

Pourquoi et quand exécuter cette tâche

Lors de la configuration d'une bibliothèque partagée sur une page des paramètres de bibliothèque partagée, si vous spécifiez une valeur pour Chemin d'accès aux bibliothèques natives, les bibliothèques natives de ce chemin ne sont pas localisées par l'application WebSphere Application Server ou les chargeurs de classes de bibliothèques partagées sauf si la classe chargeant la bibliothèque native a été elle-même chargée par le même chargeur de classe.

Comme une bibliothèque native ne peut pas être chargée plusieurs fois par un chargeur de classe, il est préférable que les bibliothèques natives soient chargées au sein des bibliothèques partagées associées au chargeur de classe d'un serveur d'applications, car ces chargeurs de classe existent pendant toute la durée de vie du serveur.

Procédure

  1. Mettez en oeuvre une méthode statique dans la classe chargeant la bibliothèque native.

    Dans la classe chargeant la bibliothèque native, appelez System.loadLibrary(bibliothèque_native) dans un bloc statique. Par exemple :

    static {System.loadLibrary("native_library");

    bibliothèque_native charge pendant l'initialisation statique de la classe, qui se produit exactement une fois, lorsque la classe charge.

  2. Sur la page des paramètres de bibliothèque partagée, définissez les valeurs pour Chemin d'accès aux classes et Chemin d'accès aux bibliothèques natives qui permet à la bibliothèque partagée de charger la bibliothèque native.

    Si vous voulez associer votre bibliothèque partagée avec une application ou un module, sélectionnez Utiliser un chargeur de classes isolé pour cette bibliothèque partagée. Si vous ne voulez pas activer ce paramètre, associez la bibliothèque partagée avec un serveur d'applications.

  3. Associez la bibliothèque partagée.
    • Si vous n'avez pas activé Utilisez un chargeur de classe isolé pour cette bibliothèque partagée, associez la bibliothèque partagée avec un serveur d'applications.

      Associer une bibliothèque partagée au chargeur de classe d'un serveur d'applications, au lieu d'une application, permet de garantir que la bibliothèque partagée est chargée exactement une fois par le chargeur de classe du serveur d'applications, même si les applications du serveur sont redémarrées ou dynamiquement rechargées. La bibliothèque native étant chargée au sein d'un bloc statique, la bibliothèque native n'est jamais chargée plusieurs fois.

    • Si vous avez activé Utilisez un chargeur de classe isolé pour cette bibliothèque partagée, associez la bibliothèque partagée avec une application ou un module.

      L'association d'un fichier de bibliothèque partagée isolée avec une application ou un module charge les classes représentées par la bibliothèque partagée dans un chargeur de classe distinct créé pour cette bibliothèque partagée. N'associez aucun fichier de bibliothèque partagée isolée à un serveur si vous voulez utiliser un chargeur de classes distinct pour une bibliothèque partagé. Si vous associez la bibliothèque partagée à un serveur, le produit ignore le paramètre d'isolation et ajoute touijours les fichiers de la bibliothèque partagée au chargeur de classes du serveur d'application. Cela signifie que l'association d'un fichier de bibliothèque partagée à un serveur associe le fichier à toutes les applications du serveur.

      Le chargeur de classe créé pour une bibliothèque partagée isolée ne se recharge pas et, à l'instar d'un chargeur de classe de serveur, existe toute la durée de vie du serveur. Pour les bibliothèques natives partagées, vous pouvez utiliser une bibliothèque partagée isolée pour éviter les erreurs dues au rechargement des bibliothèques natives.

Que faire ensuite

Pour vérifier qu'une application peut utiliser une bibliothèque partagée, testez l'application ou examinez le chargeur de classe dans l'afficheur de chargeur de classe. Cliquez sur Résolution des incidents > Afficheur des chargeurs de classe > nom_module > Vue Table. Le chemin d'accès aux classes du chargeur de classe du module de l'application module répertorie les classes utilisées par la bibliothèque partagée.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tcws_sharedlib_nativelib
Nom du fichier : tcws_sharedlib_nativelib.html