簡體   English   中英

在JBoss應用程序服務器中,如何確保部署中的所有模塊對jar庫使用相同的Classloader?

[英]In JBoss application server, how do I make sure that all modules in a deployment use the same Classloader for a jar library?

我有一個可部署到JBoss應用程序服務器的耳朵。 我正在重構代碼,以便在一個單獨的jar庫中聲明我的實體類,該類庫可以由耳朵中的不同模塊共享。

但是,我現在收到以下錯誤:

java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase

EntityBase是一個公共抽象類。 Project是擴展EntityBase的公共類。 這兩個類都已移到我的新jar庫中。 該錯誤使我得出結論,即類加載器存在問題。

我的耳朵的結構如下:

myapp.ear
 |
 |--- webportal.war
 |--- restapi.war
 |--- dal.jar

我的實體已在dal.jar中定義,戰爭圖書館使用它來訪問我的數據庫。 現在,我從dal.jar中刪除了實體,並將其放置在單獨的model.jar中。 我已經將model.jar列為myapp.ear的pom.xml中的依賴項。 它在webportal.war,restapi.war和dal.jar的pom.xml文件中也作為依賴項列出。 結果,現在將model.jar部署在myapp.ear的lib目錄中。

我對ClassCastException的原因的理解正確嗎? 如果是這樣,我如何打包我的應用程序以確保用相同的類加載器加載model.jar中的所有類?

事實證明這是一個相對簡單的解決方案。 我通過添加scope標簽為模型依賴項provided了一個值來修改webportal.war,restapi.war和dal.jar的pom.xml文件:

<dependency>
    <groupId>myproject</groupId>
    <artifactiId>model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

然后,我通過將沒有范圍標記的依賴項添加到model.jar來修改myapp.ear的pom.xml(這將為該依賴項提供我認為是compile的默認范圍):

<dependency>
    <groupId>myproject</groupId>
    <artifactiId>model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

暫無
暫無

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

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