Author: cbegin
Date: Sun Oct  4 04:58:13 2009
New Revision: 821467

URL: http://svn.apache.org/viewvc?rev=821467&view=rev
Log:
Fixed IBATIS-636 Changing the Environment does not change the 
SqlSessionFactory's fields

Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSessionFactory.java

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=821467&r1=821466&r2=821467&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
 Sun Oct  4 04:58:13 2009
@@ -17,20 +17,11 @@
   private static final Log log = LogFactory.getLog(Connection.class);
 
   private final Configuration configuration;
-  private Environment environment;
-  private DataSource dataSource;
-  private TransactionFactory transactionFactory;
+  private final TransactionFactory managedTransactionFactory;
 
   public DefaultSqlSessionFactory(Configuration configuration) {
     this.configuration = configuration;
-    this.environment = configuration.getEnvironment();
-    if (environment == null) {
-      this.dataSource = null;
-      this.transactionFactory = new ManagedTransactionFactory();
-    } else {
-      this.dataSource = environment.getDataSource();
-      this.transactionFactory = environment.getTransactionFactory();
-    }
+    this.managedTransactionFactory = new ManagedTransactionFactory();
   }
 
   public SqlSession openSession() {
@@ -47,9 +38,9 @@
 
   public SqlSession openSession(ExecutorType execType, boolean autoCommit) {
     try {
-      if (dataSource == null) {
-        throw new SessionException("Configuration does not include an 
environment with a DataSource, so session cannot be created unless a connection 
is passed in.");
-      }
+      final Environment environment = configuration.getEnvironment();
+      final DataSource dataSource = getDataSourceFromEnvironment(environment);
+      TransactionFactory transactionFactory = 
getTransactionFactoryFromEnvironment(environment);
       Connection connection = dataSource.getConnection();
       connection = wrapConnection(connection);
       Transaction tx = transactionFactory.newTransaction(connection, 
autoCommit);
@@ -60,6 +51,21 @@
     }
   }
 
+  private DataSource getDataSourceFromEnvironment(Environment environment) {
+    final DataSource dataSource = environment.getDataSource();
+    if (dataSource == 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 dataSource;
+  }
+
+  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);
   }
@@ -75,6 +81,8 @@
         autoCommit = true;
       }
       connection = wrapConnection(connection);
+      final Environment environment = configuration.getEnvironment();
+      final TransactionFactory transactionFactory = 
getTransactionFactoryFromEnvironment(environment);
       Transaction tx = transactionFactory.newTransaction(connection, 
autoCommit);
       Executor executor = configuration.newExecutor(tx, execType);
       return new DefaultSqlSession(configuration, executor, autoCommit);


Reply via email to