设计:我有一个带有服务器连接 channel (EXAMPLE.CHANNEL)、请求队列 (EXAMPLE.TEST.QUEUE) 和回复队列 (EXAMPLE.TEST.REPLY) 的队列管理器 (EXAMPLE.QM)。我的应用程序将使用消息驱动 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.jar 重新打包了 wmq.jmsra.rar 以包含 com.ibm.mqetclient.jar
您可以跳过下一段并查看下面提供的 xml 片段以获取相同的信息。
这样做之后,我使用管理控制台手动将 wmq.jmsra.rar 放到 JBoss 部署目录中。然后我继续在资源适配器下的配置文件 View 中添加。我将存档设置为 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 和连接类 - com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl。我将属性设置如下:端口 - 1414、主机名 - 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,持久性 - HIGH,编码 - NNN,baseQueueName -EXAMPLE.TEST.REPLY,targetClient - MQ,到期时间 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$1.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:无法注入(inject):com.ibm.mq.connector.outbound.MQQueueProxy 属性:目标值:EXAMPLE.TEST.REQUEST 在此之前,我遇到了同样的错误,而是说destinationType 值:javax.jms.Queue。然后我继续删除该属性并再次尝试,现在我收到了这个错误。我不确定下一步该做什么。
我一直在关注的教程:
IBM - The WebSphere MQ resource adapter , Redhat Jboss Documentation - JCA Architecture Chapter, 和 Oracle - Message Driven Beans Java EE6 教程
我的代表只允许我发布 2 个链接,因此最后两个教程没有链接。 任何帮助将不胜感激。
最佳答案
我在将 MQ RAR 部署到 JBoss 时遇到了一些稍微不同的问题,但概述了解决方案和过程 here应该为你工作。要查看的具体文件是here .这些文件是 iron-jacamar(作为 JCA 提供者的 jboss)描述符。
关于jboss - 如何在 JBoss 6.2 EAP 中安装 WebSphere MQ 资源适配器 (wmq.jmsra.rar)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904631/