commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Florent Guillaume (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (DBCP-355) DataSourceXAConnectionFactory does not store the XAConnection
Date Sun, 02 Feb 2014 22:18:09 GMT

    [ 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)

Mime
View raw message