如何在 JBoss 6.2 EAP 中安装 WebSphere MQ 资源适配器 (wmq.jmsra.rar)?

How to install WebSphere MQ resource adapter (wmq.jmsra.rar) in JBoss 6.2 EAP?

设计: 我有一个队列管理器 (EXAMPLE.QM),带有服务器连接通道 (EXAMPLE.CHANNEL)、请求队列 (EXAMPLE.TEST.QUEUE ),以及回复队列 (EXAMPLE.TEST.REPLY)。我的应用程序将使用消息驱动的 bean (MDB) 来侦听 EXAMPLE.TEST.QUEUE。当消息到达时,将创建一个 MDB 实例并完成业务逻辑,其中包括查询数据库,然后将回复放入 EXAMPLE.TEST.REPLY 队列。这是一笔交易。如果发生崩溃或任何故障,将捕获异常并回滚所有内容。我想在服务器端为 MQ 和数据库做连接池。

设置: WebSphere MQ 7.0.1,JBoss 6.2 EAP,Java 1.7.0_21,IBM DB2 9.7

我从 MQ_INSTALLATION_PATH\java\lib\jca 获得了 wmq.jmsra.rar 我也得到了 com.ibm.mqetclient.jar

根据 Redhat installation guide 为了支持 XATransactions,我使用命令 jar -uf wmq.jmsra.rar [=65 重新打包了 wmq.jmsra.rar 以包含 com.ibm.mqetclient.jar =]

您可以跳过下一段并查看下面提供的 xml 片段以获取相同信息。

这样做之后,我使用了管理控制台,而不是手动将 wmq.jmsra.rar 放入 JBoss 部署目录。然后我继续在资源适配器下的配置文件视图中添加。我将 Archive 设置为 wmq.jmsra.rar 并将 TX 设置为 XATransaction。然后,我将属性设置为以下内容:logWriterEnabled - true、maxConnections - 10、reconnectionRetryCount - 5、traceLevel - 6、traceEnabled - true、reconnectionRetryInterval - 300000 和 connectionConcurrency - 5。这样做之后,我添加了一个连接定义。我将其命名为 WMQ_ConnectionFactory、JNDI - java:jboss/WMQ_ConnectionFactory 和连接 Class - com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl。我将属性设置如下:port - 1414、hostName - localhost、channel - EXAMPLE.CHANNEL、transportType - BINDINGS_THEN_CLIENT、failIfQuiesce - true 和 queueManager - EXAMPLE.QM。然后我继续添加 2 个管理对象。 1st 我命名为 EXAMPLE_REQ_Queue、JNDI - java:jboss/EXAMPLE_REQ_Queue 和 Class 名称 - com.ibm.mq.connector.outbound.MQQueueProxy。我拥有以下属性:useJNDI - true、readAheadClosePolicy - ALL、startTimeout - 10000、destination - EXAMPLE.TEST.REQUEST 和 destinationType - javax.jms.Queue。我将第二个管理对象命名为 EXAMPLE_REP_Queue、JNDI - java:jboss/EXAMPLE_REP-Queue 和 class 名称 - com.ibm.mq.connector.outbound.MQQueueProxy。我给了它以下属性:failifQuiesce - true、baseQueueManagerName - EXAMPLE.QM、persistence - HIGH、encoding - NNN、baseQueueName - EXAMPLE.TEST.REPLY、targetClient - MQ 和 expiry 300000。

这是 standalone.xml 文件中的一个片段

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
        <resource-adapters>
            <resource-adapter id="wmq.jmsra.rar">
                <archive>
                    wmq.jmsra.rar
                </archive>
                <transaction-support>XATransaction</transaction-support>
                <config-property name="logWriterEnabled">
                    true
                </config-property>
                <config-property name="maxConnections">
                    10
                </config-property>
                <config-property name="traceEnabled">
                    true
                </config-property>
                <config-property name="traceLevel">
                    6
                </config-property>
                <config-property name="reconnectionRetryCount">
                    5
                </config-property>
                <config-property name="reconnectionRetryInterval">
                    300000
                </config-property>
                <config-property name="connectionConcurrency">
                    5
                </config-property>
                <connection-definitions>
                    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/WMQ_ConnectionFacotry" enabled="true" pool-name="WMQ_ConnectionFactory">
                        <config-property name="port">
                            1414
                        </config-property>
                        <config-property name="hostName">
                            localhost
                        </config-property>
                        <config-property name="channel">
                            EXAMPLE.CHANNEL
                        </config-property>
                        <config-property name="failIfQuiesce">
                            true
                        </config-property>
                        <config-property name="transportType">
                            BINDINGS_THEN_CLIENT
                        </config-property>
                        <config-property name="queueManager">
                            EXAMPLE.QM
                        </config-property>
                        <security>
                            <application/>
                        </security>
                        <validation>
                            <background-validation>false</background-validation>
                        </validation>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/EXAMPLE_REQ_Queue" enabled="true" use-java-context="false" pool-name="EXAMPLE_REQ_Queue">
                        <config-property name="useJNDI">
                            true
                        </config-property>
                        <config-property name="startTimeout">
                            10000
                        </config-property>
                        <config-property name="destination">
                            EXAMPLE.TEST.REQUEST
                        </config-property>
                        <config-property name="readAheadClosePolicy">
                            ALL
                        </config-property>
                    </admin-object>
                    <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/EXAMPLE_REP_Queue" enabled="true" use-java-context="false" pool-name="EXAMPLE_REP_Queue">
                        <config-property name="failIfQuiesce">
                            true
                        </config-property>
                        <config-property name="baseQueueManagerName">
                            EXAMPLE.QM
                        </config-property>
                        <config-property name="persistence">
                            HIGH
                        </config-property>
                        <config-property name="encoding">
                            NNN
                        </config-property>
                        <config-property name="baseQueueName">
                            EXAMPLE.TEST.REPLY
                        </config-property>
                        <config-property name="targetClient">
                            MQ
                        </config-property>
                        <config-property name="expiry">
                            300000
                        </config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>
    </subsystem>

