我没想到我最终会在这里,但经过了大量的谷歌和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
所以,我希望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>
和
<?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>
我把文件放在WEB-INF目录中,但它没有起作用。 它仍然从Jboss EAP的modules文件夹加载JMS类。 那么,我应该如何正确地做到这一点?
messaging-activemq
,例如在排除中<subsystem name="messaging-activemq"/>
。然而,除非您还包括实现,否则我不确定 JMS 在您的部署中是否能正常工作。 - James R. Perkins