1

嗨 StackOverflow 社区,

我有一个已部署到 JBoss Wildfly 8.2 实例的 WAR。同样在 Wildfly,我创建了两个模块:

  1. 第三方 JMS JCA 适配器模块,
  2. 和一个模型模块 (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 文件中指定一些额外的信息吗?

谢谢你的帮助!

4

1 回答 1

2

假设您model.jar对应于您的com.company.model模块,您的 WAR 类加载器现在会看到模型类两次,既来自它自己的库,也来自WEB-INF/lib模块依赖项。

您应该导入或嵌入模块/库,但不能同时导入或嵌入。

顺便说一句,导入 RAR 模块看起来有点可疑。您永远不应该依赖资源适配器的实现。也许您可以分解出一个 API 模块并导入它。

于 2015-01-16T19:25:14.597 回答