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