2014-01-29 2 views
1

При тестировании интеграции в моем приложении, я получаю ниже сообщений об ошибках в отказоустойчивой протоколе испытаний для одного из моих интеграционного теста:Настройка JMS сообщения слушателя запустившего Сбой назначения пытается восстановить

listener.DefaultMessageListenerContainer,WARN,Setup of JMS message listener invoker failed for destination 'jms/myapp.OneWorker' - trying to recover. Cause: Destination [jms/myapp.OneWorker] not found in JNDI; nested exception is javax.naming.NameNotFoundException: jms/myapp.OneWorker 

Ниже мой деталь конфигурации:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
     <props> 
      <prop key="java.naming.factory.initial"> 
       org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop> 
      <prop key="java.naming.provider.url">vm://localhost:0</prop> 
      <prop key="java.naming.security.principal">system</prop> 
      <prop key="java.naming.security.credentials">system</prop> 
     </props> 
    </property> 
</bean> 

<bean id="jndiQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate" /> 
    <property name="jndiName" value="jmsFactory" /> 
</bean> 

<bean id="queueConnectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="jndiQueueConnectionFactory" /> 
    <property name="sessionCacheSize" value="1" /> 
</bean> 

<bean id="destinationResolver" 
    class="org.springframework.jms.support.destination.JndiDestinationResolver"> 
    <property name="jndiTemplate" ref="jndiTemplate" /> 
    <property name="cache" value="true" /> 
    <property name="fallbackToDynamicDestination" value="false" /> 
</bean> 

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="queueConnectionFactory" /> 
    <property name="destinationResolver" ref="destinationResolver" /> 
    <property name="pubSubDomain" value="true" /> 
</bean> 

<bean id="workerOneListener" class="com.org.myapp.workflow.WorkerOne"> 
    <property name="workflowManager" ref="workflowManagerImpl" /> 
</bean> 

<jms:listener-container connection-factory="queueConnectionFactory" 
    destination-resolver="destinationResolver" concurrency="3"> 
    <jms:listener destination="jms/myapp.OneWorker" ref="workerOneListener" /> 
    <jms:listener destination="jms/myapp.TwoWorker" ref="workerOneListener" /> 
    <jms:listener destination="jms/myapp.ThreeWorker" ref="workerOneListener" /> 
</jms:listener-container> 

интеграционные тесты имеют базовый класс, который создает контексты весной приложений и разделяемый все другие тесты интеграции в модуле.
я активировал ведение журнала с уровнем отладки и получил ниже сообщений об ошибке:

2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Closing cached Session:  ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:70,started=true} 
2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Closing cached Session: ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:70,started=true} 
2014-01-29 11:13:24,connection.CachingConnectionFactory,DEBUG,Creating cached JMS Session for mode 1: ActiveMQSession {id=ID:CHN03876623-56121-1390973978321-2:0:71,started=true} 
2014-01-29 11:13:24,jndi.JndiTemplate,DEBUG,Looking up JNDI object with name [jms/myapp.OneWorker] 
2014-01-29 11:13:24,destination.JndiDestinationResolver,DEBUG,Destination [jms/myapp.OneWorker] not found in JNDI 
javax.naming.NameNotFoundException: jms/myapp.OneWorker 
    at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:225) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154) 
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179) 
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) 
    at org.springframework.jms.support.destination.JndiDestinationResolver.resolveDestinationName(JndiDestinationResolver.java:111) 
    at org.springframework.jms.support.destination.JmsDestinationAccessor.resolveDestinationName(JmsDestinationAccessor.java:100) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.createListenerConsumer(AbstractPollingMessageListenerContainer.java:221) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.initResourcesIfNecessary(DefaultMessageListenerContainer.java:1081) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947) 
    at java.lang.Thread.run(Thread.java:662) 

Это журнальное сообщение повторяется снова и снова бесконечно и для двух других работников тоже. И сборка висит на этом этапе. Я использую схему unitils для тестирования интеграции и создаю весенний контекст, используя @SpringApplicationContext в моем базовом классе интеграции. Где я иду не так?

ответ

1

Не уверен, что это был вопрос, но я решил мою проблему с этим подходом:

Использованием @SpringApplicationContext несколько файлов весной XML были загружены и один из файла весной XML, который загружен в последнем исключил несколько классов, необходимых для другой контекст xmls и контекст были перезагружены за исключением этих классов.

Я также видел несколько пружинных XMLs были повторены в списке контекст файла @SpringApplicationContext

Я удалил избыточность и заказаны или удалить нежелательные пружинные XMLs или несколько бобов в нем. И это сработало.

0

Вы пытаетесь выполнить поиск слушателя JMS, которого нет в пространстве имен JNDI. Вы уверены, что используете контейнер JNDI, и ваш сервер MQ работает и настроен правильно?

+0

Такая же конфигурация работает и для других модулей в моем приложении. Когда тесты в этом конкретном модуле выполняются, он бросает все эти сообщения об ошибках. – EmeraldTablet

+0

Вы уверены, что это правильно: vm: // localhost: 0? –

+0

Да, Курт, это так. Как я уже сказал, он отлично работает для других модулей. Разница между другими модулями и этим заключается в том, что здесь интеграционные тесты повторно используют контексты, созданные базовым классом. В то время как в других модулях все интеграционные тесты создают свои собственные контексты. – EmeraldTablet

Смежные вопросы