Announcement Announcement Module
Collapse
No announcement yet.
DefaultMessageListenerContainer and nonfatal FATAL Errors Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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>

    --------------------------------------------------------------------------

  • #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

    Comment

    Working...
    X