在 JBoss 应用程序服务器中,如何确保部署中的所有模块对 jar 库使用相同的类加载器?
In JBoss application server, how do I make sure that all modules in a deployment use the same Classloader for a jar library?
我有一个可部署的耳朵,我正在将其部署到 JBoss 应用程序服务器。我正在重构我的代码,以便我的实体 classes 在一个单独的 jar 库中声明,该库可以由 ear 中的不同模块共享。
但是,我现在收到以下错误:
java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase
EntityBase
是一个 public 摘要 class。 Project
是扩展 EntityBase
的 public class。两个 classes 都已移至我的新 jar 库。这个错误让我得出结论,classloader.
有问题
我的耳朵结构如下:
myapp.ear
|
|--- webportal.war
|--- restapi.war
|--- dal.jar
我的实体已在 dal.jar 中定义,war 库使用它来访问我的数据库。我现在已经从 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 中的所有 classes 都使用相同的 classloader 加载?
事实证明这是一个相对简单的解决方案。我修改了 webportal.war、restapi.war 和 dal.jar 的 pom.xml 文件,方法是为模型依赖项添加一个值为 provided
的 scope
标记:
<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
然后我修改了 pom.xml 为 myapp.ear 通过添加一个依赖到 model.jar 没有范围标签(这会给依赖默认范围,我认为是 compile
):
<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
我有一个可部署的耳朵,我正在将其部署到 JBoss 应用程序服务器。我正在重构我的代码,以便我的实体 classes 在一个单独的 jar 库中声明,该库可以由 ear 中的不同模块共享。
但是,我现在收到以下错误:
java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase
EntityBase
是一个 public 摘要 class。 Project
是扩展 EntityBase
的 public class。两个 classes 都已移至我的新 jar 库。这个错误让我得出结论,classloader.
我的耳朵结构如下:
myapp.ear
|
|--- webportal.war
|--- restapi.war
|--- dal.jar
我的实体已在 dal.jar 中定义,war 库使用它来访问我的数据库。我现在已经从 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 中的所有 classes 都使用相同的 classloader 加载?
事实证明这是一个相对简单的解决方案。我修改了 webportal.war、restapi.war 和 dal.jar 的 pom.xml 文件,方法是为模型依赖项添加一个值为 provided
的 scope
标记:
<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
然后我修改了 pom.xml 为 myapp.ear 通过添加一个依赖到 model.jar 没有范围标签(这会给依赖默认范围,我认为是 compile
):
<dependency>
<groupId>myproject</groupId>
<artifactiId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>