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:
- La mauvaise version de la dépendance continue d'être signalés dans le journal de démarrage.
- La version correcte de la dépendance continue à être utilisé lors de l'exécution.
OriginalL'auteur 8bitjunkie | 2014-04-07
Vous devez vous connecter pour publier un commentaire.
Parfois
<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
ne pouvez pas spécifier le répertoire "lib". Vous devez utiliser:<wls:prefer-application-packages>
et<wls:prefer-application-resources>
. Ci-dessous est un exemple (supprimer wls: pour les vieux weblogic version):Sur le dessus de weblogic.xml utilisez ceci:
<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/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd">
OriginalL'auteur Michelle Mu
La préférez-web-inf-classes paramètre s'applique uniquement au niveau de l'application web.
Je ne peux pas dire à partir de la sortie, mais il semble que le chargeur de classe pour votre oreille est le chargement de l'autre les fichiers jar. Le chargeur de classe pour votre guerre charger et utiliser la plus récente bocal en fonction de votre réglage, même si la racine de l'application chargé les autres.
Si vous voulez voir cela se produire au niveau de l'oreille, vous pouvez ajouter un chargeur de classe de filtre. WebLogic 12c permet à la fois de la guerre et du niveau de l'oreille: Lien
Je n'ai lu à propos de 10.3.5 permettant le filtre au niveau de l'oreille: Lien
JAR
est utilisé, cependant, quand Weblogic démarre l'application, il utilise la version de laJAR
sur son propreclasspath
. J'ai expérimenté avec un chargeur de classe de filtre & cela n'a pas résolu le problème. Le seul moyen que j'ai réussi à remplacer un pot ensystem/lib
est à force de le supprimer de l'annuaire. Malheureusement pour moi, ce n'est pas une option dans notre environnement de Production. Je suis découragée que ce site & d'autres sont litered avec des questions à se lamenter sur la façon dont cette fonctionnalité ne fonctionne pas.OriginalL'auteur beaston
8bitjunkie - Hi. Je crois que votre tiers les fichiers jar sont inclus à votre OREILLE par le cadre et la écouteur/classes plus logique utilisé dans votre application ou dans votre application des bibliothèques tierces. Le cadre peut être le printemps dans votre cas.
Si c'est le cas, alors soit,
Vous avez besoin de modifier le principal de configuration de l'application avant la création de l'OREILLE de telle manière que la troisième partie de la bibliothèque de la dépendance de l'être supprimé. pour exemple: dans Ivy.xml, utilisé pour toutes les dépendances qui télécharge cette "jsf-impl' jar.
Vous avez besoin de modifier la principale de l'application du code de la logique à l'œuvre servletcontextlistener classe ou servletcontainerInitializer classe basée sur le contexte c'est à dire, l'ancien doit être utilisé si vos classes forment une partie intégrante de votre propre application web et de la lettre doit être utilisé si le pot est emballé à la GUERRE qui à son tour intégré dans l'OREILLE et déployé dans le serveur que l'OREILLE de l'application. Espérons que cela aide
OriginalL'auteur vicky77