如何在 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>
希望对您有所帮助。
设计: 我有一个队列管理器 (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>
希望对您有所帮助。