You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Mike Matrigali (JIRA)" <de...@db.apache.org> on 2005/08/17 01:31:57 UTC

[jira] Updated: (DERBY-421) starting an XA transaction resets the isolation level set with SET CURRENT ISOLATION

     [ http://issues.apache.org/jira/browse/DERBY-421?page=all ]

Mike Matrigali updated DERBY-421:
---------------------------------

    Component: JDBC

> starting an XA transaction resets the isolation level set with SET CURRENT ISOLATION
> ------------------------------------------------------------------------------------
>
>          Key: DERBY-421
>          URL: http://issues.apache.org/jira/browse/DERBY-421
>      Project: Derby
>         Type: Sub-task
>   Components: JDBC
>     Reporter: Kathey Marsden

>
> When an XA Transaction is started the isolation level set with SET CURRENT ISOLATION gets reset to CS.
> Embedded setTransactionIsolation  does not have this problem but this problem is the root cause of DERBY-414 because client implements setTransactionIsolation by sending SET CURRENT ISOLATION
> $ java TestSetCurrentIsolation
> Database product: Apache Derby
> Database version: 10.2.0.0 alpha
> Driver name:      Apache Derby Embedded JDBC Driver
> Driver version:   10.2.0.0 alpha
> SET CURRENT ISOLATION = UR
> CURRENT ISOLATION: UR
> getTransactionIsolation:TRANSACTION_READ_UNCOMMITTED:1
> Isolation level after xa start
> CURRENT ISOLATION: CS
> getTransactionIsolation:TRANSACTION_READ_COMMITTED:2
> $
> import java.sql.*;
> import javax.sql.*;
> import javax.transaction.xa.*;
> public class TestSetCurrentIsolation
> {
>     public static void main(String[] args) throws Throwable
>     {
>         try
>         {
>              final org.apache.derby.jdbc.EmbeddedXADataSource ds =
>              new org.apache.derby.jdbc.EmbeddedXADataSource();
>              ds.setDatabaseName("C:\\drivers\\derby\\databases\\SCHEDDB");
>              ds.setUser("dbuser1");
>              ds.setPassword("******");
>             XAConnection xaConn = ds.getXAConnection();
>             Connection conn = xaConn.getConnection();
>             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();
>             System.out.println("SET CURRENT ISOLATION = UR");
>             stmt.executeUpdate("SET CURRENT ISOLATION = UR");
>             showIsolationLevel(conn);
>             conn.setAutoCommit(false);
>             XAResource xaRes = xaConn.getXAResource();
>             Xid xid = new TestXid(1,(byte) 32, (byte) 32);
>             xaRes.start(xid, XAResource.TMNOFLAGS);
>             System.out.println("Isolation level after xa start");
>             showIsolationLevel(conn);
>             
>             xaRes.end(xid, XAResource.TMSUCCESS);
>             xaRes.rollback(xid);
>             conn.close();
>             xaConn.close();
>         }
>         catch (SQLException sqlX)
>         {
>             System.out.println("Error on thread 1.");
>             do sqlX.printStackTrace();
>             while ((sqlX = sqlX.getNextException()) != null);
>         }
>         catch (Throwable th)
>         {
>             System.out.println("Error on thread 1.");
>             do th.printStackTrace();
>             while ((th = th.getCause()) != null);
>         }
>     }
> 	/**
> 	 * @param conn
> 	 * @throws SQLException
> 	 */
> 	private static void showIsolationLevel(Connection conn) throws SQLException {
> 		PreparedStatement ps = conn.prepareStatement("VALUES CURRENT ISOLATION");
> 		ResultSet rs = ps.executeQuery();
> 		//ResultSet rs = conn.createStatement().executeQuery("VALUES CURRENT ISOLATION");
> 		rs.next();
> 		System.out.println("CURRENT ISOLATION: " +  rs.getString(1));
> 		System.out.println("getTransactionIsolation:" + 
> 					getIsoLevelName(conn.getTransactionIsolation()));						
> 	}
> 	
> 	public static String getIsoLevelName(int level)
> 	{
> 		switch (level) {
> 			case java.sql.Connection.TRANSACTION_REPEATABLE_READ:
> 				return "TRANSACTION_REAPEATABLE_READ:" + level;
> 					
> 			case java.sql.Connection.TRANSACTION_READ_COMMITTED:
> 				return "TRANSACTION_READ_COMMITTED:" + level;
> 			case java.sql.Connection.TRANSACTION_SERIALIZABLE:
> 				return "TRANSACTION_SERIALIZABLE:" + level;
> 			case java.sql.Connection.TRANSACTION_READ_UNCOMMITTED:
> 				return "TRANSACTION_READ_UNCOMMITTED:" + level;
> 		}
> 		return "UNEXPECTED_ISO_LEVEL";
> 	}
> }

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