好吧,在没有任何其他答案的情况下,这就是我想出的解决方案。这有点像 hack,但它与 Active MQ 和 WebSphere MQ 完美结合。前提是我为每个要连接的 JMS 系统部署 2 个不同的 RAR。一个是我从 Maven 存储库中检索到的未修改的 xxx.rar 文件。第二个是我的“配置 RAR”,其中包含原始 rar 的ra.xml副本,然后是ironjacamar.xml配置文件。这两个都放在 config rar 的META-INF文件夹中。
对于每个给定的供应商 RAR,ironjacamar.xml文件可以使用rar-info.sh生成,该文件包含在 Iron Jacamar 1.1 下载中。该过程在标题为10.1 的部分中进行了描述。用户指南中的资源适配器信息工具。
以 ActiveMQ 5.8.0 为例:
生成的ironjacamar.xml是从rar-info.sh输出的完整输出中提取的。在文件中,它的标题是:
Deployment Descriptor:
----------------------
将成为ironjacamar.xml的文件的提取部分在该标头之后开始并以</resource-adapters>结束。
应应用以下编辑:
- 删除开始
<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>
再次强调,这个(实际上非常简单的)解决方法对我来说很重要,因为任何以“编辑名为.....的服务器文件” 或“在管理控制台中...... ”开头的部署过程都不是-starter 在我的目标环境中。我需要假设不能访问 vanilla JBoss 7 (EAP 6.1) 内部目录,也不能访问控制台,因为可能会在 Jenkins 构建等结束时部署.. (更不用说,编辑文件以添加部署本身就不是一件容易的事)。
可以在此github 项目中更详细地查看此解决方法和其他解决方法,该项目专门用于共享一些我发现的工作配置,否则这些配置相当难以获得。
PS 由于这是唯一提供的答案,我将正确答案授予自己,但我会放弃它以获得更好的答案。