2012-05-12 24 views
1

我的應用程序在JBoss 5.1.0.GA上使用Spring Framework 3.0.5。該框架由服務器提供,即框架庫位於server/<servername>/lib目錄中。服務器由第三方管理,因此我無法將任何庫添加到此服務器提供的環境中。有必要在我的應用程序中使用cglib。 Spring將其用於代理目的。 cglib不在server/<servername>/lib中,因此我已將cglib-2.2.2.jar包含到我的應用程序.war與maven。Spring Framework在JBoss上看不到cglib

的問題是,下面的錯誤上部署occures:

不能代理目標類,因爲CGLIB2不可用。將CGLIB 添加到類路徑或指定代理接口。

我檢查了我的應用程序.war的CGLIB,發現它在WEB-INF/lib目錄。 AFAIK位於此目錄中的罐子中的所有課程都位於課程路徑中,以及server/<servername>/lib中的罐子課程。爲什麼Spring找不到cglib?

回答

3

爲了這個問題的目的,JBoss類加載器層次結構只能看起來「向下」,即由系統類加載器加載的類不能在應用程序的lib目錄中看到類。所以服務器lib目錄中的Spring庫不能在應用程序的lib目錄中看到cglib。

可能的解決辦法,按優先順序:

  1. 擺脫從服務器的lib目錄中的JAR春季的。他們不應該在那裏,這是一個壞主意。但是你說你不能這樣做。
  2. 將cglib添加到服務器的lib目錄中。不是出於上述相同原因的選項。
  3. 將Spring JAR的重複項添加到應用程序的lib目錄中。確保它們與服務器完全一致,否則會冒着奇怪的類版本衝突的風險。這應該允許解決cglib。

選項3遠非理想,因爲在類加載器之間重複類是類加載器問題的一個方法,但它可能是您唯一的選擇。