I patched the PoledSpringXAConnection with this :
public void destroy() throws JMSException {
LOGGER.warn("destroy... ");
Iterator cacheIter = cache.entrySet().iterator();
while(cacheIter.hasNext()) {
Entry entry = (Entry) cacheIter.next();
((Connection) entry.getValue()).close();
}
}
and my Spring with the following :
<bean id="connectionFactory"
class="org.jencks.pool.PooledSpringXAConnectionFactory"
destroy-method="destroy">
And the hanging still occurs, so Jencks is not the cause of my hanging
Sorry for the suspision...
Karim
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
> [EMAIL PROTECTED] for key
> [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 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:
> [EMAIL PROTECTED]
> [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...
>
>
>
>
--
View this message in context:
http://www.nabble.com/Is-Spring-able-to-destroy-cleanly-PooledSpringXAConnection%28s%29---tf4816080.html#a13793783
Sent from the jencks - user mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email