您好,StackOverflow社区,
我有一个WAR,我已经部署到JBoss Wildfly 8.2实例 . 同样在Wildfly中,我创建了两个模块:
-
第三方JMS JCA适配器模块,
-
和一个模型模块(model.jar),它包含用于在JMS代理和WAR之间进行通信的消息类
WAR有一个jboss-deployment-structure.xml,它声明了对JCA模块的依赖:
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<module name="com.thirdparty.mq.ra" slot="main"/>
<module name="com.company.model" slot="main">
</dependencies>
</deployment>
</jboss-deployment-structure>
WAR将model.jar文件打包在其WEB-INF / lib文件夹中 .
JMS模块依赖于模型模块:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.thirdparty.mq.ra">
<resources>
<resource-root path="."/>
<resource-root path="thirdparty-jms-provider.jar"/>
...
<resource-root path="thirdparty-lib.jar"/>
</resources>
<dependencies>
<module name="com.company.model"/>
<module name="javax.api"/>
<module name="javax.jms.api"/>
<module name="javax.transaction.api"/>
<module name="javax.management.j2ee.api"/>
<module name="javax.resource.api"/>
<module name="org.jboss.invocation"/>
<module name="org.jboss.remote-naming" optional="true"/>
<module name="org.slf4j"/>
</dependencies>
</module>
运行时,我得到以下异常:
Caused by: java.lang.ClassCastException: com.company.model.web.dto.WebAuthenticationResponse cannot be cast to com.company.model.web.dto.WebAuthenticationResponse
我怀疑这是一个类加载器问题 . 我是否需要在module.xml或jboss-deployment-structure.xml文件中指定一些额外信息?
谢谢你的帮助!
1 回答
假设您的
model.jar
对应于您的com.company.model
模块,您的WAR类加载器现在可以看到两次模型类,它们都来自WEB-INF/lib
中自己的库以及模块依赖项 .您应该导入或嵌入模块/库,但不能同时导入或嵌入模块/库 .
顺便说一句,导入RAR模块看起来有点可疑 . 您永远不应该依赖资源适配器的实现 . 也许你可以分解出一个API模块并导入它 .