調試這些問題的正確方法是什麼?WildFly 8/JBoss:調試Java EE類加載器鏈接錯誤的一般方法
在我來說,我有一個LinkageError類我的Java EE Web項目中大規模的煩惱:
問題
我包括JSF API(JBoss的,JSF的api_2.2_spec-2.2.5.jar )放到我的wildfly模塊目錄中,即它將由Wildfly classloader加載。 我有外部庫也依賴於JSF實現(例如Primefaces和OmniFaces)。 此外,要讓構建過程無誤地運行,我必須將庫作爲單獨的EAR庫添加。
奇怪的方式是添加一個實現帶有faces事件參數的函數的bean,例如,
public void myValueChangeListener(ValueChangeEvent e) {
// do sth.
}
實現這些功能的結果...
10:22:18,571 WARN [org.jboss.modules] (MSC service thread 1-1) Failed to define class javax.faces.event.ValueChangeEvent in Module "javax.faces.api:main" from local module loader @468a169f (finder: local module finder @13d344e7 (roots: /home/user/app-server/wildfly8/modules,/home/user/app-server/wildfly8/modules/system/layers/base)): java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"
...起點對我的嚴重
10:22:18,578 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-1) Critical error during deployment: : java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"
(除去參數允許建立一個沒有錯誤的項目)
問題
如何應對這樣的問題?我需要關於類加載順序的概述。可能有一種方法可以顯示整個類加載器樹或任何將執行相同操作的分析工具。
那麼,你是對的,不要手動添加庫到項目中。另一個問題是業務邏輯和Web層之間缺少分離。現在我刪除了特定的jsf實現,但當我嘗試在動作偵聽器實現中捕獲我的事件時,由於類加載錯誤,我的bean未在部署過程中實例化:從[Module「deployment.myApp輸入javax.faces.event.ValueChangeEvent .ear.appCore.jar:main「from Service Module Loader]找不到。 –