JbossESB jmsProvider无法转换IBMMQ JMS消息JMSTextMessage

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:定义的连接工厂和队列

我正在尝试将IBMMQV6.0.2与jbossESB集成。
我们在一个QA QUEUEMANAGER上的IBMMQ上有可用的本地队列。 我能够使用JBossESB的JMSprovider来监听队列。一旦一条消息(类型为jms_text)被丢弃,esb就会侦听并拾取它,在它执行下一个操作之前,它会抛出以下错误消息

错误[JmsComposer]不支持的JMS消息类型:com.ibm.JMS.JMSTextMessage

以下是我遵循的步骤

  • jboss-service.mxl:定义的连接工厂和队列
  • 向${jbossesb}/server/${mynode}/lib添加了JAR(com.ibm.mq.*)
  • 在jboss-esb.xml上添加了jms lsinterner配置 请告诉我我在这里错过了什么。。。我需要创建自定义MessagePlugin吗

    JBossESB看起来像这样

    
    
    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>