Author: cbegin
Date: Sat Jan 23 20:43:08 2010
New Revision: 902485

URL: http://svn.apache.org/viewvc?rev=902485&view=rev
Log:
added transaction isolation level support to sqlsessionfactory

Added:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/TransactionIsolationLevel.java
Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java?rev=902485&r1=902484&r2=902485&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSessionFactory.java
 Sat Jan 23 20:43:08 2010
@@ -7,13 +7,12 @@
   SqlSession openSession();
 
   SqlSession openSession(boolean autoCommit);
-
   SqlSession openSession(Connection connection);
+  SqlSession openSession(TransactionIsolationLevel level);
 
   SqlSession openSession(ExecutorType execType);
-
   SqlSession openSession(ExecutorType execType, boolean autoCommit);
-
+  SqlSession openSession(ExecutorType execType, TransactionIsolationLevel 
level);
   SqlSession openSession(ExecutorType execType, Connection connection);
 
   Configuration getConfiguration();

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/TransactionIsolationLevel.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/TransactionIsolationLevel.java?rev=902485&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/TransactionIsolationLevel.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/TransactionIsolationLevel.java
 Sat Jan 23 20:43:08 2010
@@ -0,0 +1,21 @@
+package org.apache.ibatis.session;
+
+import java.sql.Connection;
+
+public enum TransactionIsolationLevel {
+  NONE(Connection.TRANSACTION_NONE),
+  READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),
+  READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),
+  REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),
+  SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);
+
+  private final int level;
+
+  private TransactionIsolationLevel(int level) {
+    this.level = level;
+  }
+
+  public int getLevel() {
+    return level;
+  }
+}

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java?rev=902485&r1=902484&r2=902485&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java
 Sat Jan 23 20:43:08 2010
@@ -29,23 +29,50 @@
   }
 
   public SqlSession openSession() {
-    return openSession(configuration.getDefaultExecutorType(), false);
+    return openSessionFromDataSource(configuration.getDefaultExecutorType(), 
null, false);
   }
 
   public SqlSession openSession(boolean autoCommit) {
-    return openSession(configuration.getDefaultExecutorType(), autoCommit);
+    return openSessionFromDataSource(configuration.getDefaultExecutorType(), 
null, autoCommit);
   }
 
   public SqlSession openSession(ExecutorType execType) {
-    return openSession(execType, false);
+    return openSessionFromDataSource(execType, null, false);
+  }
+
+  public SqlSession openSession(TransactionIsolationLevel level) {
+    return openSessionFromDataSource(configuration.getDefaultExecutorType(), 
level, false);
+  }
+
+  public SqlSession openSession(ExecutorType execType, 
TransactionIsolationLevel level) {
+    return openSessionFromDataSource(execType, level, false);
   }
 
   public SqlSession openSession(ExecutorType execType, boolean autoCommit) {
+    return openSessionFromDataSource(execType, null, autoCommit);
+  }
+
+  public SqlSession openSession(Connection connection) {
+    return openSessionFromConnection(configuration.getDefaultExecutorType(), 
connection);
+  }
+
+  public SqlSession openSession(ExecutorType execType, Connection connection) {
+    return openSessionFromConnection(execType, connection);
+  }
+
+  public Configuration getConfiguration() {
+    return configuration;
+  }
+
+  private SqlSession openSessionFromDataSource(ExecutorType execType, 
TransactionIsolationLevel level, boolean autoCommit) {
     try {
       final Environment environment = configuration.getEnvironment();
       final DataSource dataSource = getDataSourceFromEnvironment(environment);
       TransactionFactory transactionFactory = 
getTransactionFactoryFromEnvironment(environment);
       Connection connection = dataSource.getConnection();
+      if (level != null) {
+        connection.setTransactionIsolation(level.getLevel());
+      }
       connection = wrapConnection(connection);
       Transaction tx = transactionFactory.newTransaction(connection, 
autoCommit);
       Executor executor = configuration.newExecutor(tx, execType);
@@ -57,25 +84,7 @@
     }
   }
 
-  private DataSource getDataSourceFromEnvironment(Environment environment) {
-    if (environment == null || environment.getDataSource() == null) {
-      throw new SessionException("Configuration does not include an 
environment with a DataSource, so session cannot be created unless a connection 
is passed in.");
-    }
-    return environment.getDataSource();
-  }
-
-  private TransactionFactory getTransactionFactoryFromEnvironment(Environment 
environment) {
-    if (environment == null || environment.getTransactionFactory() == null) {
-      return managedTransactionFactory;
-    }
-    return environment.getTransactionFactory();
-  }
-
-  public SqlSession openSession(Connection connection) {
-    return openSession(configuration.getDefaultExecutorType(), connection);
-  }
-
-  public SqlSession openSession(ExecutorType execType, Connection connection) {
+  private SqlSession openSessionFromConnection(ExecutorType execType, 
Connection connection) {
     try {
       boolean autoCommit;
       try {
@@ -98,8 +107,18 @@
     }
   }
 
-  public Configuration getConfiguration() {
-    return configuration;
+  private DataSource getDataSourceFromEnvironment(Environment environment) {
+    if (environment == null || environment.getDataSource() == null) {
+      throw new SessionException("Configuration does not include an 
environment with a DataSource, so session cannot be created unless a connection 
is passed in.");
+    }
+    return environment.getDataSource();
+  }
+
+  private TransactionFactory getTransactionFactoryFromEnvironment(Environment 
environment) {
+    if (environment == null || environment.getTransactionFactory() == null) {
+      return managedTransactionFactory;
+    }
+    return environment.getTransactionFactory();
   }
 
   private Connection wrapConnection(Connection connection) {

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java?rev=902485&r1=902484&r2=902485&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
 Sat Jan 23 20:43:08 2010
@@ -28,7 +28,7 @@
 
   @Test
   public void shouldSelectAllAuthors() throws Exception {
-    SqlSession session = sqlMapper.openSession();
+    SqlSession session = 
sqlMapper.openSession(TransactionIsolationLevel.SERIALIZABLE);
     try {
       List<Author> authors = 
session.selectList("domain.blog.mappers.AuthorMapper.selectAllAuthors");
       assertEquals(2, authors.size());


Reply via email to