好吧,在没有任何其他答案的情况下,这就是我想出的解决方案。这有点像 hack,但它与 Active MQ 和 WebSphere MQ 完美结合。前提是我为每个要连接的 JMS 系统部署 2 个不同的 RAR。一个是我从 Maven 存储库中检索到的未修改的 xxx.rar 文件。第二个是我的“配置 RAR”,其中包含原始 rar 中 ra.xml 的副本,然后是 ironjacamar.xml 配置文件。这两个都放在 config rar 的 META-INF 文件夹中。
对于每个给定的供应商 RAR,可以使用 Iron Jacamar 1.1 下载中包含的 rar-info.sh 生成 ironjacamar.xml 文件。该过程在标题为10.1. Resource adapter information tool int user guide 的部分中进行了描述。
以 ActiveMQ 5.8.0 为例:
生成的 ironjacamar.xml 是从 rar-info.sh 输出的完整输出中提取的。在文件中,它的标题是:
Deployment Descriptor:
----------------------
将成为 ironjacamar.xml 的文件的提取部分在该标头之后开始,并以 结束。
应应用以下编辑:
- 删除开头的
<resource-adapters> 和<resource-adapter> 标记并替换为<ironjacamar.xml> 开头的标记。
- 去掉开头的
<archive>标签。
- 删除结束
</resource-adapter> 和 </resource-adapters> 标记并替换为 </ironjacamar.xml> 结束标记。
每种类型的连接(连接、队列和主题)都有连接工厂的示例定义,其中包括 JBoss 将工厂绑定到的 JNDI 名称。编辑这些你认为合适的。我只需要 Connection 工厂,所以我编辑了 JNDI 名称并删除了其他两个定义。
有目标引用的示例定义(ActiveMQ 几乎不需要这些定义,但对其他人有帮助)。一个用于队列,一个用于主题。编辑这些你认为合适的。
maven 依赖:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-rar</artifactId>
<version>5.8.0</version>
<type>rar</type>
</dependency>
可部署的 EAR 如下所示:
sample.ear
META-INF
application.xml
activemq-rar.rar (file)
activemq-config.rar (directory)
ra.xml (extracted from activemq-rar.rar or generated)
ironjacamar.xml (generated, then edited)
实际上,ra.xml 可以从“真正的”rar 中提取出来,但它也是在 IronJacamar rar-info.sh 输出文件中生成的,所以从其中一个中获取。
application.ear 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>JBoss7Sample Ear</display-name>
<!-- Sample for WebSphereMQ
<module><connector>wmq.jmsra.rar</connector></module>
<module><connector>wmq-config.rar</connector></module>
-->
<module><connector>activemq-rar.rar</connector></module>
<module><connector>amq-config.rar</connector></module>
</application>
再次强调,这个(实际上很简单)变通方法对我来说很重要,因为任何以 “编辑名为..... 或“在管理控制台中....." 是我所针对的环境中的非入门者。我需要假设无法访问 vanilla JBoss 7 (EAP 6.1) 内部目录,也无法访问控制台,因为有人可能会在 Jenkins 构建等结束时进行部署。(更不用说,编辑文件以添加部署本身并不是一件容易的事)。
可以在github project 中更详细地查看此解决方法和其他解决方法,该解决方法是专门为分享一些我发现很难获得的工作配置而设置的。
P.S.由于这是唯一提供的答案,我将正确答案授予自己,但我会放弃它以获得更好的答案。