« Return to Thread: Is Spring able to destroy cleanly PooledSpringXAConnection(s) ?
kdefombelle wrote:I use jencks to do JMS resource enlistement in XA transactions in a Spring environnement.
I work on an external ActiveMQ broker.
I have hanging at the end of the program if i don't shutdown the broker(i do not want to..), and my theory is when Spring close the connection(s), it calls close on a PooledSpringXAConnection : that does nothing to keep alive the connection in the pool.
Is it possible that theses unclosed connections are responsible for my hanging ?
Is there a clean destroy method or a workaround I can use to cleanly destroy the jencks pool at the end of my program to avoid hanging (if this is the cause of my hanging..) or Spring does and i a searching in the wrong way ?
I do this at the end of my program :
if(listenerContainer!=null) {
listenerContainer.stop();
}
if(applicationContext!=null) {
applicationContext.close();
}
My Spring conf is the following :
<bean id="connectionFactory" class="org.jencks.pool.PooledSpringXAConnectionFactory">
<property name="connectionFactory">
<bean class="org.apache.activemq.spring.ActiveMQXAConnectionFactory">
<property name="brokerURL" value="${broker.url}/>
<property name="prefetchPolicy" ref="prefetchPolicy"/>
</bean>
</property>
<property name="transactionManager" ref="myTransactionManager" />
</bean>
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="${concurrent.consumers}" />
<property name="destinationName" value="${jms.destination}" />
<property name="messageListener" ref="messageListener" />
<property name="receiveTimeout" value="${receive.timeout.millis}" />
<property name="autoStartup" value="false" />
<property name="transactionManager" ref="jtaTransactionManager"/>
<property name="connectionFactory" ref="connectionFactory" />
</bean>
The log4j at the execution end gives me
main] org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:601) - Closing application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=27756227]
[main] org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:241) - Publishing event in context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=27756227]: org.springframework.context.event.ContextClosedEvent[source=org.springframework.context.support.ClassPathXmlApplicationContext: display name [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=27756227]; startup date [Thu Nov 15 19:07:02 CET 2007]; root of context hierarchy]
[main] org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:273) - Destroying singletons in {org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [fwk-propertyConfigurer,xxx,jtaTM,trService,trSession,trSessionProvider,trSessionPool,prefetchPolicy,redeliveryPolicy,listenerContainerParent,messageListener,connectionFactory,listenerContainer,tradeRepositoryImporter,jamonInterceptor,fwk-jamonAutoProxyCreator,errorHandler,jmsTemplate]; root of BeanFactory hierarchy}
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:87) - Applying DestructionAwareBeanPostProcessors to bean with name 'listenerContainer'
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:99) - Invoking destroy() on bean with name 'listenerContainer'
[main] org.springframework.jms.listener.AbstractMessageListenerContainer.shutdown(AbstractMessageListenerContainer.java:520) - Shutting down message listener container
[main] org.springframework.jms.listener.DefaultMessageListenerContainer.destroyListener(DefaultMessageListenerContainer.java:725) - Waiting for shutdown of message listener invokers
[main] org.springframework.jms.listener.DefaultMessageListenerContainer.destroyListener(DefaultMessageListenerContainer.java:729) - Still waiting for shutdown of 1 message listener invokers
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:705) - Triggering beforeCommit synchronization
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion(AbstractPlatformTransactionManager.java:718) - Triggering beforeCompletion synchronization
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:188) - Removed value [org.springframework.jms.connection.JmsResourceHolder@13f347] for key [org.jencks.pool.PooledSpringXAConnectionFactory@1bef4c6] from thread [DefaultMessageListenerContainer-1]
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXASession.close(PooledSpringXASession.java:93) - ---->>>>> PooledSpringXASession.close() called
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXASession.close(PooledSpringXASession.java:113) - ---->>>>> ignoreClose IS TRUE! KEEPING SESSION OPEN!
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:538) - Initiating transaction commit
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit(AbstractPlatformTransactionManager.java:731) - Triggering afterCommit synchronization
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:747) - Triggering afterCompletion synchronization
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXAConnection$Synchronization.afterCompletion(PooledSpringXAConnection.java:322) - -->> PooledSpringXAConnection.[synchronization].afterCompletion() CALLED...
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:188) - Removed value [org.jencks.pool.PooledSpringXASession@1dba9f9] for key [ActiveMQConnection {id=ID:kdefombelle-4368-1195150028871-1:0,clientId=ID:kdefombelle-4368-1195150028871-2:0,started=true}] from thread [DefaultMessageListenerContainer-1]
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXAConnection$Synchronization.afterCompletion(PooledSpringXAConnection.java:328) - -->> RETURNING JMS SESSION TO POOL...
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXASession.close(PooledSpringXASession.java:93) - ---->>>>> PooledSpringXASession.close() called
[DefaultMessageListenerContainer-1] org.jencks.pool.PooledSpringXASession.close(PooledSpringXASession.java:98) - ---->>>>> ignoreClose = false, so returning session pool...
[DefaultMessageListenerContainer-1] org.jencks.pool.XASessionPool.passivateObject(XASessionPool.java:93) - ---->>>>> SESSION HAS BEEN RETURNED TO POOL: org.jencks.pool.PooledSpringXASession@1dba9f9
[DefaultMessageListenerContainer-1] org.springframework.transaction.support.TransactionSynchronizationManager.clearSynchronization(TransactionSynchronizationManager.java:270) - Clearing transaction synchronization
[main] org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:322) - Retrieved dependent beans for bean 'trSessionPool': [trSessionProvider]
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:87) - Applying DestructionAwareBeanPostProcessors to bean with name 'trSessionPool'
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:99) - Invoking destroy() on bean with name 'trSessionPool'
[main] org.springframework.aop.target.CommonsPoolTargetSource.destroy(CommonsPoolTargetSource.java:264) - Closing Commons ObjectPool
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:87) - Applying DestructionAwareBeanPostProcessors to bean with name 'trSession'
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:153) - Invoking custom destroy method on bean with name 'trSession'
[main] org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:322) - Retrieved dependent beans for bean 'trService': [trSessionPool]
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:87) - Applying DestructionAwareBeanPostProcessors to bean with name 'trService'
[main] org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:153) - Invoking custom destroy method on bean with name 'trService'
Thanks for any info...
« Return to Thread: Is Spring able to destroy cleanly PooledSpringXAConnection(s) ?
| Free embeddable forum powered by Nabble | Forum Help |