[ 
https://issues.apache.org/jira/browse/DBCP-355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13634490#comment-13634490
 ] 

Florent Guillaume edited comment on DBCP-355 at 2/2/14 10:16 PM:
-----------------------------------------------------------------

Hi,
I've been hit by this problem as well. I'm attaching a patch on top of 1.4, 
including a unit test for it.
(Nuxeo reference: [NXP-11433|https://jira.nuxeo.com/browse/NXP-11433].)
Regards



was (Author: fguillaume):
Hi,
I've been hit by this problem as well. I'm attaching a patch on top of 1.4, 
including a unit test for it.
Regards


> 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.3, 1.4
>         Environment: MysqlXADataSource passed to BasicManagedDataSource
>            Reporter: Clement Pang
>             Fix For: 1.3.1, 1.4.1
>
>         Attachments: DBCP-355.diff
>
>
> 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 java.sql.Connection 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 was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to