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, 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#a13778092
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