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