You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2010/01/23 21:43:09 UTC

svn commit: r902485 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src: main/java/org/apache/ibatis/session/ main/java/org/apache/ibatis/session/defaults/ test/java/org/apache/ibatis/session/

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());