-
Jan 16th, 2008, 05:01 PM
#1
DefaultMessageListenerContainer and nonfatal FATAL Errors
I am a Spring noob and have just set up my first JMS sender/receiver/MDP configurations. While successful, I am experiencing an annoying error.
Environment: IBM Rational App Developmer 7.0.0.4, App Server 6.1.0.2
Messaging: IBM MQ, remote queue manager
Spring: 2.0.6
My MDP works like a champ, but throws the exception shown below when the message traffice subsides. Subsequent message arriving on the queue are handled and the FATAL error repeats. I've tried using two different Queue Connection Factories to no avail.
Anyone seen this before? Is this a config issue?
--------------------------------------------------------------------------
[1/16/08 16:34:55:226 CST] 00000033 SystemOut O This just in from an MDB implementation -->Msg from Spring Sender.
[1/16/08 16:34:55:335 CST] 0000003d SystemOut O This just in from an MDB implementation -->Msg from Spring Sender.
[1/16/08 16:34:56:070 CST] 0000003e ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource JMS$INTQCF$JMSManagedConnection@1299860858. The exception which was received is javax.jms.IllegalStateException: MQJMS3033: QueueReceiver is closed
[1/16/08 16:34:56:304 CST] 0000003e ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jms/integration/IntegrationQCF. The exception which was received is javax.jms.IllegalStateException: MQJMS3033: QueueReceiver is closed
[1/16/08 16:34:56:304 CST] 0000003e SystemOut O 766150 [jmsContainer-1] ERROR org.springframework.jms.listener.DefaultMessageLis tenerContainer - Setup of JMS message listener invoker failed - trying to recover
javax.jms.IllegalStateException: MQJMS3033: QueueReceiver is closed
at com.ibm.mq.jms.MQMessageConsumer.receiveInternal(M QMessageConsumer.java:2583)
at com.ibm.mq.jms.MQMessageConsumer.receive(MQMessage Consumer.java:2470)
at com.ibm.ejs.jms.JMSMessageConsumerHandle.receive(J MSMessageConsumerHandle.java:521)
at org.springframework.jms.listener.AbstractPollingMe ssageListenerContainer.receiveMessage(AbstractPoll ingMessageListenerContainer.java:375)
at org.springframework.jms.listener.AbstractPollingMe ssageListenerContainer.doReceiveAndExecute(Abstrac tPollingMessageListenerContainer.java:300)
at org.springframework.jms.listener.AbstractPollingMe ssageListenerContainer.receiveAndExecute(AbstractP ollingMessageListenerContainer.java:254)
at org.springframework.jms.listener.DefaultMessageLis tenerContainer$AsyncMessageListenerInvoker.invokeL istener(DefaultMessageListenerContainer.java:871)
at org.springframework.jms.listener.DefaultMessageLis tenerContainer$AsyncMessageListenerInvoker.run(Def aultMessageListenerContainer.java:811)
at java.lang.Thread.run(Thread.java:797)
[1/16/08 16:34:56:351 CST] 0000003e SystemOut O 766197 [jmsContainer-1] INFO org.springframework.jms.listener.DefaultMessageLis tenerContainer - Successfully refreshed JMS Connection
--------------------------------------------------------------------------
Spring Config Extract:
--------------------------------------------------------------------------
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">com.ibm.webspher e.naming.WsnInitialContextFactory</prop>
<prop key="java.naming.provider.url">corbaloc:iiop:local host:2811</prop>
</props>
</property>
</bean>
<bean id="custaggQCF"
class="org.springframework.jndi.JndiObjectFactoryB ean">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="jndiName">
<value>java:comp/env/CUSTAGG_QCF</value>
</property>
</bean>
<bean id="custaggQ"
class="org.springframework.jndi.JndiObjectFactoryB ean">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="jndiName">
<value>java:comp/env/CUSTAGG_Q</value>
</property>
</bean>
<bean id="integrationQCF"
class="org.springframework.jndi.JndiObjectFactoryB ean">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="jndiName">
<value>java:comp/env/INTEGRATION_QCF</value>
</property>
</bean>
<bean id="jmsDestinationResolver"
class="org.springframework.jms.support.destination .JndiDestinationResolver">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="cache">
<value>true</value>
</property>
</bean>
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="custaggQCF"/>
</property>
<property name="destinationResolver">
<ref bean="jmsDestinationResolver"/>
</property>
<property name="pubSubDomain">
<value>false</value>
</property>
<property name="receiveTimeout">
<value>20000</value>
</property>
</bean>
<bean id="jmsSender" class="com.bofa.harness.dao.JmsSender">
<property name="jmsTemplate">
<ref bean="jmsQueueTemplate"/>
</property>
</bean>
<!-- MDB Configuration -->
<bean id="messageListener" class="com.bofa.harness.dao.JmsListener">
</bean>
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMes sageListenerContainer">
<property name="connectionFactory" ref="integrationQCF"/>
<property name="destination" ref="custaggQ"/>
<property name="messageListener" ref="messageListener" />
</bean>
--------------------------------------------------------------------------
-
Feb 28th, 2008, 05:34 AM
#2
The log level is arguably too high there: This is only a temporary error than can be recovered. As of Spring 2.5.2 and 2.0.9, I've changed the log level to INFO. The stacktrace will now even only get logged at DEBUG level.
Juergen
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules