2012-02-03 43 views
3

我有一个简单的Spring配置,用于包含ActiveMQ嵌入式代理,JMS生产者和JMS监听器的单元测试。测试已成功通过,但在关闭所有内容时,我会看到一些例外情况。就像这样:正确关闭ActiveMQ嵌入式代理

[ WARN] [ActiveMQ Connection Executor: tcp://localhost/127.0.0.1:61616 03:16:23] (SingleConnectionFactory.java:onException:301) Encountered a JMSException - resetting the underlying JMS Connection 
javax.jms.JMSException: java.io.EOFException 

我的配置:

<beans> 
    <amq:queue id="defaultDestination" physicalName="example.A"/> 
    <bean id="jmsProducerTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory"/> 
    <property name="defaultDestination" ref="defaultDestination"/> 
    </bean> 

    <bean id="jmsMessageSender" class="package.JMSMessageSender"/> 

    <amq:broker id="broker" useJmx="false" persistent="false" destroyApplicationContextOnStop="true" > 
    <amq:transportConnectors> 
     <amq:transportConnector uri="tcp://localhost:61616"/> 
    </amq:transportConnectors> 
    </amq:broker> 

    <bean id="messageListener" class="package.MessageReceiver"/> 

    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory" depends-on="broker"> 
    <property name="targetConnectionFactory"> 
     <amq:connectionFactory brokerURL="tcp://localhost:61616"/> 
    </property> 
    </bean> 

    <jms:listener-container connection-factory="connectionFactory" container-type="default"> 
    <jms:listener destination="example.A" ref="messageListener"/> 
    </jms:listener-container> 
</beans> 

我推测,经纪人正在关闭,然后连接工厂失去连接。但depends-on没有帮助。 感谢您的帮助。

回答

2

据我所知,除非出现这些例外情况,否则无法关闭嵌入式AMQ。 AMQ代码将该EOF视为相对无害的事件,但它记录了该异常。您可以尝试在Apache ActiveMQ项目中打开JIRA。