Jboss EAP 7 - 如何从部署中排除隐式模块(javax.jms)?

Dil*_*ral 8 java jboss jboss-eap-7

我不认为我会在这里结束,但经过很多谷歌和StackOverflow搜索后我才知道.

这是我的确切问题,除了我不能进行代码更改.

我正在尝试部署的WAR包括一个JMS库(即javax.jms,我不能将其排除在WAR之外).默认情况下,它已由Jboss EAP 7加载.路径jar是这样的jboss/modules/system/layers/base/javax/jms/api/ain/jboss-jms-api_2.0_spec-1.0.0.Final-redhat-1.jar.由于这两个不同版本的相同类加载我得到ClassCastException.

org.apache.activemq-ra.ActiveMQConnectionFactory cannot to be cast to javax.jms.ConnectionFactory
Run Code Online (Sandbox Code Playgroud)

所以,我希望Jboss 加载javax.jms,以便我的应用程序可以使用WAR附带的JAR.

所以,我想知道是否有任何方法可以全局排除模块(对于所有WAR部署).

每次部署排除它也会起作用.我确实意识到它可以使用jboss-deployment-structure.xml来实现,但我无法让它工作.

这是我尝试过的:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
        xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="javax" />
            <subsystem name="javax.jms" />
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure
    xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="javax" />
            <module name="javax.jms" />
            <module name="javax.jms.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

我把文件放在WEB-INF目录中.它没用.它仍然从Jboss EAP的modules文件夹加载JMS类.那么,我该怎么做呢?

Tai*_*air 3

正确的jboss-deployment-structure.xml在这里:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="messaging-activemq"></subsystem>
        </exclude-subsystems>
        <exclusions>
            <module name="javax.jms.api"></module>
        </exclusions>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

这样您就可以排除消息传递子系统和 JMS api。