问题: 我收到以下异常:

15:54:53,325 ERROR [org.jboss.msc.service.fail] (ResourceAdapterDeploymentService Thread Pool -- 1) MSC000001: Failed to start service jboss.ra.deployment."wmq.jmsra.rar": org.jboss.msc.service.StartException in service jboss.ra.deployment."wmq.jmsra.rar": JBAS010446: Failed to start RA deployment [wmq.jmsra] at org.jboss.as.connector.services.resourceadapters.deployment.AbstractResourceAdapterDeploymentService.run(AbstractResourceAdapterDeploymentService.java:279) [jboss-as-connector-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21] at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21] at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1] Caused by: org.jboss.jca.deployers.common.DeployException: IJ020060: Unable to inject: com.ibm.mq.connector.outbound.MQQueueProxy property: destination value: EXAMPLE.TEST.REQUEST at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.initAdminObject(AbstractResourceAdapterDeployer.java:907) [ironjacamar-deployers-common-1.0.23.Final-redhat-1.jar:1.0.23.Final-redhat-1] at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:2382) [ironjacamar-deployers-common-1.0.23.Final-redhat-1.jar:1.0.23.Final-redhat-1] at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterXmlDeploymentService$AS7RaXmlDeployer.doDeploy(ResourceAdapterXmlDeploymentService.java:185) [jboss-as-connector-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterXmlDeploymentService.start(ResourceAdapterXmlDeploymentService.java:106) [jboss-as-connector-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21] at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21] 15:54:53,343 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS018559: Deployed "wmq.jmsra.rar" (runtime-name : "wmq.jmsra.rar") 15:54:53,344 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report JBAS014777: Services which failed to start: service jboss.ra.deployment."wmq.jmsra.rar": org.jboss.msc.service.StartException in service jboss.ra.deployment."wmq.jmsra.rar": JBAS010446: Failed to start RA deployment [wmq.jmsra]

我猜主要部分是 引起的:org.jboss.jca.deployers.common.DeployException:IJ020060:无法注入:com.ibm.mq.connector.outbound.MQQueueProxy 属性:目标值:EXAMPLE.TEST.REQUEST 在此之前,我遇到了同样的错误,而是说 destinationType 值:javax.jms.Queue。然后我继续删除 属性 并再次尝试,现在我收到了这个错误。我不确定下一步该做什么。

我一直关注的教程: IBM - The WebSphere MQ resource adapter、Redhat Jboss 文档 - JCA 架构章节和 Oracle - 消息驱动的 Bean Java EE6 教程

我的代表只允许我 post 2 个链接,所以最后两个教程没有链接。 任何帮助将不胜感激。

我在将 MQ RAR 部署到 JBoss 时遇到了一些不同的问题,但解决方案和过程概述了 here should work for you. The specific files to look at are here。这些文件是 iron-jacamar(jboss 作为 JCA 提供者)描述符。

  • ra.xml:WMQ RAR 描述符
  • ironjacamar.xml: 定义 WMQ 连接参数和管理对象。

我最终删除了导致异常弹出的所有属性。我试图设置的属性用于入站通信,结果证明这并不是设置它们的合适位置。相反,这些应该在消息驱动 Bean (MDB) 的部署描述符中设置。该文件称为 ejb-jar.xml。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar 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/ejb-jar_3_0.xsd"
     version="3.0"
>
<enterprise-beans>
     <message-driven>
          <ejb-name>MyMDB</ejb-name>
          <ejb-class>com.foo.MyMDB</ejb-class>
          <messaging-type>javax.jms.MessageListener</messaging-type>
          <transaction-type>Container</transaction-type>
          <activation-config>
               <activation-config-property>
                    <activation-config-property-name>
                         destinationType
                    </activation-config-property-name>
                    <activation-config-property-value>
                         javax.jms.Queue
                    </activation-config-property-value>
               </activation-config-property>
               <activation-config-property>
                    <activation-config-property-name>
                         destination
                    </activation-config-property-name>
                    <activation-config-property-value>
                         EXAMPLE.TEST.REQUEST
                    </activation-config-property-value>
                </activation-config-property>
                <!--SET OTHER PROPERTIES-->
          </activation-config>
     </message-driven>
</enterprise-beans>
</ejb-jar>

希望对您有所帮助。