[ 
http://issues.apache.org/jira/browse/DERBY-898?page=comments#action_12365127 ] 

Kathey Marsden commented on DERBY-898:
--------------------------------------

Checked in fix to 10.1

Date: Fri Feb  3 13:00:35 2006
New Revision: 374742

URL: http://svn.apache.org/viewcvs?rev=374742&view=rev


> setAutoCommit(false) is not working properly for local connection 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

Reply via email to