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

时间:2015-06-18 00:24:11

标签: jboss connection-pooling ibm-mq redhat message-driven-bean

设计:我有一个带有服务器连接通道(EXAMPLE.CHANNEL)的队列管理器(EXAMPLE.QM),请求队列(EXAMPLE.TEST.QUEUE)和回复队列(EXAMPLE.TEST) 。答复)。我的应用程序将使用消息驱动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 com.ibm.mqetclient重新打包wmq.jmsra.rar以包含com.ibm.mqetclient.jar的.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和Connection Class - com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl。我将属性设置如下:port - 1414,hostName - localhost,channel - EXAMPLE.CHANNEL,transportType - BINDINGS_THEN_CLIENT,failIfQuiesce - true和queueManager - EXAMPLE.QM。然后我继续添加2个管理对象。首先,我命名为EXAMPLE_REQ_Queue,JNDI - java:jboss / EXAMPLE_REQ_Queue,以及类名 - 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,以及类名 - 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:无法启动服务jboss.ra.deployment。&#34; wmq.jmsra.rar&# 34;:服务jboss.ra.deployment中的org.jboss.msc.service.StartException。&#34; wmq.jmsra.rar&#34;:JBAS010446:无法启动RA部署[wmq.jmsra]       在org.jboss.as.connector.services.resourceadapters.deployment.AbstractResourceAdapterDeploymentService $ 1.run(AbstractResourceAdapterDeploymentService.java:279)[jboss-as-connector-7.3.0.Final-redhat-14.jar:7.3.0.Final -redhat-14]       在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]       在java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_21]       在org.jboss.threads.JBossThread.run(JBossThread.java:122)[jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1]   引起:org.jboss.jca.deployers.common.DeployException:IJ020060:无法注入:com.ibm.mq.connector.outbound.MQQueueProxy属性:目标值:EXAMPLE.TEST.REQUEST       在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]       在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]       在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。最终的redhat-14]       在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]       在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]       在java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_21]   15:54:53,343 INFO [org.jboss.as.server](控制器启动线程)JBAS018559:已部署&#34; wmq.jmsra.rar&#34; (runtime-name:&#34; wmq.jmsra.rar&#34;)   15:54:53,344 INFO [org.jboss.as.controller](控制器启动线程)JBAS014774:服务状态报告   JBAS014777:无法启动的服务:服务jboss.ra.deployment。&#34; wmq.jmsra.rar&#34;:org.jboss.msc.service.StartException in service jboss.ra.deployment。&#34; wmq .jmsra.rar&#34;:JBAS010446:无法启动RA部署[wmq.jmsra]

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

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

我的代表只允许我发布2个链接,因此最后两个教程没有链接。 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我将MQ RAR部署到JBoss时遇到了稍微不同的问题,但是here概述的解决方案和过程应该对您有用。要查看的具体文件是here。这些文件是iron-jacamar(作为JCA提供者的jboss)描述符。

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

答案 1 :(得分:0)

我最终最终删除了导致弹出异常的所有属性。我试图设置的属性是用于入站通信,事实证明这不是设置它们的合适位置。相反,这些应该在消息驱动器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>

希望这有帮助。