【问题标题】:How can I deploy a resource-adapter activation in JBoss 7?如何在 JBoss 7 中部署资源适配器激活?
【发布时间】:2017-01-18 02:25:55
【问题描述】:

我试图弄清楚如何在 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,但这也有点麻烦,无论如何我都无法让它工作。 (自我提醒:查看Deployment Overlays

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

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

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

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

我尝试添加一个 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

【问题讨论】:

    标签: maven jms jboss7.x activemq jca


    【解决方案1】:

    好吧,在没有任何其他答案的情况下,这就是我想出的解决方案。这有点像 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 的文件的提取部分在该标头之后开始,并以 结束。

    应应用以下编辑:

    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>
    

    再次强调,这个(实际上很简单)变通方法对我来说很重要,因为任何以 “编辑名为..... 或“在管理控制台中....." 是我所针对的环境中的非入门者。我需要假设无法访问 vanilla JBoss 7 (EAP 6.1) 内部目录,也无法访问控制台,因为有人可能会在 Jenkins 构建等结束时进行部署。(更不用说,编辑文件以添加部署本身并不是一件容易的事)。

    可以在github project 中更详细地查看此解决方法和其他解决方法,该解决方法是专门为分享一些我发现很难获得的工作配置而设置的。

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

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多