簡體   English   中英

Weblogic 10.3類加​​載器問題

[英]Weblogic 10.3 classloader issue

摘要

尚未在結構上進行更改或未更改任何代碼的應用程序現在遇到類路徑問題。 唯一發生變化的是它內置的環境(新的solaris盒)。

應用程序服務器:weblogic 10.3

Maven戰爭插件:2.3

錯誤

在應用程序之戰中,有2個依賴項,它們具有相同類的不同版本,一個依賴項缺少某個構造函數...您可以看到運行的方向。 我們遇到了運行時錯誤,因為針對的是錯誤版本的類(缺少構造函數)。

現在這是一個maven項目,並且對依存關系的排序方式是,此類的正確版本將在編譯時首先顯示在類路徑上。

據我們目前所知,所有已更改的是新的構建框,構建部門在其中構建了戰爭文件。

測試完成

如果我在自己的本地環境(Windows)上創建war並將其部署到weblogic環境服務器(unix框),則沒有問題。

但是,當它在構建盒(solaris)上構建,然后將其部署到相同的環境時,出現了問題。

我已經比較了兩個戰爭檔案,沒有發現任何差異。

為了確認我所懷疑的內容(首先在類路徑上選擇了錯誤的類),我構建了不包含錯誤版本的程序包,使程序出人意料地令人驚訝。 weblogic類加載器顯然在先加載此不正確的類。

問題仍然存在,我需要確定導致這種情況突然發生的原因。

在確定首先加載lib中的哪個依賴項方面,weblogic的類加載器有哪些規則?

而且,除了清單中的版本號之外,在完全相同的兩次不同的戰爭之間,這種行為怎么可能會改變?

非常感謝,

用戶編輯

根據要求,Maven依賴關系樹:

[INFO] com.xxx.web:adminapp:war:100462.7
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- struts:struts:jar:1.2.4:compile
[INFO] |  +- commons-beanutils:commons-beanutils:jar:1.6.1:compile
[INFO] |  +- commons-collections:commons-collections:jar:2.1:compile
[INFO] |  +- commons-digester:commons-digester:jar:1.5:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- commons-validator:commons-validator:jar:1.1.3:compile
[INFO] |  +- oro:oro:jar:2.0.7:compile
[INFO] |  +- antlr:antlr:jar:2.7.2:compile
[INFO] |  \- commons-lang:commons-lang:jar:2.6:compile (version managed from 2.0)
[INFO] +- displaytag:displaytag:jar:1.2:compile
[INFO] |  +- com.lowagie:itext:jar:1.3:compile
[INFO] |  +- org.slf4j:jcl104-over-slf4j:jar:1.4.2:compile
[INFO] |  \- org.slf4j:slf4j-log4j12:jar:1.4.2:compile
[INFO] |     +- org.slf4j:slf4j-api:jar:1.4.2:compile
[INFO] |     \- log4j:log4j:jar:1.2.13:compile
[INFO] +- taglibs:request:jar:1.0.1:compile
[INFO] +- org.apache.poi:poi:jar:3.8:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.4:compile (version managed from 1.5)
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- javax.servlet:jsp-api:jar:2.0:provided
[INFO] +- com.xxx.busservices:cdm:jar:623377.7:compile
[INFO] +- com.xxx.busservices:homeratingservice-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.busservices:motorratingservice-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.techservices:entrefdata-java-client:jar:1011147.2:compile
[INFO] +- com.xxx.techservices:auditservice-java-client:jar:626434.4:compile
[INFO] +- com.xxx.framework:framework:jar:626434.4:compile
[INFO] +- com.xxx.ibis:xxx-logging:jar:956942.1:compile
[INFO] +- weblogic:wlfullclient:jar:10.3:provided
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2.2:compile
[INFO] \- commons-io:commons-io:jar:2.1:compile

cdm.jar包含一個名為FactorValueLite的類,它是正確的版本,在motorratingservice-java-client.jar也存在該類,它是錯誤的版本,該jar似乎首先被加載到類路徑中。

我懷疑您在發生故障的本地存儲庫(正在構建的計算機上)中有過時的工件。

嘗試刪除它,或指定其他路徑(僅出於測試目的)。 例如:

mvn clean package -Dmaven.repo.local=/tmp/repository

如果通過了,那么解決方法很簡單:刪除存儲庫。

您可以將URL Class.getProtectionDomain().getCodeSource().getLocation() (“ file:jar:...”)獲取到使用的jar。 我的猜測是應用程序服務器的lib目錄中存在不同的jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM