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

Reply via email to