0

我们已经部署了部署在 oracle 应用程序服务器 10 上的 Web 应用程序,并且在运行应用程序时遇到了这个错误。

 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)

我们将 log4j 捆绑在我们的 webapp WEBINF/lib 中,并且在我们的应用程序服务器库中也有一个用于 log4j 的共享库。由于这个共享库由许多应用程序共享,我们无法删除它。

我知道这两个 log4j 库之间存在一些类冲突。无论如何,我们可以排除这个共享库并在 Web 应用程序中使用捆绑的 log4j 吗?非常感谢这方面的任何帮助。

4

2 回答 2

2

@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 Console 部署应用程序,因此上述解决方案不起作用。您必须在其部署设置中配置类加载,禁用“继承父应用程序的共享库导入”选项。

另一种选择是使用 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>
于 2012-10-24T20:47:24.500 回答
1

在应用程序描述符中使用prefer-web-inf-classes元素。 根据文件,weblogic.xml

将此元素设置为 True 会破坏类加载器委托模型,以便 Web 应用程序中的类定义优先于更高级别的类加载器中的类定义加载。这允许 Web 应用程序使用它自己的第三方类版本,它也可能是 WebLogic Server 的一部分。

是一个相关的问题,也可能对您有所帮助。

于 2012-08-02T00:24:32.657 回答