我们已经将我们的web应用程序部署在oracle应用程序服务器10上我们在运行应用程序时遇到这个错误。
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)
我们在我们的webapp WEBINF/lib中捆绑了log4j,在我们的应用程序服务器库中也有一个log4j的共享库。由于这个共享库被许多应用程序共享,我们无法删除它。
我知道这两个log4jlib之间存在一些类冲突。我们是否可以排除这个共享库,并在web应用程序中使用捆绑的log4j?我们非常感谢在这方面的任何帮助。
@Viccari我一直在寻找同样的东西,但一个旧的应用程序服务器与OC4J。解决方案是添加一个WEB-INF/orion-WEB.xml,其中包含以下内容
<orion-web-app ...>
...
<web-app-class-loader search-local-classes-first="true"
include-war-manifest-class-path="true" />
...
</orion-web-app>
由于我是通过Enterprise Manager控制台部署应用程序的,上述解决方案不起作用。您必须在其上的部署设置中配置类加载,禁用"继承父应用程序的共享库导入"选项。
另一种选择是使用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>
在weblogic.xml
应用程序描述符中使用preferred web inf classes元素
根据文件,
将此元素设置为True会破坏类加载器委托模型,因此Web应用程序中的类定义将优先于更高级别的类加载器中的类的定义进行加载。这允许Web应用程序使用自己版本的第三方类,该类也可能是WebLogicServer的一部分。
这是一个相关的问题,可能对你也有帮助。