hhm, interesting. I took your DMLC definition and loaded it into a testcase here. No Camel involved at all, just Spring DMLC, Spring TX Manager and ActiveMQ PooledConnectionFactory.
I still see the same stack trace at runtime where the JmsTransactionManager calls into the ConnectionFactory.getConnection() method every time it starts a new TX.
The logging output also contains these lines, indicating that a connection was retrieved from the pool.
Code:
[2012-02-29 11:10:47,389] org.springframework.jms.connection.JmsTransactionManager DEBUG Created JMS transaction on Session [PooledSession { ActiveMQSession {id=ID:mac.fritz.box-61680-1330509937568-1:2:1,started=false} }] from Connection [PooledConnection { org.apache.activemq.pool.ConnectionPool@4271c5bc }]
[2012-02-29 11:10:47,391] mework.transaction.support.TransactionSynchronizationManager TRACE Bound value [org.springframework.jms.connection.JmsResourceHolder@4054c9a3] for key [org.apache.activemq.pool.PooledConnectionFactory@4ee3990b] to thread [DMLC-1]
[2012-02-29 11:10:48,394] mework.transaction.support.TransactionSynchronizationManager TRACE Retrieved value [org.springframework.jms.connection.JmsResourceHolder@4054c9a3] for key [org.apache.activemq.pool.PooledConnectionFactory@4ee3990b] bound to thread [DMLC-1]
[2012-02-29 11:10:48,405] org.apache.activemq.ActiveMQSession DEBUG ID:mac.fritz.box-61680-1330509937568-1:1:1 Transaction Commit :null
[2012-02-29 11:10:48,405] org.springframework.jms.connection.JmsTransactionManager DEBUG Initiating transaction commit
[2012-02-29 11:10:48,405] org.springframework.jms.connection.JmsTransactionManager DEBUG Committing JMS transaction on Session [PooledSession { ActiveMQSession {id=ID:mac.fritz.box-61680-1330509937568-1:2:1,started=false} }]
[2012-02-29 11:10:48,405] org.apache.activemq.ActiveMQSession DEBUG ID:mac.fritz.box-61680-1330509937568-1:2:1 Transaction Commit :null
[2012-02-29 11:10:48,406] mework.transaction.support.TransactionSynchronizationManager TRACE Removed value [org.springframework.jms.connection.JmsResourceHolder@4054c9a3] for key [org.apache.activemq.pool.PooledConnectionFactory@4ee3990b] from thread [DMLC-1]
Current stack trace of DMLC thread when starting a new Transaction:
Code:
Thread [DMLC-1] (Suspended)
owns: org.apache.activemq.pool.PooledConnectionFactory (id=93)
org.apache.activemq.pool.PooledConnectionFactory.createConnection(java.lang.String, java.lang.String) line: 106
org.apache.activemq.pool.PooledConnectionFactory.createConnection() line: 94
org.springframework.jms.connection.JmsTransactionManager.createConnection() line: 280
org.springframework.jms.connection.JmsTransactionManager.doBegin(java.lang.Object, org.springframework.transaction.TransactionDefinition) line: 179
org.springframework.jms.connection.JmsTransactionManager(org.springframework.transaction.support.AbstractPlatformTransactionManager).getTransaction(org.springframework.transaction.TransactionDefinition) line: 371
org.springframework.jms.listener.DefaultMessageListenerContainer(org.springframework.jms.listener.AbstractPollingMessageListenerContainer).receiveAndExecute(java.lang.Object, javax.jms.Session, javax.jms.MessageConsumer) line: 240
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener() line: 1058
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop() line: 1050
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run() line: 947
java.lang.Thread.run() line: 680