[英]Spring JMS listening for invalid queue
我有以下Spring配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<import resource="classpath:model-context.xml"/>
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="oc">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
</context:component-scan>
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="jms/oc/connectionfactory"/>
<jee:jndi-lookup id="documentQueue" jndi-name="jms/oc/docqueue"/>
<jee:jndi-lookup id="taskQueue" jndi-name="jms/oc/taskqueue"/>
<jee:jndi-lookup id="timerManager" jndi-name="tm/TimerManager" expected-type="commonj.timers.TimerManager"/>
<tx:jta-transaction-manager></tx:jta-transaction-manager>
<bean id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="java:comp/env/OCWorkManager"/>
<property name="resourceRef" value="true"/>
</bean>
<bean id="documentJmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="documentQueue"/>
<property name="messageListener" ref="documentMessageHandler"/>
<property name="taskExecutor" ref="taskExecutor"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean id="documentJaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="schema" value="WEB-INF/xsd/CABSInputMessage.xsd"/>
<property name="contextPath" value="oc.adapter.cabs.jaxb"/>
</bean>
<bean id="documentMessageConverter" class="org.springframework.jms.support.converter.MarshallingMessageConverter">
<property name="marshaller" ref="documentJaxb2Marshaller"/>
<property name="unmarshaller" ref="documentJaxb2Marshaller"/>
</bean>
<bean id="documentMessageHandler" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<bean class="oc.adapter.cabs.jms.DocumentMessageHandler"/>
</constructor-arg>
<property name="defaultListenerMethod" value="onMessage"/>
<property name="messageConverter" ref="documentMessageConverter"/>
</bean>
<bean id="taskJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="defaultDestination" ref="taskQueue"/>
</bean>
當從taskJmsTemplate發送消息時,盡管消息目的地是DocumentQueue,但DocumentMessageHandler類還是以某種方式偵聽該消息。 從taskJmsTemplate發送消息后,我看到以下錯誤:
19:47:09.287 [[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO r.c.o.t.p.jms.TaskMessageProducer - Producing task message...
19:47:09.359 [[ACTIVE] ExecuteThread: '7' for queue: 'weblogic.kernel.Default (self-tuning)'] WARN o.s.j.l.DefaultMessageListenerContainer - Execution of JMS message listener failed, and no ErrorHandler has been set.
org.springframework.jms.support.converter.MessageConversionException: Could not unmarshal message: weblogic.deployment.jms.WrappedMessage_weblogic_jms_common_TextMessageImpl@17900a63; nested exception is org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException: JAXB unmarshalling exception: null; nested exception is javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: Premature end of file.]
at org.springframework.jms.support.converter.MarshallingMessageConverter.fromMessage(MarshallingMessageConverter.java:190) ~[spring-jms-3.2.9.RELEASE.jar:3.2.9.RELEASE]
at org.springframework.jms.listener.adapter.MessageListenerAdapter.extractMessage(MessageListenerAdapter.java:407) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:345) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:537) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:497) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:468) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:243) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1101) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:995) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at org.springframework.scheduling.commonj.DelegatingWork.run(DelegatingWork.java:62) ~[org.springframework_2.5.jar:2.5.6.SEC01]
at weblogic.work.j2ee.J2EEWorkManager$WorkWithListener.run(J2EEWorkManager.java:184) [weblogic.jar:10.3.6.0]
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) [com.bea.core.weblogic.workmanager_1.11.0.0.jar:1.11.0.0]
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) [com.bea.core.weblogic.workmanager_1.11.0.0.jar:1.11.0.0]
但是,似乎我的應用程序中沒有任何內容偵聽此隊列(並且不應偵聽)。 我的配置有任何錯誤嗎?
問題已解決。 我在另一個配置文件中有無效的JNDI映射-weblogic.xml
...
<resource-env-description>
<resource-env-ref-name>jms/oc/docqueue</resource-env-ref-name>
<jndi-name>jms/oc/docqueue</jndi-name>
</resource-env-description>
<resource-env-description>
<resource-env-ref-name>jms/oc/taskqueue</resource-env-ref-name>
<jndi-name>jms/oc/docqueue</jndi-name>
</resource-env-description>
...
兩個隊列都映射到相同的Weblogic資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.