JbossESB jmsProvider无法转换IBMMQ JMS消息JMSTextMessage
我正在尝试将IBMMQV6.0.2与jbossESB集成。JbossESB jmsProvider无法转换IBMMQ JMS消息JMSTextMessage,jboss,ibm-mq,jboss-messaging,Jboss,Ibm Mq,Jboss Messaging,我正在尝试将IBMMQV6.0.2与jbossESB集成。 我们在一个QA QUEUEMANAGER上的IBMMQ上有可用的本地队列。 我能够使用JBossESB的JMSprovider来监听队列。一旦一条消息(类型为jms_text)被丢弃,esb就会侦听并拾取它,在它执行下一个操作之前,它会抛出以下错误消息 错误[JmsComposer]不支持的JMS消息类型:com.ibm.JMS.JMSTextMessage 以下是我遵循的步骤 jboss-service.mxl:定义的连接工厂和队列
我们在一个QA QUEUEMANAGER上的IBMMQ上有可用的本地队列。 我能够使用JBossESB的JMSprovider来监听队列。一旦一条消息(类型为jms_text)被丢弃,esb就会侦听并拾取它,在它执行下一个操作之前,它会抛出以下错误消息 错误[JmsComposer]不支持的JMS消息类型:com.ibm.JMS.JMSTextMessage 以下是我遵循的步骤
jboss-service.xml如下所示
MQQueueConnectionFactory
队列
假的
SQAT0083
111.111.111.111
1415
霉菌
客户
jboss:service=Naming
wsmq/SerivceOrderQueue
队列
SQAT0083
MYCO.SERVICEORDER.QA01.QL01
MQ
jboss:service=Naming
我正在使用jboss-eap-4.3。非常感谢您的帮助
这是我的服务标签在jboss-esb.xml中的样子
我希望在JMS应用程序的类路径中看到com.ibm.mqjms.jar,而不是com.ibm.mq.* 根据您使用的WMQ版本,请参考信息中心的环境变量页面。WMQ V6页面(见表2)和WMQ v7页面(见下表和注释)。请注意,这些类已在不同版本之间重新打包,并且类路径要求完全不同 在UNIX版本上,可以运行setmqjms脚本为WMQ JMS配置环境。它位于AIX上的/opt/mqm/java/bin或/usr/mqm/java/bin中。不过,这假设是标准的WMQ客户端安装。如果你只是抓起罐子,把它们移走,那就行不通了。特别是,如果您只是抓取com.ibm.mq*jar,它可能不会工作。您可以通过运行客户端安装附带的初始验证测试(IVT)来验证安装。使用完整的WMQ客户端的额外好处是安装了所有跟踪实用程序、示例代码和其他诊断程序
另一条建议是,即使WMQ服务器位于v6,也要确保使用WMQ v7客户机。这是因为WMQ v6将于明年停止使用,此后将不受支持。现在使用v7客户机将为您节省以后的迁移、类路径更改等。此外,v7类在与v7 QMgr一起使用时具有许多很酷的新功能,例如自动客户机重新连接到相同或不同的QMgr,具体取决于您的配置。WMQ客户端安装是一个免费下载(需要注册),因为。响应有点晚,但如果有人读到这篇文章,答案是:
queuestartEsbChannel
正在侦听传递jmstextmessages的同一队列,并且它的is-gateway
设置为false(默认值)
如果
是网关
是false,则在该侦听器上只能接收ESB消息。感谢您的响应。首先,我的lib目录中已经有com.ibm.mq.jar和com.ibm.mqjms.jar,这些都可以在JBossJVM的类路径中找到。另一件事是WebPere MQ由我们公司的外部部门控制。我为MQ编写了简单的JMS cleint,并成功地在对象模型中接收和转换了消息。我相信它是在我的jboss-esb.xml中定义的某个相关标记。我的回答有点离题,这就是为什么我会使用wiki,但我看到一些奇怪的行为,可以追溯到类加载器问题。关于根本原因,您可能已经走上了正确的道路,但是我想消除类路径作为一个可能的影响因素。所讨论的两个jar依赖于WMQ发行版中的其他jar,因此仅获取这两个jar可能并不总是像预期的那样工作。
<jms-provider name="WSMQ" connection-factory="MQQueueConnectionFactory">
<jms-bus busid="queuestartGwChannel"> <jms-message-filter
dest-type="QUEUE"
dest-name="wsmq/SerivceOrderQueue"
acknowledge-mode ="AUTO_ACKNOWLEDGE"
/>
</jms-bus>
<jms-bus busid="queuestartEsbChannel">
<jms-message-filter
dest-type="QUEUE"
dest-name="wsmq/SerivceOrderQueue"
/>
</jms-bus>
</jms-provider>
<mbean code="jmx.service.wsmq.WSMQConnectionFactory"
name="jmx.service.wsmq:service=MQQueueConnectionFactory">
<attribute name="JndiName">MQQueueConnectionFactory</attribute>
<attribute name="JMSStyle">Queue</attribute>
<attribute name="IsXA">false</attribute>
<attribute name="QueueManagerName">SQAT0083</attribute>
<attribute name="HostName">111.111.111.111</attribute>
<attribute name="Port">1415</attribute>
<attribute name="Channel">MYCO.SVRCONN</attribute>
<attribute name="TransportType">CLIENT</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
<mbean code="jmx.service.wsmq.WSMQDestination"
name="jmx.service.wsmq:service=WSMQRequestQueue">
<attribute name="JndiName">wsmq/SerivceOrderQueue</attribute>
<attribute name="JMSStyle">Queue</attribute>
<attribute name="QueueManagerName">SQAT0083</attribute>
<attribute name="DestinationName">MYCO.SERVICEORDER.QA01.QL01</attribute>
<attribute name="TargetClient">MQ</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
<listeners>
<jms-listener name="MQ-Gateway"
busidref="queuestartGwChannel"
is-gateway="true" maxThreads="1"
/>
<jms-listener name="MQ-EsbListener" busidref="queuestartEsbChannel" />
</listeners>
<actions mep="OneWay">
<action name="serviceOrderMarshaller"
class="com.my.esb.actions.ServiceOrderMessageUnMarshallerAction"
process="unmarshalPayload">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
<action name="serviceOrderStaging"
class="com.my.esb.actions.ServiceOrdersStagingAction"
process="stageServiceOrders">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
<action name="marginAndLeadTimeRetriever"
class="com.my.esb.actions.MarginAndLeadTimeRetrieverAction"
process="retrieveJobCodeInfo">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
<action name="createDraftRequestMapper"
class="com.my.esb.actions.CreateDraftRequestMapperAction"
process="mapData">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
<action name="omsCreateDraftRequestTranslator"
class="com.my.esb.actions.OMSCreateDraftRequestTranslatorAction"
process="translateData">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
<action name="createDraftRequestProcessor"
class="com.my.esb.actions.CreateDraftRequestProcessorAction"
process="dispatchRequest">
<property name="springContextXml" value="spring/mainApplicationContext.xml"/>
</action>
</actions>