2017-02-17 106 views
4

我想了解父親 - 最後在應用程序JBoss應用程序服務器中加載。我們在JBoss 4.2.1 GA中部署了一個遺留應用程序。我們正在嘗試使用父代最後一次加載。我是指link。 我想學習一個家長最後一次加載。所以用maven-jar-plugin和配置 - > addDefaultImplementationEntries = true創建了簡單的Maven jar包應用程序。我從同一個jar創建maven應用程序創建了2個jar版本1.0.0和1.0.1。該jar包含單個類TestClass和一個簡單的String返回方法,該方法返回從類加載的jar版本。 我想要體驗使用java2ClassLoadingCompliance。我已經在服務器/ deploy/MyApplication/WEB-INF/lib中打包了版本1.0.0 jar(我的web應用程序是一個簡單的servlet應用程序,它調用該類的方法,從而打印從其調用的jar版本號)和server/lib中的版本1.0.1 jar。JBoss類加載父 - 最後加載

:按道理它沒有意義在應用程序中使用的jar的舊版本,並與目前在服務器lib中的較新版本覆蓋它,只是想體驗類加載。

我曾嘗試以下

  1. 沒有在META-INF文件夾中任何的jboss-web.xml中。
  2. 我試着在META-INF中引入jboss-we.xml,並用java2ClassLoadingCompliance = false做相同的操作。
  3. With java2ClassLoadingCompliance = true。

應用程序庫中的所有時間類都將被應用程序加載。

我的jboss-web.xml文件看起來像reference

<jboss-web> 
    <class-loading java2ClassLoadingCompliance="true"> 
     <loader-repository> 
     com.example:archive=JBossClassLoadingTestServlet-0.0.1-SNAPSHOT.ear 
     <loader-repository-config>java2ParentDelegation=true</loader-repository-config> 
     </loader-repository> 
    </class-loading> 
</jboss-web> 

有人可以幫助我理解到JBoss父最後的配置?我在這裏做的錯誤是什麼,總是從應用程序庫中獲得類加載?

+0

哦,上帝的JBoss 4.2,有什麼不對嗎? :-o – Aaron

回答

0

恐怕您的鏈接與您的實驗沒有太大關係。它與EAR部署更相關,其中存在多模塊部署,需要多個版本的lib進行隔離。

就你而言,你只需在一個Jar中覆蓋lib。

以下是從Servlet Spec:

它也是應用程序類加載器被實施爲使得 使得WAR內包裝的類和資源被加載優先於 類和資源駐留在容器範圍推薦庫JAR。

因此,JBoss遵循規範,它總是首先加載應用程序庫。

我沒有找到這樣的老版本的文件,但它應該類似AS7

在最高優先順序到最低優先級

  1. 系統相關性 - 這些是添加依賴由容器自動將模塊發送到模塊,包括Java EE API。
  2. 用戶依賴關係 - 這些依賴關係是通過JBoss-deployment-structure.xml或Dependencies:清單條目添加的。
  3. 本地資源 - 部署內部打包的類文件,例如來自WEB-INF/classes或WEB-INF/lib的類文件。
  4. 部署間依賴關係 - 這些依賴於耳部署中的其他部署。這可以包括ear的lib目錄中的類,或者其他EJB jar中定義的類。

相關: