db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-898) setAutoCommit(false) is not working properly for local transaction with ClientXADataSource
Date Wed, 08 Feb 2006 04:38:58 GMT
    [ http://issues.apache.org/jira/browse/DERBY-898?page=comments#action_12365520 ] 

Daniel John Debrunner commented on DERBY-898:
---------------------------------------------

I think it would be good to get the names to reflect the reality that  CDC/Foundation/JSR169
is a sub-set of the JDBC 3.0 spec,
not that JDBC 3.0 is an extended version of  JSR169. 

Possible names

savepointJdbc30_JSR169
savepointJdbc30_XA

or

savepointJdbc30
savepointJdbc30_XA

IThe XA iaccurately depicts what is being tested, rather than just saying extended.



> setAutoCommit(false) is not working properly for local transaction with ClientXADataSource
> ------------------------------------------------------------------------------------------
>
>          Key: DERBY-898
>          URL: http://issues.apache.org/jira/browse/DERBY-898
>      Project: Derby
>         Type: Bug
>   Components: Network Server
>     Versions: 10.1.1.0, 10.1.1.1
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>     Priority: Critical
>      Fix For: 10.2.0.0, 10.1.3.0, 10.1.2.3
>  Attachments: DERBY-898.diff
>
>  Network Server is not honoring local 
> transaction rollback using ClientXADataSource.  Run the following standalone JDBC code.
 
> The output shows that after rolling back the local transaction, 
> the inserted data is still present.
>         final org.apache.derby.jdbc.ClientXADataSource ds =
>             new org.apache.derby.jdbc.ClientXADataSource();
>         ds.setServerName("localhost");
>         ds.setPortNumber(1527);
>         
> ds.setDatabaseName("WOMBAT");
>         ds.setTraceLevel(-1);
>         
> ds.setSecurityMechanism(ds.CLEAR_TEXT_PASSWORD_SECURITY);
>         ds.setUser("dbuser1");
>         ds.setPassword("dbpwd1");
>         //ds.setLogWriter(new 
> java.io.PrintWriter(System.out));
>         XAConnection xaConn = ds.getXAConnection();
>         Connection conn = xaConn.getConnection();
>         
> conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_R
> EAD);
>         conn.setAutoCommit(true);
>         System.out.println("Database product: " + 
> conn.getMetaData().getDatabaseProductName());
>         System.out.println("Database version: " + 
> conn.getMetaData().getDatabaseProductVersion());
>         System.out.println("Driver name:      " + 
> conn.getMetaData().getDriverName());
>         System.out.println("Driver version:   " + 
> conn.getMetaData().getDriverVersion());
>         Statement stmt = conn.createStatement();
>         try { stmt.execute("drop table cmtest"); }
>         catch (SQLException sqlX) {} // ok, didn't exist
>         stmt.execute("CREATE TABLE cmtest (id integer not null 
> primary key, name varchar(60))");
>         stmt.close();
>         conn.setAutoCommit(false);
>         PreparedStatement pstmt = conn.prepareStatement(
>             "INSERT INTO cmtest (id, name) VALUES(?,?)",
>             ResultSet.TYPE_FORWARD_ONLY,
>             ResultSet.CONCUR_READ_ONLY);
>         pstmt.setInt(1, 13);
>         pstmt.setString(2, "blah1");
>         pstmt.executeUpdate();
>         pstmt.setInt(1, 2);
>         pstmt.setString(2, "blah2");
>         pstmt.executeUpdate();
>         conn.rollback();
>         PreparedStatement pstmt2 = conn.prepareStatement(
>             "SELECT * FROM cmtest WHERE id = ?",
>             ResultSet.TYPE_FORWARD_ONLY,
>             ResultSet.CONCUR_READ_ONLY);
>         pstmt2.setInt(1, 13);
>         ResultSet rset = pstmt2.executeQuery();
>         if (rset.next())
>         {
>             System.out.println("Test fails. First insert was 
> not rolled back.");
>             System.out.println("The data is still present. It 
> is: " + rset.getObject(1) +
>                                ", " + rset.getObject(2));
>         }
>         else
>             System.out.println("Test passes. First insert was 
> rolled back.");
> Here's the output,
>     Database product: Apache Derby
>     Database version: 10.1.2.2
>     Driver name:      Apache Derby Network Client JDBC Driver
>     Driver version:   10.1.2.2
>     Test fails. First insert was not rolled back.
>     The data is still present. It is: 13, blah1
> On some brief investigation I see that the Network Server embedded connection is  in
autocomit mode so is autocommitting the transaction before the rollback.   Network server
should always have autocommit false and let the client drive the commit.  

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message