Remplacement d'une API spécifique par une autre version fournie par l'environnement du serveur

Si une application fournit (ou utilise une bibliothèque qui fournit) des classes qui sont également disponibles dans Liberty, par défaut, ce sont les classes Liberty qui sont utilisées. Pour changer ce comportement afin que l'application utilise les versions alternatives des classes (et non celles de l'environnement du serveur), elle doit être configurée à cet effet dans le fichier server.xml ou dans un fichier inclus par celui-ci.

Pourquoi et quand exécuter cette tâche

Si une application Web inclut des classes qui sont également présentes dans l'environnement d'exécution du serveur, il peut être souhaitable de contrôler quel exemplaire de chacune de ces classes elle utilise. Par exemple, si l'application et l'environnement d'exécution du serveur contiennent deux versions différentes d'une même classe, il est important que l'application utilise sa propre version.

Par défaut, les classes provenant de l'environnement d'exécution Liberty sont utilisées par toutes les applications Java™ EE. Vous pouvez passer outre ce comportement en utilisant l'attribut delegation de la configuration du chargeur de classe (élément classloader). Cette configuration est spécifique à une application particulière ou à une bibliothèque partagée susceptible d'être sélectionnée pour être utilisée par une application.

Exemple

Dans l'exemple suivant, une application nommée Scholar a besoin d'utiliser les classes qu'elle fournit (ou qui sont fournies par une bibliothèque qu'elle utilise) et non pas celles qui sont disponibles dans Liberty.

  • Lorsqu'une application est conditionnée avec ses propres classes, pour garantir qu'elles sont chargées en priorité, vous devez passer outre le comportement de délégation par défaut parentFirst en ajoutant un élément classloader au fichier de configuration server.xml ou à un fichier qu'il inclut :
    <application id="" name="Scholar" type="ear" location="scholar.ear">
      <classloader delegation="parentLast" />
    </application>
    En ajoutant explicitement cet élément avec l'attribut de délégation "parentLast", vous indiquez au chargeur de classe de l'application qu'il doit rechercher les classes Liberty uniquement après avoir tenté de les trouver dans l'application elle-même, puis dans ses bibliothèques associées.
  • Lorsque les classes sont conditionnées dans une bibliothèque partagée, ajoutez l'attribut delegation à l'élément classloader qui configure l'utilisation de cette bibliothèque, comme ceci :
    <application id="" name="Scholar" type="ear" location="scholar.ear">
      <classloader delegation="parentLast" commonLibraryRef="mySharedLib"/>
    </application>
    
    <library id="mySharedLib">
      <fileset dir="${server.config.dir}/myLib" includes="*.jar" />
    </library>

Vous pouvez aussi utiliser l'attribut privateLibraryRef si l'application utilise sa propre copie d'une bibliothèque. Voir Partage d'une bibliothèque entre plusieurs applications Java EE.


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



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