JbossESB jmsProvider не может преобразовать сообщение JMSTextMessage IBMMQ JMS - PullRequest
1 голос
/ 03 июня 2010

Я пытаюсь интегрировать IBMMQ v6.0.2 с jbossESB.
у нас есть локальная очередь, доступная в IBMMQ на одном из наших QAUEMANAGER QA. Я могу слушать QUEUE, используя JMSprovider из jboss ESB. Как только сообщение (типа jms_text) отброшено, esb прослушивает его и поднимает, а до того, как оно выполнит следующее действие, выдает следующее сообщение об ошибке.

ОШИБКА [JmsComposer] Неподдерживаемый тип сообщения JMS: com.ibm.jms.JMSTextMessage

Вот шаги, которые я выполнил.

  1. jboss-service.mxl: определенная фабрика соединений и QUEUE
  2. добавлены jars (com.ibm.mq. *) в $ {jbossesb} / server / $ {mynode} / lib
  3. Добавлена ​​конфигурация jms lsinterner в jboss-esb.xml

Пожалуйста, подскажите, что мне здесь не хватает ... Нужно ли создавать собственный MessagePlugin?

jboss-esb выглядит следующим образом

<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>

jboss-service.xml выглядит следующим образом

   <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>

Я использую jboss-eap-4.3. Очень ценю любую помощь.

Вот мой сервисный тег выглядит как в jboss-esb.xml

        <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>

Ответы [ 2 ]

2 голосов
/ 25 апреля 2012

Ответ запаздывает, но если кто-то читает это, ответ:

queuestartEsbChannel прослушивает ту же очередь, которая доставляет jmstextmessages, и для is-gateway установлено значение false (значение по умолчанию).

Если is-gateway равно false , на этом приемнике могут быть получены только сообщения ESB.

1 голос
/ 03 июня 2010

Я бы ожидал увидеть com.ibm.mqjms.jar в CLASSPATH для приложения JMS, а не com.ibm.mq. *.

В зависимости от используемой версии WMQ, пожалуйста, обратитесь к странице «Переменные среды» в Инфоцентре. Страница WMQ V6 здесь (см. Таблицу № 2), а страница WMQ v7 здесь (см. Таблицу и в примечаниях ниже). Обратите внимание, что классы были переупакованы между версиями, и требования CLASSPATH совершенно разные.

В версиях UNIX вы можете запустить скрипт setmqjms для настройки среды для WMQ JMS. Он находится в / opt / mqm / java / bin или / usr / mqm / java / bin в AIX. Это предполагает стандартную установку клиента WMQ. Если вы просто взяли банки и переместили их, это не сработает. В частности, если вы только что взяли jar-файлы com.ibm.mq *, скорее всего, это не сработает. Вы можете проверить свою установку, выполнив Начальный проверочный тест (IVT), поставляемый с клиентской установкой. Дополнительным преимуществом использования полноценного клиента WMQ является то, что установлены все утилиты трассировки, пример кода и другая диагностика.

Еще один совет, обязательно используйте клиент WMQ v7 , даже если сервер WMQ находится на v6 . Это связано с тем, что в следующем году WMQ v6 выйдет из строя и после этого не будет поддерживаться. Использование клиента v7 теперь сэкономит вам миграцию позже, изменения CLASSPATH и т. Д. Кроме того, классы v7 имеют много интересных новых функций при использовании с v7 QMgr, таких как автоматическое переподключение клиента к тому же или другому QMgr, в зависимости от вашего конфигурации. Клиент WMQ устанавливается бесплатно (требуется регистрация) как SupportPac MQC7 .

...