2014-09-25 23 views
1

[我最初在websphere論壇上發佈的這個bot沒有看到及時的響應。我重新張貼在這裏有稍微內容]websphere classloader在加載slf4j時給出java.lang.LinkageError LoggerFactory

的問題

我添加了一個罐子(稱之爲「foo.jar中」)給我們的企業應用程序(即「的.ear」),創建清單條目等,並發現,當我的EJB實例化FooClient時,websphere在org.slf4j.LoggerFactory上拋出java.lang.LinkageError

我已將類加載器調試添加到跟蹤,沒有發現太多。我希望看到「在哪裏實際上找到了slf4j類」。這裏是條目:

[9/24/14 16:23:01:417 CDT] 00000067 CompoundClass > loadClass org.slf4j.LoggerFactory [email protected][app:yourappServer] Entry 

[9/24/14 16:23:01:418 CDT] 00000067 CompoundClass < loadClass org.slf4j.LoggerFactory java.lang.LinkageError: org.slf4j.LoggerFactory Exit 

我檢查了我的was8目錄,發現slf4j jar的各種副本/版本。

/plugins 
     /osgiappbundles/com.ibm.ws.osgi.applications/aries/slf4j-api-1.5.6.jar 
     /slf4j-api-1.5.6.jar 

/profiles/AppSrv01 
     /installedConnectors/activemq-rar-5.9.1.rar/slf4j-api-1.7.5.jar 
     /wstemp 
       /appdepl14769b0c2de/slf4j-api-1.7.5.jar3472682177251273594.tmp 
       /appdepl14769b0c2de/slf4j-api-1.7.5.jar7922145899030561292.tmp 

另一名開發者告訴我:「你會不會能夠使用foo.jar中」因爲我們需要把「PARENT_LAST」這不是爲這個項目目前的選項。

附加上下文

  • 的Websphere 8.0.0.7
  • RAD 9

問題

  • java.lang.LinkageError的:這是一個「類加載器問題'或'錯誤版本的課堂'問題?我的「錯誤版本的類」問題的經驗我通常會看到「NoSuchMethod」錯誤,而不是實例化異常。

  • 還有其他辦法嗎?

更新

予讀出的位有關的共享庫和「分離的類加載器」,這似乎是溶液。但是由於某些原因,我的RAD/Eclipse UI似乎破壞了,因爲當我將共享庫與應用程序或模塊關聯時,它不會「保存」。它隨後消失。提前

感謝

+0

給我們相關的代碼,你是否在1.7.6中使用了1.5.6 slf4j api中不存在的新東西? – 2014-09-25 16:03:20

回答

0

檢查由foo.jar中,你使用的是一個預期的版本SL4J的:他們是肯定不同的。確保在你的類路徑中有正確的版本優先級:你可以把它放在WEB-INF/lib中,但也可以在WEB-INF/lib中檢查它是否只有一個版本。

要發現你使用,你可以運行

java -verbose:class .... 

這SL4J罐子,JVM將轉儲出什麼它加載,並從那裏。

你說「我通常看到NoSuchMethod錯誤」而不是LinkageError;在這種情況下,該方法存在但有一些其他不兼容性。

如果你想使用它已經存在了WebSphere PARENT_LAST新圖書館
1

是去

如果不是,從應用中移除SLF4J罐子,並使用由供應商提供的版本的方式

相關問題