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

Reply via email to