如何在JBoss 7中部署资源适配器激活?

时间:2013-09-26 16:40:22

标签: maven jms jboss7.x activemq jca

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

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

但是,为了激活rar,我能够弄清楚的唯一方法是破解rar文件本身并在rar的 META-中添加 ironjacamar.xml INF 目录。但是为了做到这一点,我不得不在我的maven回购中破解我不想做的事情。

我试图让maven在我的maven pom的打包阶段添加 ironjacamar.xml ,但这也是一个黑客攻击,无论如何我无法让它工作。 (自我注意:检查Deployment Overlays

我还考虑过使用jboss-cli编写添加 connection-factory 的脚本,但文档清楚地说明是为内置的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

1 个答案:

答案 0 :(得分:4)

好吧,在没有任何其他答案的情况下,这就是我提出的解决方案。这有点像黑客攻击,但它与Active MQ和WebSphere MQ完美配合。前提是我要为每个要连接的JMS系统部署2个不同的RAR。一个是我从Maven存储库中检索的未触及的xxx.rar文件。第二个是我的“配置RAR”,其中包含原始rar中 ra.xml 的副本,然后是 ironjacamar.xml 配置文件。这两个都放在config rar的 META-INF 文件夹中。

对于每个给定的供应商RAR,可以使用 rar-info.sh 生成 ironjacamar.xml 文件,该文件包含在Iron Jacamar 1.1下载中。该过程在10.1. Resource adapter information tool中标题为user guide的部分中进行了描述。

以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>结束代码。
  4. 每种类型的连接(连接,队列和主题)都有连接工厂的示例定义,其中包含JBoss将工厂绑定到的JNDI名称。根据需要编辑这些内容。我只需要连接工厂,所以我编辑了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中更详细地查看,该{{3}}专门用于分享我发现的一些工作配置,否则很难找到。

    P.S。由于这是唯一提供的答案,我正在给自己一个正确的答案,但我会放弃它以获得更好的答案。