2016-05-27 2 views
0

Lors du démarrage de mon serveur géré, l'exception ClassCastException suivante est liée à log4j dans mon fichier de serveur géré WebLogic 12c. J'ai commons-logging-1.1.1.jar et log4j-1.2.17.jar regroupés dans mon répertoire lib de WAR et aucune autre version de ces bibliothèques là. J'ai également collé l'erreur du fichier journal du serveur géré générée lors du traitement d'une requête. Dois-je utiliser la journalisation log4j et commons fournie avec WebLogic 12c? Je les vois dans le répertoire des modules: com.bea.core.apache.commons.logging_1.1.2.jar et com.bea.core.apache.log4j_1.2.0.0_1-2-15.jar. Je n'ai jamais eu de problème avec log4j et WebLogic auparavant.java.lang.ClassCastException - Log4j

sur fichier:

jadomain.lang.ClassCastException: org.apache.log4j.RollingFileAppender cannot be cast to org.apache.log4j.Appender 
     at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.jadomain:248) 
     at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.jadomain:176) 
     at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.jadomain:191) 
     at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.jadomain:523) 
     at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.jadomain:436) 
     at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.jadomain:1004) 
     at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.jadomain:872) 
     at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.jadomain:778) 
     at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.jadomain:906) 
     at com.domain.d.app.restwrapper.ContextListener.contextInitialized(ContextListener.jadomain:37) 
     at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.jadomain:66 

fichier journal:

]] Root cause of ServletException. 
jadomain.lang.LinkageError: loader constraint violation: when resolving method "org.apache.log4j.LogMF.entering(Lorg/apache/log4j/Logger;Ljadomain/lang/String;Ljadomain/lang/String;)V" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, com/domain/d/app/restwrapper/appResource, and the class loader (instance of weblogic/utils/classloaders/GenericClassLoader) for resolved class, org/apache/log4j/LogMF, have different Class objects for the type /lang/String;)V used in the signature 
     at com.domain.d.app.restwrapper.appResource.addQuery(appResource.jadomain:244) 
     at com.domain.d.app.restwrapper.appResource.addQuery(appResource.jadomain:224) 
     at com.domain.d.app.restwrapper.appResource$Proxy$_$$_WeldClientProxy.addQuery(appResource$Proxy$_$$_WeldClientProxy.jadomain) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jadomain:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jadomain:43) 

Répondre

1

Vous avez un conflit entre les versions de remorquage de log4j. L'un est chargé depuis le classpath du serveur et l'autre depuis le classpath de votre application web. Pour le résoudre, vous pouvez configurer votre application Web pour utiliser uniquement celle de votre application. Mettez à jour votre fichier weblogic.xml et ajoutez le tag suivant:

<prefer-web-inf-classes>true</prefer-web-inf-classes>