繁体   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