DataSourceXAConnectionFactory does not store the XAConnection
-------------------------------------------------------------
Key: DBCP-355
URL: https://issues.apache.org/jira/browse/DBCP-355
Project: Commons Dbcp
Issue Type: Bug
Affects Versions: 1.4, 1.3
Environment: MysqlXADataSource passed to BasicManagedDataSource
Reporter: Clement Pang
We have been diagnosing a leak with DBCP and XA mySQL and discovered that the
mySQL driver expects close() to be invoked on the XAConnection obtained from
xaDataSource.getXAConnection() instead of the java.sql.Connection returned by
xaConnection.getConnection();
The following code snippet in DataSourceXAConnectionFactory illustrates how the
XAConnection is lost:
public Connection createConnection() throws SQLException {
// create a new XAConection
XAConnection xaConnection;
if (username == null) {
xaConnection = xaDataSource.getXAConnection();
} else {
xaConnection = xaDataSource.getXAConnection(username, password);
}
// get the real connection and XAResource from the connection
Connection connection = xaConnection.getConnection();
XAResource xaResource = xaConnection.getXAResource();
// register the xa resource for the connection
transactionRegistry.registerConnection(connection, xaResource);
return connection;
}
In the code snippet above, the XAConnection is basically discarded after using
it to obtain the XAConnection and XAResource. It would be ideal if it actually
associates the XAConnection in the transactionRegistry as well so that when
PooledManagedConnection handles reallyClose(), it can also invoke close() on
the XAConnection by interrogating the TransactionRegistry for the actual
XAConnection to close.
This may be something that's mySQL specific.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira