Spring 3.0 MessageListener в weblogic 10.3 — ОШИБКА «Причина: [JMSClientExceptions:055142]Иностранное назначение»

#java #spring #weblogic #weblogic-10.x

#java #spring #weblogic #weblogic-10.x

Вопрос:

Я пытаюсь развернуть MessageListener Spring 3.0.5 на weblogic 10.3 внутри war и не могу заставить его работать.

Я создал простой jms-запрос в weblogic, но, похоже, weblogic думает, что я пытаюсь подключиться как иностранный клиент, хотя все локально?

[ПРЕДУПРЕЖДЕНИЕ] Сбой настройки средства вызова прослушивателя сообщений JMS для системного модуля назначения!Очередь тестов» — попытка восстановления. Причина: [JMSClientExceptions:055142] Внешний адресат, системный модуль!Очередь тестирования

Вот мой spring xml

    <!--  connection factory -->
    <jee:jndi-lookup id="jmsConnectionFactory"  jndi-name="weblogic.jms.ConnectionFactory" 
   expose-access-context="true" />

    <!--  weblogic jms queue -->    
    <jee:jndi-lookup id="testQueue" jndi-name="jms.testQueue" expose-access-context="true"/>

    <!--  my onMessage listener bean -->    
    <bean id="jobNotificationQueueListener" class="com.xxx.component.jms.JobNotificationQueueListener" />

    <!--  spring container -->
    <bean id="jobNotificationQueueContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="destination" ref="testQueue" />
        <property name="messageListener" ref="jobNotificationQueueListener" />
        <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
        <property name="sessionTransacted" value="true" />
    </bean>
  

Кто-нибудь видел это раньше?

Ответ №1:

Это сообщение об ошибке не указывает на то, что вы пытаетесь подключиться как «иностранный клиент». WebLogic считает, что вы пытаетесь подключиться к иностранному пункту назначения, который отличается.

Какой тип очереди вы пытаетесь настроить? Вот что нужно попробовать: 1) Попробуйте просмотреть дерево JNDI до места назначения, чтобы подтвердить его там, и подтвердите, что тип правильный 2) Подтвердите, что у вас созданы серверы JMS и они нацелены на указанный сервер 3) Подтвердите, что у вас правильный таргетинг для очереди

ОБНОВЛЕНИЕ: я смог воспроизвести и решить эту проблему. В моем файле ApplicationContext у меня раньше была такая конфигурация:

   <jee:jndi-lookup id="eventQueue" jndi-name="${jms.event.queue.name}" expose-access-context="true"/>
  

Я изменил его на:

   <jee:jndi-lookup id="eventQueue" jndi-name="${jms.event.queue.name}"/>
  

и сейчас он работает нормально и не выдает эту ошибку постоянно.

Комментарии:

1. Это просто стандартная очередь, изначально я пытался подключиться к внешней очереди, но это не сработало, поэтому я настраиваю локальную очередь, в которой я сейчас застрял.

2. Я также создал простой прослушиватель ejb mdb и протестировал его в локальной и удаленной очереди, и он отлично работал.

3. Я просмотрел дерево JNDI, очередь (по-моему, все в порядке). Имя привязки: jms.testQueue Класс: weblogic.jms.common. DestinationImpl

4. К вашему сведению, внешняя JMS — это конфигурация, описанная в WLS, а не стиль взаимодействия.

5. Если вы изменили тип назначения с внешнего на локальную очередь без перезапуска, это может быть вашей проблемой. Попробуйте перезапустить сервер.

Ответ №2:

Для внешних JMS требуется их клиентская библиотека (т. Е. для Websphere MQ потребуется mq.jar и еще два) в пути к классу, тогда класс фабрики соединений должен быть настроен (в противном случае будет использоваться Weblogic по умолчанию) и так далее.

Другими словами, это, скорее всего, проблема конфигурации, а не программирования.

Комментарии:

1. Но он не чужой. Очередь и прослушиватель находятся в одном экземпляре weblogic.