簡體   English   中英

Spring JMS偵聽無效隊列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM