Derby
  1. Derby
  2. DERBY-246

XA end() fails with Connection is closed error

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.1.1.0
    • Fix Version/s: 10.1.1.0
    • Component/s: Network Client
    • Labels:
      None
    • Environment:
      I am using the 10.1.0 alpha build.

      Description

      I am testing ClientXADataSource.
      It fails when end() is called - here is the output fromn my test program.

      Running test org.simplejta.xatests.common.Test1
      autocommit = false
      No of rows Affected 1
      autocommit = true
      No of rows Affected 1
      org.apache.derby.client.am.XaException: XAER_RMFAIL : Connection is Closed.
      at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
      at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
      at org.apache.derby.client.net.NetXAResource.connectionClosedFailure(Unknown Source)
      at org.apache.derby.client.net.NetXAResource.end(Unknown Source)
      at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
      at org.simplejta.tests.DerbyClientTests.main(DerbyClientTests.java:66)
      Caused by: org.apache.derby.client.am.SqlException: Connection is Closed.
      ... 4 more
      Test org.simplejta.xatests.common.Test1 failed

      The test program is:

      /*

      • Test case for multiple logical connections between start() and end().
        */
        package org.simplejta.xatests.common;

      import java.sql.Connection;
      import java.sql.SQLException;
      import java.sql.Statement;

      import javax.sql.XAConnection;
      import javax.sql.XADataSource;
      import javax.transaction.xa.XAResource;
      import javax.transaction.xa.Xid;

      public class Test1 extends TestCase {

      public void doTest(XADataSource ds) throws Exception

      { // Get a XA connection to the underlying data source XAConnection pc1 = ds.getXAConnection(); // Get the XA Resource XAResource xar1 = pc1.getXAResource(); // Create an Xid Xid xid1 = Utils.createXid(1); // Start the XA transaction xar1.start(xid1, XAResource.TMNOFLAGS); // Get a Logical Connection Connection conn1 = pc1.getConnection(); System.out.println("autocommit = " + conn1.getAutoCommit()); // Do something with conn1 doSomeWork1(conn1, 50); // Close the logical connection conn1.close(); // Get another logical connection conn1 = pc1.getConnection(); System.out.println("autocommit = " + conn1.getAutoCommit()); // Do something with conn1 doSomeWork1(conn1, 51); // Close the logical connection conn1.close(); // END the branche xar1.end(xid1, XAResource.TMSUCCESS); // Prepare the RMs int prp1 = xar1.prepare(xid1); // Commit transaction xar1.commit(xid1, false); // Close physical connection pc1.close(); }

      private void doSomeWork1(Connection conn, int deptno) throws SQLException

      { Statement stmt = conn.createStatement(); int cnt = stmt .executeUpdate("INSERT INTO dept VALUES (" + deptno + ", 'BSD', 'LONDON')"); System.out.println("No of rows Affected " + cnt); stmt.close(); stmt = null; }

      }

      This test works fine with EmbeddedXADataSource. It also works fine with Oracle.

      Also, note that this error seems similar to the error I am getting with DB2 using the DB2 type 4 driver.

      Running test org.simplejta.xatests.common.Test1
      autocommit = false
      No of rows Affected 1
      autocommit = false
      No of rows Affected 1
      com.ibm.db2.jcc.b.de: XAER_RMFAIL : Connection is Closed. : Exception from native code during XA
      at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:695)
      at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:709)
      at com.ibm.db2.jcc.uw.UWXAResource.end(UWXAResource.java:227)
      at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
      at org.simplejta.tests.DB2Tests.main(DB2Tests.java:65)
      Caused by: com.ibm.db2.jcc.b.SqlException: Connection is Closed.
      at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:705)
      ... 3 more
      Test org.simplejta.xatests.common.Test1 failed

      Curiously, the error appears to corrupt the database. Subsequent attempts to start the database gives an error.

      org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: tca[..snip..]XJ040.C..[snip]..STB0:XSTB0.M..[snip]..led to start database 'tca', see the next exception for details...[snip]..An exception was thrown during transaction abort...[snip]..(server log:c:\derby\databases\derby.log)
      at org.apache.derby.client.am.Connection.completeSqlca(Unknown Source)
      at org.apache.derby.client.net.NetConnectionReply.parseRdbAccessFailed(Unknown Source)
      at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
      at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
      at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
      at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
      at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
      at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
      at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
      at org.apache.derby.client.net.NetConnection.initialize(Unknown Source)
      at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
      at org.apache.derby.client.net.NetXAConnection.<init>(Unknown Source)
      at org.apache.derby.client.ClientPooledConnection.<init>(Unknown Source)
      at org.apache.derby.client.ClientXAConnection.<init>(Unknown Source)
      at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)
      at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)

      1. derby246.diff
        28 kB
        Kathey Marsden
      2. DERBY-246_irc_6_3_2005
        4 kB
        Kathey Marsden

        Issue Links

          Activity

          Dibyendu Majumdar created issue -
          Kathey Marsden made changes -
          Field Original Value New Value
          Assignee Kathey Marsden [ kmarsden ]
          Myrna van Lunteren made changes -
          Description I am testing ClientXADataSource.
          It fails when end() is called - here is the output fromn my test program.

          Running test org.simplejta.xatests.common.Test1
          autocommit = false
          No of rows Affected 1
          autocommit = true
          No of rows Affected 1
          org.apache.derby.client.am.XaException: XAER_RMFAIL : Connection is Closed.
          at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.connectionClosedFailure(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.end(Unknown Source)
          at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
          at org.simplejta.tests.DerbyClientTests.main(DerbyClientTests.java:66)
          Caused by: org.apache.derby.client.am.SqlException: Connection is Closed.
          ... 4 more
          Test org.simplejta.xatests.common.Test1 failed

          The test program is:

          /*
           * Test case for multiple logical connections between start() and end().
           */
          package org.simplejta.xatests.common;

          import java.sql.Connection;
          import java.sql.SQLException;
          import java.sql.Statement;

          import javax.sql.XAConnection;
          import javax.sql.XADataSource;
          import javax.transaction.xa.XAResource;
          import javax.transaction.xa.Xid;

          public class Test1 extends TestCase {

              public void doTest(XADataSource ds) throws Exception {

                      // Get a XA connection to the underlying data source
                      XAConnection pc1 = ds.getXAConnection();

                      // Get the XA Resource
                      XAResource xar1 = pc1.getXAResource();

                      // Create an Xid
                      Xid xid1 = Utils.createXid(1);

                      // Start the XA transaction
                      xar1.start(xid1, XAResource.TMNOFLAGS);

                      // Get a Logical Connection
                      Connection conn1 = pc1.getConnection();
                      System.out.println("autocommit = " + conn1.getAutoCommit());

                      // Do something with conn1
                      doSomeWork1(conn1, 50);

                      // Close the logical connection
                      conn1.close();

                      // Get another logical connection
                      conn1 = pc1.getConnection();
                      System.out.println("autocommit = " + conn1.getAutoCommit());

                      // Do something with conn1
                      doSomeWork1(conn1, 51);

                      // Close the logical connection
                      conn1.close();

                      // END the branche
                      xar1.end(xid1, XAResource.TMSUCCESS);

                      // Prepare the RMs
                      int prp1 = xar1.prepare(xid1);

                      // Commit transaction
                      xar1.commit(xid1, false);

                      // Close physical connection
                      pc1.close();
              }

              private void doSomeWork1(Connection conn, int deptno) throws SQLException {
                  Statement stmt = conn.createStatement();
                  int cnt = stmt
                          .executeUpdate("INSERT INTO dept VALUES (" + deptno + ", 'BSD', 'LONDON')");
                  System.out.println("No of rows Affected " + cnt);
                  stmt.close();
                  stmt = null;
              }
          }


          This test works fine with EmbeddedXADataSource. It also works fine with Oracle.

          Also, note that this error seems similar to the error I am getting with DB2 using the DB2 type 4 driver.

          Running test org.simplejta.xatests.common.Test1
          autocommit = false
          No of rows Affected 1
          autocommit = false
          No of rows Affected 1
          com.ibm.db2.jcc.b.de: XAER_RMFAIL : Connection is Closed. : Exception from native code during XA
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:695)
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:709)
          at com.ibm.db2.jcc.uw.UWXAResource.end(UWXAResource.java:227)
          at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
          at org.simplejta.tests.DB2Tests.main(DB2Tests.java:65)
          Caused by: com.ibm.db2.jcc.b.SqlException: Connection is Closed.
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:705)
          ... 3 more
          Test org.simplejta.xatests.common.Test1 failed



          Curiously, the error appears to corrupt the database. Subsequent attempts to start the database gives an error.


          org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: tca?XJ040.C???XSTB0:XSTB0.M?Failed to start database 'tca', see the next exception for details.?An exception was thrown during transaction abort.?(server log:c:\derby\databases\derby.log)
          at org.apache.derby.client.am.Connection.completeSqlca(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseRdbAccessFailed(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
          at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
          at org.apache.derby.client.net.NetConnection.initialize(Unknown Source)
          at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
          at org.apache.derby.client.net.NetXAConnection.<init>(Unknown Source)
          at org.apache.derby.client.ClientPooledConnection.<init>(Unknown Source)
          at org.apache.derby.client.ClientXAConnection.<init>(Unknown Source)
          at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)
          at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)



          I am testing ClientXADataSource.
          It fails when end() is called - here is the output fromn my test program.

          Running test org.simplejta.xatests.common.Test1
          autocommit = false
          No of rows Affected 1
          autocommit = true
          No of rows Affected 1
          org.apache.derby.client.am.XaException: XAER_RMFAIL : Connection is Closed.
          at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.connectionClosedFailure(Unknown Source)
          at org.apache.derby.client.net.NetXAResource.end(Unknown Source)
          at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
          at org.simplejta.tests.DerbyClientTests.main(DerbyClientTests.java:66)
          Caused by: org.apache.derby.client.am.SqlException: Connection is Closed.
          ... 4 more
          Test org.simplejta.xatests.common.Test1 failed

          The test program is:

          /*
           * Test case for multiple logical connections between start() and end().
           */
          package org.simplejta.xatests.common;

          import java.sql.Connection;
          import java.sql.SQLException;
          import java.sql.Statement;

          import javax.sql.XAConnection;
          import javax.sql.XADataSource;
          import javax.transaction.xa.XAResource;
          import javax.transaction.xa.Xid;

          public class Test1 extends TestCase {

              public void doTest(XADataSource ds) throws Exception {

                      // Get a XA connection to the underlying data source
                      XAConnection pc1 = ds.getXAConnection();

                      // Get the XA Resource
                      XAResource xar1 = pc1.getXAResource();

                      // Create an Xid
                      Xid xid1 = Utils.createXid(1);

                      // Start the XA transaction
                      xar1.start(xid1, XAResource.TMNOFLAGS);

                      // Get a Logical Connection
                      Connection conn1 = pc1.getConnection();
                      System.out.println("autocommit = " + conn1.getAutoCommit());

                      // Do something with conn1
                      doSomeWork1(conn1, 50);

                      // Close the logical connection
                      conn1.close();

                      // Get another logical connection
                      conn1 = pc1.getConnection();
                      System.out.println("autocommit = " + conn1.getAutoCommit());

                      // Do something with conn1
                      doSomeWork1(conn1, 51);

                      // Close the logical connection
                      conn1.close();

                      // END the branche
                      xar1.end(xid1, XAResource.TMSUCCESS);

                      // Prepare the RMs
                      int prp1 = xar1.prepare(xid1);

                      // Commit transaction
                      xar1.commit(xid1, false);

                      // Close physical connection
                      pc1.close();
              }

              private void doSomeWork1(Connection conn, int deptno) throws SQLException {
                  Statement stmt = conn.createStatement();
                  int cnt = stmt
                          .executeUpdate("INSERT INTO dept VALUES (" + deptno + ", 'BSD', 'LONDON')");
                  System.out.println("No of rows Affected " + cnt);
                  stmt.close();
                  stmt = null;
              }
          }


          This test works fine with EmbeddedXADataSource. It also works fine with Oracle.

          Also, note that this error seems similar to the error I am getting with DB2 using the DB2 type 4 driver.

          Running test org.simplejta.xatests.common.Test1
          autocommit = false
          No of rows Affected 1
          autocommit = false
          No of rows Affected 1
          com.ibm.db2.jcc.b.de: XAER_RMFAIL : Connection is Closed. : Exception from native code during XA
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:695)
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:709)
          at com.ibm.db2.jcc.uw.UWXAResource.end(UWXAResource.java:227)
          at org.simplejta.xatests.common.Test1.doTest(Test1.java:52)
          at org.simplejta.tests.DB2Tests.main(DB2Tests.java:65)
          Caused by: com.ibm.db2.jcc.b.SqlException: Connection is Closed.
          at com.ibm.db2.jcc.uw.UWXAResource.a(UWXAResource.java:705)
          ... 3 more
          Test org.simplejta.xatests.common.Test1 failed



          Curiously, the error appears to corrupt the database. Subsequent attempts to start the database gives an error.


          org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: tca[..snip..]XJ040.C..[snip]..STB0:XSTB0.M..[snip]..led to start database 'tca', see the next exception for details...[snip]..An exception was thrown during transaction abort...[snip]..(server log:c:\derby\databases\derby.log)
          at org.apache.derby.client.am.Connection.completeSqlca(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseRdbAccessFailed(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
          at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
          at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
          at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
          at org.apache.derby.client.net.NetConnection.initialize(Unknown Source)
          at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
          at org.apache.derby.client.net.NetXAConnection.<init>(Unknown Source)
          at org.apache.derby.client.ClientPooledConnection.<init>(Unknown Source)
          at org.apache.derby.client.ClientXAConnection.<init>(Unknown Source)
          at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)
          at org.apache.derby.jdbc.ClientXADataSource.getXAConnection(Unknown Source)



          Kathey Marsden made changes -
          Attachment DERBY246.diff [ 20197 ]
          Kathey Marsden made changes -
          Comment [ 65961 ]
          Kathey Marsden made changes -
          Attachment derby246.diff [ 20421 ]
          Kathey Marsden made changes -
          Attachment DERBY-246_irc_6_3_2005 [ 12310528 ]
          Kathey Marsden made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Fix Version/s 10.1.0.0 [ 10993 ]
          Resolution Fixed [ 1 ]
          Kathey Marsden made changes -
          Link This issue is part of DERBY-339 [ DERBY-339 ]
          Julius Stroffek made changes -
          Link This issue is related to DERBY-2420 [ DERBY-2420 ]
          Kathey Marsden made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Gavin made changes -
          Workflow jira [ 42124 ] Default workflow, editable Closed status [ 12797162 ]

            People

            • Assignee:
              Kathey Marsden
              Reporter:
              Dibyendu Majumdar
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development