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)