JbossESB jmsProvider не может преобразовать сообщение IBMMQ JMS JMSTextMessage

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

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

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

  1. jboss-service.mxl : Defined Connection Factory and QUEUE
  2. added jars ( com.ibm.mq.* ) to ${jbossesb}/server/${mynode}/lib
  3. Added jms lsinterner configuration on 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>

person Community    schedule 03.06.2010    source источник


Ответы (2)


Немного запоздалый ответ, но если кто-то читает это, ответ:

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

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

person Community    schedule 25.04.2012

Я ожидал увидеть 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 версии 6. Это связано с тем, что WMQ v6 прекращает работу в следующем году и не будет поддерживаться после этого. Использование клиента v7 сейчас избавит вас от последующей миграции, изменений CLASSPATH и т. д. Кроме того, классы v7 имеют множество интересных новых функций при использовании с QMgr v7, таких как автоматическое повторное подключение клиента к тому же или другому QMgr, в зависимости от вашего конфигурация. Установка клиента WMQ загружается бесплатно (требуется регистрация) как SupportPac MQC7.

person Community    schedule 03.06.2010
comment
Спасибо за ответ Т. Роб. Прежде всего, у меня уже были com.ibm.mq.jar и com.ibm.mqjms.jar в моей директории lib, и они доступны в classpath для jboss JVM. Другое дело, что WebSpere MQ контролируется внешним отделом нашей компании. Я написал простой JMS-клиент для MQ, и я успешно получил и преобразовал сообщение в свою объектную модель. Я считаю, что это что-то связанное с тегом ‹service ›, определенным в моем jboss-esb.xml. - person Himanshu; 08.06.2010
comment
Мой ответ был немного не по теме, поэтому я написал его в вики, но я видел какое-то странное поведение, которое восходит к проблемам с загрузчиком классов. Вы, вероятно, находитесь на правильном пути в отношении основной причины, но я хотел исключить CLASSPATH как возможный фактор. Два рассматриваемых jar-файла зависят от других jar-файлов в дистрибутиве WMQ, поэтому захват только этих двух может не всегда работать должным образом. - person T.Rob; 08.06.2010