0

我们已经部署了我们部署了Oracle应用服务器10和 运行应用程序时,我们遇到这个错误的Web应用程序。Oracle应用服务器部署的应用程序抛出一个错误 - NoClassDefFoundError的

Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Category 

Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@12badee for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) 

我们有我们的web应用WEB-INF/lib目录内捆绑log4j的,我们有一个log4j的共享库在我们的应用程序服务器的lib为好。由于这个共享库被许多应用程序共享,所以我们无法删除它。

据我所知,在这些2个log4j的库之间的一些阶级冲突。无论如何,我们可以排除这个共享库,并在Web应用程序中使用捆绑的log4j? 在这方面的任何帮助是高度赞赏。

回答

1

weblogic.xml应用描述使用prefer-web-inf-classes元素。
根据该文件,

设置此元素为True颠覆了类加载器委托模型,以便从Web应用程序上的类定义优先加载类定义在更高级别的类加载器。这允许Web应用程序使用自己版本的第三方类,该类也可能是WebLogic Server的一部分。

This是一个相关的问题,它可能会帮助你。

2

@Viccari 我一直在寻找同样的事情,但对于OC4J旧的应用程序服务器。 解决办法是增加一个WEB-INF /猎户座-web.xml中有以下内容

<orion-web-app ...> 
    ... 
    <web-app-class-loader search-local-classes-first="true" 
    include-war-manifest-class-path="true" /> 
    ... 
</orion-web-app> 

由于我是通过部署企业管理器控制台应用程序,上述方案没有奏效。你必须配置类加载在部署设置上,禁用“继承父应用程序的共享库导入”选项。

另一种选择是创建与具有以下内容的META-INF/orion-application.xml文件的EAR和部署

<?xml version="1.0" encoding="UTF-8"?> 
<orion-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd" 
    deployment-version="10.1.3.4.0" default-data-source="jdbc/OracleDS" 
    component-classification="external" schema-major-version="10" 
    schema-minor-version="0"> 

    <imported-shared-libraries> 
     <remove-inherited name="*"></remove-inherited> 
    </imported-shared-libraries> 

</orion-application> 
+0

1为一种替代解决方案,具有很好的解释。 – Viccari 2012-12-18 01:36:20

相关问题