Florent Guillaume created DBCP-564:
--------------------------------------

             Summary: BasicManagedDataSource leaks connections opened after 
transaction is rollback-only
                 Key: DBCP-564
                 URL: https://issues.apache.org/jira/browse/DBCP-564
             Project: Commons DBCP
          Issue Type: Bug
    Affects Versions: 2.7.0
            Reporter: Florent Guillaume


In the following situation a connection will be leaked and never returned to 
the pool:
 * a {{BasicManagedDataSource}} is instantiated for a non-XA driver class name 
(but with a TransactionManager and a TransactionSynchronizationRegistry),
 * a transaction is started then switched to rollback-only,
 * a connection is acquired from the datasource,
 * the connection is closed,
 * the transaction is rolled back.

The leak happens because, even though there is code in 
{{TransactionContext.addTransactionContextListener}} to properly use the 
{{transactionSynchronizationRegistry}} to register the suitable 
{{Synchronization}} to do cleanup in {{afterCompletion}}, the 
{{transactionSynchronizationRegistry}} is actually {{null}} because of the way 
the {{LocalXAConnectionFactory}} was created in 
{{BasicManagedDataSource.createConnectionFactory}}.

A PR with a test will be provided shortly.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to