Oracle应用程序服务器部署应用程序抛出错误 - NoClassDefFoundError

时间:2012-07-31 23:41:36

标签: logging oracle10g log4j weblogic-10.x oracle-application-server

我们部署了部署在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)

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

我知道这两个log4j库之间存在一些类冲突。反正我们可以排除这个共享库并使用Web应用程序中的捆绑log4j吗? 对此方面的任何帮助都表示高度赞赏。

2 个答案:

答案 0 :(得分: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>

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

另一个选择是创建带有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>

答案 1 :(得分:1)

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

  

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

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