首页 文章

为什么我的JBoss模块会抛出ClassCastException?

提问于
浏览
1

您好,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 回答

  • 2

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

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

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

相关问题