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 "Mamta A. Satoor (JIRA)" <de...@db.apache.org> on 2005/08/23 08:07:10 UTC
[jira] Assigned: (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 ]
Mamta A. Satoor reassigned DERBY-421:
-------------------------------------
Assign To: Mamta A. Satoor
> 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
> Assignee: Mamta A. Satoor
>
> 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