2

我试图弄清楚如何在 JBoss 7 中部署资源适配器激活。基本上,我希望能够打包和部署完整的应用程序而无需修改基本服务器配置,部分原因是我想使用引导测试Arquillian 也是因为我希望能够将我的包部署到我可能无法选择修改基础服务器配置的环境中。

这就是我现在的位置。我创建了一个包含 active-mq rar(也在 application.xml 中配置)的 EAR。这个 ear 本身使用 maven ear 插件和 jboss-as-maven-plugin 完美地构建和部署。

但是,为了激活 rar,我能想出的唯一方法是破解 rar 文件本身并将ironjacamar.xml添加到 rar 的META-INF目录中。但为了做到这一点,我不得不在我的 maven repo 中破解 rar,而我并不想这样做。

我试图让 maven 在我的 maven pom 的打包阶段添加Ironjacamar.xml,但这也有点小技巧,无论如何我都无法让它工作。(自我注意:检查部署覆盖

我还考虑过使用 jboss-cli 编写添加连接工厂的脚本,但文档明确指出这是为内置的 hornet-mq 服务器创建工厂,这不是我的目标,并在服务器中交换默认的 JMS 实现需要对服务器的配置进行一些大手术。

我查看了所有快速入门项目,并观察到通过包中包含的-jms.xml-ds.xml文件部署的各种结构,但它们也分别特定于 hornet-mq 和 JDBC。(我希望部署者可能支持-rar.xml等)。

我能想到的唯一另一种方法,我不知道它是否受支持,是在我的包中定义一个子系统部署。有这样的事吗?

===== 更新 =====

我尝试添加一个 cli 覆盖更新(就像我使用 maven jboss 作为插件一样),但它没有效果。

deployment-overlay add --name=rarActivation  --content=META-INF/ironjacamar.xml=\..\container\src\main\resources\ironjacamar.xml --deployments=activemq-rar.rar --redeploy-affected
4

1 回答 1

4

好吧,在没有任何其他答案的情况下,这就是我想出的解决方案。这有点像 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>结束。

应应用以下编辑:

  1. 删除开始<resource-adapters><resource-adapter>标签并替换为<ironjacamar.xml>开始标签。
  2. 删除开始<archive>标签。
  3. 删除结束标签</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 由于这是唯一提供的答案,我将正确答案授予自己,但我会放弃它以获得更好的答案。

于 2013-10-07T13:30:24.750 回答