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