Weblogic 10.3.5: <préférez-web-inf-classes> dans weblogic.xml pas de travail VS. serveur de fichiers JAR au classpath

Weblogic version: 10.3.5

JSF version (interfaces, impl) : Mojarra 2.0.3

J'ai un JSF EAR application qui est faite d'un WAR fichier et un JAR fichier.

La WAR fichier contient les deux Maven dépendances:

 <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.0.3</version>
    </dependency>

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.0.3</version>
    </dependency>

Lors de l'exécution, l'extrait de code suivant correctement rapports de la version du service de Mojarra comme v2.0.3:

public void getMojarraVersion() {
    Package p = FacesContext.class.getPackage();
    System.out.println("Mojarra version: " + p.getImplementationTitle() + " " + p.getImplementationVersion());
}

La weblogic journal de démarrage, cependant les rapports qu'un autre, bien plus ancienne version fournie par le conteneur est utilisé lorsque l'application est démarrée:

INFO: Initializing Sun's JavaServer Faces implementation (1.2_03-b04-FCS) for context '/myApp'

Ce, malgré le suivant weblogic.xml de configuration, déployés aux côtés des WAR du fichier web.xml fichier dans WEB-INF, qui inverse le chargeur de classe:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
     <wls:container-descriptor>
        <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
     </wls:container-descriptor>
</wls:weblogic-web-app>

Après une couple de jours de creuser, j'ai découvert les deux Fichiers JAR sont inclus dans le serveur classpath:

${WEBLOGIC_HOME}/wlserver_10.3/server/lib/consoleapp/webapp/WEB-INF/lib/jsf-api.jar

${WEBLOGIC_HOME}/wlserver_10.3/server/lib/consoleapp/webapp/WEB-INF/lib/jsf-impl.jar

Ces fichiers sont fournis par une vanille installer de Weblogic 10.3.5.

Temporairement la suppression de ces deux fichiers JAR et de redémarrer le serveur a provoqué le journal de commencer à déclarer que la nouvelle version est en cours d'utilisation:

INFO: Initializing Mojarra 2.0.3 for context '/myApp'

La preuve ci-dessus démontre donc que Weblogic configuration de subvertir la hiérarchie du chargeur de classe ne fonctionne pas pour toutes les ressources qui sont fournies par le serveur classpath (c'est à dire ${WEBLOGIC_HOME}/wlserver_10.3/server/lib) lorsqu'une application est chargée.

Il est intéressant de côté, je peux supprimer le weblogic.xml fichier et je trouve que:

  1. La mauvaise version de la dépendance continue d'être signalés dans le journal de démarrage.
  2. La version correcte de la dépendance continue à être utilisé lors de l'exécution.

OriginalL'auteur 8bitjunkie | 2014-04-07