我们部署了部署在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吗? 对此方面的任何帮助都表示高度赞赏。
答案 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是一个相关问题,也可能对您有所帮助。