db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Julius Stroffek (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-2220) Uncommitted transactions executed throught XAResource will held locks after the application terminates (or crashes during the transaction).
Date Fri, 02 Mar 2007 08:19:50 GMT

     [ https://issues.apache.org/jira/browse/DERBY-2220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Julius Stroffek updated DERBY-2220:
-----------------------------------

    Attachment: d2220_try4.stat
                d2220_try4.diff

This patch implements the following:

1.) Rollback the global transaction on a derby server when the network socket is closed.
2.) Forbid the call to XAConnection.close when there is a global transaction associated with
the corresponding resource. Similar code is added to the embedded driver and client driver
as well. The state of the connection is not changed at all.
3.) Test for 2.) is added. I did not write a test for 1.) because I find it a bit more difficult
since a test does not have an access to the underlying code to close the socket.

Because the XAConnection is a subclass of PooledConnection object the close method throws
only SQLException and not XAException. According DTP XA Spec the xa_close should return XAER_PROTO
which should map to XAException. This is not possible and the same SQLException is thrown
now as the embedded driver did before. I added the code for embedded driver to handle XA case
separately because the connection was left in a state when it could not be used anymore.

Any comments?

> Uncommitted transactions executed throught XAResource will held locks after the application
terminates (or crashes during the transaction).
> -------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2220
>                 URL: https://issues.apache.org/jira/browse/DERBY-2220
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.3.0.0
>         Environment: Solaris Nevada build 49, Sun's JDK1.6
>            Reporter: Julius Stroffek
>         Assigned To: Julius Stroffek
>         Attachments: d2220_beta.diff, d2220_beta2.diff, d2220_try1.diff, d2220_try1.stat,
d2220_try2.diff, d2220_try2.stat, d2220_try4.diff, d2220_try4.stat, XATranTest.java, xxx.sql
>
>
> Using this piece of code derby will not release a table lock of 'dummy' table.
>             String query = "insert into dummy (field1) values ('" + Integer.toString(value)
+ "')";
>             XAConnection xaConnection = createXAConnection("jdbc:derby://localhost:1527/TestDB",
"", "");
>             XAResource xaResource = xaConnection.getXAResource();
>             conn = xaConnection.getConnection();
>             
>             Xid xid = createXid(value);        
>             xaResource.setTransactionTimeout(10);
>             xaResource.start(xid, XAResource.TMNOFLAGS);
>             
>             Statement statement = conn.createStatement();
>             statement.execute(query);        
>             
>             // terminate the client application
>             // this will not release any locks
>             System.exit(0);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message