JMS Connection constantly "session is closed" on our oracle queues

1.8k Views Asked by At

We are using spring boot to run our queue polling program.

The queue is being polled about every 2 mins, and every 2 mins the session is closed, then refreshed.

The connection is a shared connection from the external tomcat, this connection is shared with a dozen other applications.

    2018-11-20 11:59:21.263 WARN [serviceRequestAdapter.container-3] org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'NPP.SERVICE_REQUEST' - 
      trying to recover. Cause: JMS-131: Session is closed
    2018-11-20 11:59:21.265 INFO [serviceRequestAdapter.container-3] org.springframework.jms.listener.DefaultMessageListenerContainer - 
      Successfully refreshed JMS Connection
    2018-11-20 12:01:21.781 WARN [serviceRequestAdapter.container-4] org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'NPP.SERVICE_REQUEST' - 
      trying to recover. Cause: JMS-131: Session is closed
    2018-11-20 12:01:21.823 INFO [serviceRequestAdapter.container-4] org.springframework.jms.listener.DefaultMessageListenerContainer - 
      Successfully refreshed JMS Connection

This doesn't actually appear to be affecting functionality, as messages posted get consumed and processed.

Is this actually a problem, if so how do I fix it?

If it isn't a problem how do I hide these messages without reducing my log level to error?

our jms-context.xml

    <context:annotation-config/>

    <tx:annotation-driven/>

    <int:message-history/>

    <int:channel id="jms-inbound"/>
    <int:channel id="voucher-create-inbound"/>
    <int:channel id="voucher-update-inbound"/>
    <int:channel id="default-inbound"/>

    <orcl:aq-jms-connection-factory id="connectionFactory"
                                    connection-factory-type="QUEUE_CONNECTION"
                                    use-local-data-source-transaction="true"/>

    <int:recipient-list-router input-channel="jms-inbound" default-output-channel="default-inbound"
                               id="action-type-router">
        <int:recipient channel="voucher-create-inbound"
                       selector-expression="headers.actionType == 'CREATE VOUCHER'"/>
        <int:recipient channel="voucher-update-inbound"
                       selector-expression="headers.actionType == 'UPDATE VOUCHER'"/>
    </int:recipient-list-router>

    <int-jms:message-driven-channel-adapter
            id="serviceRequestAdapter"
            channel="jms-inbound"
            cache-level="3"
            connection-factory="connectionFactory"
            destination-name="${oracle.rqst-q-name}"/>

    <int:service-activator id="createVoucherActivator"
                           input-channel="voucher-create-inbound"
                           requires-reply="false"
                           method="onMessage">
        <beans:bean class="VoucherRequestConsumer"/>
    </int:service-activator>

    <int:service-activator id="updateVoucherActivator"
                           input-channel="voucher-update-inbound"
                           requires-reply="false"
                           method="onMessage">
        <beans:bean class="VoucherRequestConsumer"/>
    </int:service-activator>

    <beans:bean id="defaultRequestConsumer"
                class="DefaultRequestConsumer"/>
    <int:service-activator id="defaultActivator"
                           input-channel="default-inbound"
                           requires-reply="false"
                           ref="defaultRequestConsumer"
                           method="onMessage">
    </int:service-activator>
</beans:beans>
1

There are 1 best solutions below

1
On

I am bit puzzled . . . what are you asking? I mean I don't see a question. Are you just looking for confirmation that it's ok?

In any event, consider this doc - https://docs.spring.io/spring-data/jdbc/old-docs/2.0.0.M1/reference/html/orcl.streamsaq.html, specifically Section 4.3 Configuring the Connection Factory to use the same local transaction as your data access code. which specifically talks about implications on JMS Session when use-local-data-source-transaction is set to true.