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

Knut Anders Hatlen commented on DERBY-2220:
-------------------------------------------

Is point 2 (Forbid the call to XAConnection.close when there is a global 
transaction associated with the corresponding resource) a necessary part of 
this bug fix, or would it be better to discuss/fix it under a separate issue?

It seems to me the patch correctly implements what you have described. I'm a 
little confused after reading the discussion. Was there ever consensus that the 
described approach was correct? It does sound correct to me, but I haven't 
studied all the different standards mentioned.

Some small questions and comments to the try4 patch:
  - could NetXAResource.currentXid have been private?
  - abortCurrentTransaction() checks (e.errorCode != XAException.XA_RBOTHER && 
e.errorCode != XAException.XA_RBROLLBACK). Would it make sense to test 
(errorCode < XA_RBBASE || errorCode > XA_RBEND) instead?
  - ClientPooledConnection (super class of ClientXAConnection) calls close() in 
its finalize method (existing code). With the new exception thrown by 
ClientXAConnection.close(), could that cause a problem when an active 
XAConnection is garbage collected?
  - should XATransactionTest have been added to jdbcapi._Suite so that it runs 
under suites.All?
  - I think the suite() method could be simplified to "return 
TestConfiguration.defaultSuite(...)"
  - the Statement objects in testXAConnection() are not closed
  - in previous discussions about JUnit tests it has been mentioned that 
referencing constants in org.apache.derby.shared.common.reference.SQLState in 
tests is not recommended. Instead one should hard code the SQL state (in this 
case "25000") in the test. Also, I would recommend using 
BaseJDBCTestCase.assertSQLState() instead of 
assertTrue(ex.getSQLState().equals...).
  - there is a test for XAConnection.close() that is supposed to fail. What 
about adding a test case where it doesn't fail?
  - I'm not a big fan of finally clauses in the tests, since exceptions in them 
might hide the original error. Putting the cleanup code outside the finally 
clause would only be a problem if the test fails, and I agree with Dan's 
previous comment about not optimizing tests for the time when they fail.

> 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