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

相關問題