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 2007/06/10 08:55:34 UTC

svn commit: r545849 - in /ibatis/trunk/java/mapper/mapper2: src/com/ibatis/sqlmap/engine/builder/xml/ src/com/ibatis/sqlmap/engine/conifg/ src/com/ibatis/sqlmap/engine/impl/ src/com/ibatis/sqlmap/engine/transaction/ src/com/ibatis/sqlmap/engine/transac...

Author: cbegin
Date: Sat Jun  9 23:55:31 2007
New Revision: 545849

URL: http://svn.apache.org/viewvc?view=rev&rev=545849
Log:
Improved type safety on configuration class methods

Modified:
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlParserState.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/CacheModelConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ParameterMapConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ResultMapConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/BaseTransactionConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionManager.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jdbc/JdbcTransactionConfig.java
    ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jta/JtaTransactionConfig.java
    ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/StatementTest.java

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapClasspathEntityResolver.java Sat Jun  9 23:55:31 2007
@@ -15,15 +15,11 @@
  */
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.resources.Resources;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
+import com.ibatis.common.resources.*;
+import org.xml.sax.*;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.*;
+import java.util.*;
 
 /**
  * Offline entity resolver for the iBATIS DTDs

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapConfigParser.java Sat Jun  9 23:55:31 2007
@@ -1,15 +1,15 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.resources.Resources;
-import com.ibatis.common.xml.Nodelet;
-import com.ibatis.common.xml.NodeletParser;
-import com.ibatis.common.xml.NodeletUtils;
-import com.ibatis.sqlmap.client.SqlMapClient;
-import com.ibatis.sqlmap.client.SqlMapException;
+import com.ibatis.common.resources.*;
+import com.ibatis.common.xml.*;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.engine.conifg.*;
+import com.ibatis.sqlmap.engine.transaction.*;
+import com.ibatis.sqlmap.engine.datasource.*;
+import com.ibatis.sqlmap.engine.mapping.result.*;
 import org.w3c.dom.Node;
 
-import java.io.InputStream;
-import java.io.Reader;
+import java.io.*;
 import java.util.Properties;
 
 public class SqlMapConfigParser {
@@ -69,7 +69,7 @@
   private void addSqlMapConfigNodelets() {
     parser.addNodelet("/sqlMapConfig/end()", new Nodelet() {
       public void process(Node node) throws Exception {
-        state.getConfig().wireupCacheModels();
+        state.getConfig().finalizeSqlMapConfig();
       }
     });
   }
@@ -89,41 +89,47 @@
     parser.addNodelet("/sqlMapConfig/settings", new Nodelet() {
       public void process(Node node) throws Exception {
         Properties attributes = NodeletUtils.parseAttributes(node, state.getGlobalProps());
+        SqlMapConfiguration config = state.getConfig();
 
         String classInfoCacheEnabledAttr = attributes.getProperty("classInfoCacheEnabled");
         boolean classInfoCacheEnabled = (classInfoCacheEnabledAttr == null || "true".equals(classInfoCacheEnabledAttr));
+        config.setClassInfoCacheEnabled(classInfoCacheEnabled);
 
         String lazyLoadingEnabledAttr = attributes.getProperty("lazyLoadingEnabled");
         boolean lazyLoadingEnabled = (lazyLoadingEnabledAttr == null || "true".equals(lazyLoadingEnabledAttr));
+        config.setLazyLoadingEnabled(lazyLoadingEnabled);
 
         String statementCachingEnabledAttr = attributes.getProperty("statementCachingEnabled");
         boolean statementCachingEnabled = (statementCachingEnabledAttr == null || "true".equals(statementCachingEnabledAttr));
+        config.setStatementCachingEnabled(statementCachingEnabled);
 
         String cacheModelsEnabledAttr = attributes.getProperty("cacheModelsEnabled");
         boolean cacheModelsEnabled = (cacheModelsEnabledAttr == null || "true".equals(cacheModelsEnabledAttr));
+        config.setCacheModelsEnabled(cacheModelsEnabled);
 
         String enhancementEnabledAttr = attributes.getProperty("enhancementEnabled");
         boolean enhancementEnabled = (enhancementEnabledAttr == null || "true".equals(enhancementEnabledAttr));
-
-
-        String useStatementNamespacesAttr = attributes.getProperty("useStatementNamespaces");
-        boolean useStatementNamespaces = "true".equals(useStatementNamespacesAttr);
+        config.setEnhancementEnabled(enhancementEnabled);
 
         String maxTransactionsAttr = attributes.getProperty("maxTransactions");
         Integer maxTransactions = maxTransactionsAttr == null ? null : new Integer((maxTransactionsAttr));
-
+        config.setMaxTransactions(maxTransactions);
 
         String maxRequestsAttr = attributes.getProperty("maxRequests");
         Integer maxRequests = maxRequestsAttr == null ? null : new Integer(maxRequestsAttr);
+        config.setMaxRequests(maxRequests);
 
         String maxSessionsAttr = attributes.getProperty("maxSessions");
         Integer maxSessions = maxSessionsAttr == null ? null : new Integer(maxSessionsAttr);
+        config.setMaxSessions(maxSessions);
 
         String defaultTimeoutAttr = attributes.getProperty("defaultStatementTimeout");
         Integer defaultTimeout = defaultTimeoutAttr == null ? null : Integer.valueOf(defaultTimeoutAttr);
+        config.setDefaultStatementTimeout(defaultTimeout);
 
+        String useStatementNamespacesAttr = attributes.getProperty("useStatementNamespaces");
+        boolean useStatementNamespaces = "true".equals(useStatementNamespacesAttr);
         state.setUseStatementNamespaces(useStatementNamespaces);
-        state.getConfig().setSettings(classInfoCacheEnabled, lazyLoadingEnabled, statementCachingEnabled, cacheModelsEnabled, enhancementEnabled, maxTransactions, maxRequests, maxSessions, defaultTimeout);
       }
     });
   }
@@ -134,7 +140,7 @@
         Properties prop = NodeletUtils.parseAttributes(node, state.getGlobalProps());
         String alias = prop.getProperty("alias");
         String type = prop.getProperty("type");
-        state.getConfig().addTypeAlias(alias, type);
+        state.getConfig().getTypeHandlerFactory().putTypeAlias(alias, type);
       }
     });
   }
@@ -146,7 +152,11 @@
         String jdbcType = prop.getProperty("jdbcType");
         String javaType = prop.getProperty("javaType");
         String callback = prop.getProperty("callback");
-        state.getConfig().addGlobalTypeHandler(javaType, jdbcType, callback);
+
+        javaType = state.getConfig().getTypeHandlerFactory().resolveAlias(javaType);
+        callback = state.getConfig().getTypeHandlerFactory().resolveAlias(callback);
+
+        state.getConfig().addTypeHandler(Resources.classForName(javaType), jdbcType, Resources.instantiate(callback));
       }
     });
   }
@@ -165,7 +175,29 @@
         Properties attributes = NodeletUtils.parseAttributes(node, state.getGlobalProps());
         String type = attributes.getProperty("type");
         boolean commitRequired = "true".equals(attributes.getProperty("commitRequired"));
-        state.getConfig().setTransactionManager(type, commitRequired, state.getTxProps());
+
+        state.getConfig().getErrorContext().setActivity("configuring the transaction manager");
+        type = state.getConfig().getTypeHandlerFactory().resolveAlias(type);
+        TransactionManager txManager;
+        try {
+          state.getConfig().getErrorContext().setMoreInfo("Check the transaction manager type or class.");
+          TransactionConfig config = (TransactionConfig) Resources.instantiate(type);
+          config.setDataSource(state.getDataSource());
+          config.setMaximumConcurrentTransactions(state.getConfig().getDelegate().getMaxTransactions());
+          state.getConfig().getErrorContext().setMoreInfo("Check the transactio nmanager properties or configuration.");
+          config.setProperties(state.getTxProps());
+          config.setForceCommit(commitRequired);
+          config.setDataSource(state.getDataSource());
+          state.getConfig().getErrorContext().setMoreInfo(null);
+          txManager = new TransactionManager(config);
+        } catch (Exception e) {
+          if (e instanceof SqlMapException) {
+            throw (SqlMapException) e;
+          } else {
+            throw new SqlMapException("Error initializing TransactionManager.  Could not instantiate TransactionConfig.  Cause: " + e, e);
+          }
+        }
+        state.getConfig().setTransactionManager(txManager);
       }
     });
     parser.addNodelet("/sqlMapConfig/transactionManager/dataSource/property", new Nodelet() {
@@ -185,7 +217,21 @@
         String type = attributes.getProperty("type");
         Properties props = state.getDsProps();
 
-        state.getConfig().setDataSource(type, props);
+        type = state.getConfig().getTypeHandlerFactory().resolveAlias(type);
+        try {
+          state.getConfig().getErrorContext().setMoreInfo("Check the data source type or class.");
+          DataSourceFactory dsFactory = (DataSourceFactory) Resources.instantiate(type);
+          state.getConfig().getErrorContext().setMoreInfo("Check the data source properties or configuration.");
+          dsFactory.initialize(props);
+          state.setDataSource(dsFactory.getDataSource());
+          state.getConfig().getErrorContext().setMoreInfo(null);
+        } catch (Exception e) {
+          if (e instanceof SqlMapException) {
+            throw (SqlMapException) e;
+          } else {
+            throw new SqlMapException("Error initializing DataSource.  Could not instantiate DataSourceFactory.  Cause: " + e, e);
+          }
+        }
       }
     });
   }
@@ -238,7 +284,15 @@
         Properties attributes = NodeletUtils.parseAttributes(node, state.getGlobalProps());
         String type = attributes.getProperty("type");
 
-        state.getConfig().setResultObjectFactory(type);
+        state.getConfig().getErrorContext().setActivity("configuring the Result Object Factory");
+        ResultObjectFactory rof;
+        try {
+          rof = (ResultObjectFactory) Resources.instantiate(type);
+          state.getConfig().setResultObjectFactory(rof);
+        } catch (Exception e) {
+          throw new SqlMapException("Error instantiating resultObjectFactory: " + type, e);
+        }
+
       }
     });
     parser.addNodelet("/sqlMapConfig/resultObjectFactory/property", new Nodelet() {

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlMapParser.java Sat Jun  9 23:55:31 2007
@@ -1,18 +1,12 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.xml.Nodelet;
-import com.ibatis.common.xml.NodeletException;
-import com.ibatis.common.xml.NodeletParser;
-import com.ibatis.common.xml.NodeletUtils;
-import com.ibatis.sqlmap.client.SqlMapException;
+import com.ibatis.common.xml.*;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.engine.conifg.*;
 import com.ibatis.sqlmap.engine.mapping.statement.*;
-import com.ibatis.sqlmap.engine.conifg.ParameterMapConfig;
-import com.ibatis.sqlmap.engine.conifg.ResultMapConfig;
-import com.ibatis.sqlmap.engine.conifg.CacheModelConfig;
 import org.w3c.dom.Node;
 
-import java.io.InputStream;
-import java.io.Reader;
+import java.io.*;
 import java.util.Properties;
 
 public class SqlMapParser {
@@ -55,14 +49,8 @@
         state.setNamespace(attributes.getProperty("namespace"));
       }
     });
-    parser.addNodelet("/sqlMap/end()", new Nodelet() {
-      public void process(Node node) throws Exception {
-        state.getConfig().bindDelegateSubMaps();
-      }
-    });
   }
 
-
   private void addSqlNodelets() {
     parser.addNodelet("/sqlMap/sql", new Nodelet() {
       public void process(Node node) throws Exception {
@@ -86,7 +74,7 @@
         Properties prop = NodeletUtils.parseAttributes(node, state.getGlobalProps());
         String alias = prop.getProperty("alias");
         String type = prop.getProperty("type");
-        state.getConfig().addTypeAlias(alias, type);
+        state.getConfig().getTypeHandlerFactory().putTypeAlias(alias, type);
       }
     });
   }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/SqlStatementParser.java Sat Jun  9 23:55:31 2007
@@ -1,8 +1,9 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.xml.NodeletUtils;
+import com.ibatis.common.xml.*;
+import com.ibatis.sqlmap.engine.conifg.*;
 import com.ibatis.sqlmap.engine.mapping.statement.*;
-import com.ibatis.sqlmap.engine.conifg.MappedStatementConfig;
+import org.w3c.dom.CharacterData;
 import org.w3c.dom.*;
 
 import java.util.Properties;

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XMLSqlSource.java Sat Jun  9 23:55:31 2007
@@ -1,12 +1,12 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.xml.NodeletUtils;
-import com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser;
+import com.ibatis.common.xml.*;
+import com.ibatis.sqlmap.engine.conifg.*;
+import com.ibatis.sqlmap.engine.mapping.parameter.*;
 import com.ibatis.sqlmap.engine.mapping.sql.*;
-import com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql;
+import com.ibatis.sqlmap.engine.mapping.sql.dynamic.*;
 import com.ibatis.sqlmap.engine.mapping.sql.dynamic.elements.*;
-import com.ibatis.sqlmap.engine.mapping.sql.raw.RawSql;
-import com.ibatis.sqlmap.engine.conifg.*;
+import com.ibatis.sqlmap.engine.mapping.sql.raw.*;
 import org.w3c.dom.CharacterData;
 import org.w3c.dom.*;
 

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlParserState.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlParserState.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlParserState.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/builder/xml/XmlParserState.java Sat Jun  9 23:55:31 2007
@@ -1,11 +1,9 @@
 package com.ibatis.sqlmap.engine.builder.xml;
 
-import com.ibatis.common.resources.Resources;
-import com.ibatis.sqlmap.engine.conifg.SqlMapConfiguration;
-import com.ibatis.sqlmap.engine.conifg.ParameterMapConfig;
-import com.ibatis.sqlmap.engine.conifg.ResultMapConfig;
-import com.ibatis.sqlmap.engine.conifg.CacheModelConfig;
+import com.ibatis.common.resources.*;
+import com.ibatis.sqlmap.engine.conifg.*;
 
+import javax.sql.DataSource;
 import java.util.*;
 
 public class XmlParserState {
@@ -23,6 +21,7 @@
   private CacheModelConfig cacheConfig;
 
   private String namespace;
+  private DataSource dataSource;
 
   public SqlMapConfiguration getConfig() {
     return config;
@@ -130,4 +129,11 @@
     }
   }
 
+  public DataSource getDataSource() {
+    return dataSource;
+  }
+
+  public void setDataSource(DataSource dataSource) {
+    this.dataSource = dataSource;
+  }
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/CacheModelConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/CacheModelConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/CacheModelConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/CacheModelConfig.java Sat Jun  9 23:55:31 2007
@@ -1,9 +1,9 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.sqlmap.engine.cache.CacheModel;
-import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
-import com.ibatis.sqlmap.engine.scope.ErrorContext;
-import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
+import com.ibatis.sqlmap.engine.cache.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.engine.scope.*;
+import com.ibatis.sqlmap.engine.type.*;
 
 import java.util.Properties;
 

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/MappedStatementConfig.java Sat Jun  9 23:55:31 2007
@@ -1,29 +1,22 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.common.beans.Probe;
-import com.ibatis.common.beans.ProbeFactory;
-import com.ibatis.common.resources.Resources;
-import com.ibatis.sqlmap.client.SqlMapException;
-import com.ibatis.sqlmap.engine.cache.CacheModel;
-import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
-import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
-import com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap;
-import com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser;
-import com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap;
-import com.ibatis.sqlmap.engine.mapping.result.AutoResultMap;
-import com.ibatis.sqlmap.engine.mapping.result.BasicResultMap;
-import com.ibatis.sqlmap.engine.mapping.sql.Sql;
-import com.ibatis.sqlmap.engine.mapping.sql.SqlText;
-import com.ibatis.sqlmap.engine.mapping.sql.dynamic.DynamicSql;
-import com.ibatis.sqlmap.engine.mapping.sql.simple.SimpleDynamicSql;
-import com.ibatis.sqlmap.engine.mapping.sql.stat.StaticSql;
+import com.ibatis.common.beans.*;
+import com.ibatis.common.resources.*;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.engine.cache.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.engine.mapping.parameter.*;
+import com.ibatis.sqlmap.engine.mapping.result.*;
+import com.ibatis.sqlmap.engine.mapping.sql.*;
+import com.ibatis.sqlmap.engine.mapping.sql.dynamic.*;
+import com.ibatis.sqlmap.engine.mapping.sql.simple.*;
+import com.ibatis.sqlmap.engine.mapping.sql.stat.*;
 import com.ibatis.sqlmap.engine.mapping.statement.*;
-import com.ibatis.sqlmap.engine.scope.ErrorContext;
-import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
+import com.ibatis.sqlmap.engine.scope.*;
+import com.ibatis.sqlmap.engine.type.*;
 
 import java.sql.ResultSet;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 public class MappedStatementConfig {
   private static final Probe PROBE = ProbeFactory.getProbe();
@@ -35,7 +28,7 @@
   private MappedStatement mappedStatement;
   private MappedStatement rootStatement;
 
-  MappedStatementConfig(SqlMapConfiguration config, String id, GeneralStatement statement, SqlSource processor, String parameterMapName, String parameterClassName, String resultMapName, String[] additionalResultMapNames, String resultClassName, String[] additionalResultClasses, String cacheModelName, String resultSetType, String fetchSize, String allowRemapping, String timeout, String xmlResultName) {
+  MappedStatementConfig(SqlMapConfiguration config, String id, GeneralStatement statement, SqlSource processor, String parameterMapName, String parameterClassName, String resultMapName, String[] additionalResultMapNames, String resultClassName, String[] additionalResultClasses, String cacheModelName, String resultSetType, String fetchSize, String allowRemapping, String timeout, Integer defaultStatementTimeout, String xmlResultName) {
     this.errorContext = config.getErrorContext();
     this.client = config.getClient();
     this.delegate = client.getDelegate();
@@ -106,7 +99,7 @@
       }
 
     }
-    statement.setTimeout(config.getDefaultStatementTimeout());
+    statement.setTimeout(defaultStatementTimeout);
     if (timeout != null) {
       try {
         statement.setTimeout(Integer.valueOf(timeout));

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ParameterMapConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ParameterMapConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ParameterMapConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ParameterMapConfig.java Sat Jun  9 23:55:31 2007
@@ -1,18 +1,14 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.common.resources.Resources;
-import com.ibatis.sqlmap.client.SqlMapException;
-import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
-import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
-import com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMap;
-import com.ibatis.sqlmap.engine.mapping.parameter.BasicParameterMapping;
-import com.ibatis.sqlmap.engine.scope.ErrorContext;
-import com.ibatis.sqlmap.engine.type.CustomTypeHandler;
-import com.ibatis.sqlmap.engine.type.TypeHandler;
-import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
+import com.ibatis.common.resources.*;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.client.extensions.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.engine.mapping.parameter.*;
+import com.ibatis.sqlmap.engine.scope.*;
+import com.ibatis.sqlmap.engine.type.*;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 public class ParameterMapConfig {
   private SqlMapConfiguration config;
@@ -66,7 +62,15 @@
       }
     } else {
       errorContext.setMoreInfo("Check the parameter mapping property type or name.");
-      handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), parameterMap.getParameterClass(), propertyName, javaType, jdbcType);
+      try {
+        Class javaClass = null;
+        if (javaType != null) {
+          javaClass = Resources.classForName(javaType);
+        }
+        handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), parameterMap.getParameterClass(), propertyName, javaClass, jdbcType);
+      } catch (ClassNotFoundException e) {
+        throw new RuntimeException("Error setting type handler on parameter mapping.  Cause: " + e);
+      }
     }
     BasicParameterMapping mapping = new BasicParameterMapping();
     mapping.setPropertyName(propertyName);

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ResultMapConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ResultMapConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ResultMapConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/ResultMapConfig.java Sat Jun  9 23:55:31 2007
@@ -1,22 +1,13 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.common.resources.Resources;
-import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
-import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
-import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
-import com.ibatis.sqlmap.engine.mapping.result.BasicResultMap;
-import com.ibatis.sqlmap.engine.mapping.result.BasicResultMapping;
-import com.ibatis.sqlmap.engine.mapping.result.Discriminator;
-import com.ibatis.sqlmap.engine.mapping.result.ResultMapping;
-import com.ibatis.sqlmap.engine.scope.ErrorContext;
-import com.ibatis.sqlmap.engine.type.CustomTypeHandler;
-import com.ibatis.sqlmap.engine.type.TypeHandler;
-import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
+import com.ibatis.common.resources.*;
+import com.ibatis.sqlmap.client.extensions.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.engine.mapping.result.*;
+import com.ibatis.sqlmap.engine.scope.*;
+import com.ibatis.sqlmap.engine.type.*;
+
+import java.util.*;
 
 public class ResultMapConfig {
   private SqlMapConfiguration config;
@@ -104,7 +95,15 @@
       }
     } else {
       errorContext.setMoreInfo("Check the result mapping property type or name.");
-      handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), resultMap.getResultClass(), "", javaType, jdbcType, true);
+      try {
+        Class javaClass = null;
+        if (javaType != null) {
+          javaClass = Resources.classForName(javaType);
+        }
+        handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), resultMap.getResultClass(), "", javaClass, jdbcType, true);
+      } catch (ClassNotFoundException e) {
+        throw new RuntimeException("Error setting type handler on parameter mapping.  Cause: " + e);
+      }
     }
     BasicResultMapping mapping = new BasicResultMapping();
     mapping.setColumnName(columnName);
@@ -152,7 +151,15 @@
       }
     } else {
       errorContext.setMoreInfo("Check the result mapping property type or name.");
-      handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), resultMap.getResultClass(), propertyName, javaType, jdbcType, true);
+      try {
+        Class javaClass = null;
+        if (javaType != null) {
+          javaClass = Resources.classForName(javaType);
+        }
+        handler = config.resolveTypeHandler(client.getDelegate().getTypeHandlerFactory(), resultMap.getResultClass(), propertyName, javaClass, jdbcType, true);
+      } catch (ClassNotFoundException e) {
+        throw new RuntimeException("Error setting type handler on parameter mapping.  Cause: " + e);
+      }
     }
     BasicResultMapping mapping = new BasicResultMapping();
     mapping.setPropertyName(propertyName);

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlMapConfiguration.java Sat Jun  9 23:55:31 2007
@@ -1,39 +1,27 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.common.beans.ClassInfo;
-import com.ibatis.common.beans.Probe;
-import com.ibatis.common.beans.ProbeFactory;
-import com.ibatis.common.resources.Resources;
-import com.ibatis.sqlmap.client.SqlMapException;
-import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
-import com.ibatis.sqlmap.engine.accessplan.AccessPlanFactory;
-import com.ibatis.sqlmap.engine.cache.CacheModel;
-import com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController;
-import com.ibatis.sqlmap.engine.cache.lru.LruCacheController;
-import com.ibatis.sqlmap.engine.cache.memory.MemoryCacheController;
-import com.ibatis.sqlmap.engine.datasource.DataSourceFactory;
-import com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory;
-import com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory;
-import com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory;
-import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
-import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
-import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
-import com.ibatis.sqlmap.engine.mapping.result.Discriminator;
-import com.ibatis.sqlmap.engine.mapping.result.ResultMap;
-import com.ibatis.sqlmap.engine.mapping.result.ResultObjectFactory;
-import com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement;
-import com.ibatis.sqlmap.engine.mapping.statement.MappedStatement;
-import com.ibatis.sqlmap.engine.scope.ErrorContext;
-import com.ibatis.sqlmap.engine.transaction.TransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.TransactionManager;
-import com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig;
+import com.ibatis.common.beans.*;
+import com.ibatis.common.resources.*;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.client.extensions.*;
+import com.ibatis.sqlmap.engine.accessplan.*;
+import com.ibatis.sqlmap.engine.cache.*;
+import com.ibatis.sqlmap.engine.cache.fifo.*;
+import com.ibatis.sqlmap.engine.cache.lru.*;
+import com.ibatis.sqlmap.engine.cache.memory.*;
+import com.ibatis.sqlmap.engine.datasource.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.engine.mapping.result.*;
+import com.ibatis.sqlmap.engine.mapping.statement.*;
+import com.ibatis.sqlmap.engine.scope.*;
+import com.ibatis.sqlmap.engine.transaction.*;
+import com.ibatis.sqlmap.engine.transaction.external.*;
+import com.ibatis.sqlmap.engine.transaction.jdbc.*;
+import com.ibatis.sqlmap.engine.transaction.jta.*;
 import com.ibatis.sqlmap.engine.type.*;
 
 import javax.sql.DataSource;
-import java.util.Iterator;
-import java.util.Properties;
+import java.util.*;
 
 public class SqlMapConfiguration {
   private static final Probe PROBE = ProbeFactory.getProbe();
@@ -68,19 +56,15 @@
     return delegate;
   }
 
-  public Integer getDefaultStatementTimeout() {
-    return defaultStatementTimeout;
-  }
-
   //
   // Utility Methods
   //
 
-  public TypeHandler resolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Class clazz, String propertyName, String javaType, String jdbcType) {
+  TypeHandler resolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Class clazz, String propertyName, Class javaType, String jdbcType) {
     return resolveTypeHandler(typeHandlerFactory, clazz, propertyName, javaType, jdbcType, false);
   }
 
-  public TypeHandler resolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Class clazz, String propertyName, String javaType, String jdbcType, boolean useSetterToResolve) {
+  TypeHandler resolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Class clazz, String propertyName, Class javaType, String jdbcType, boolean useSetterToResolve) {
     TypeHandler handler;
     if (clazz == null) {
       // Unknown
@@ -93,12 +77,7 @@
       if (javaType == null) {
         handler = typeHandlerFactory.getUnkownTypeHandler(); //BUG 1012591 - typeHandlerFactory.getTypeHandler(java.lang.Object.class, jdbcType);
       } else {
-        try {
-          Class javaClass = Resources.classForName(javaType);
-          handler = typeHandlerFactory.getTypeHandler(javaClass, jdbcType);
-        } catch (Exception e) {
-          throw new RuntimeException("Error.  Could not set TypeHandler.  Cause: " + e, e);
-        }
+        handler = typeHandlerFactory.getTypeHandler(javaType, jdbcType);
       }
     } else if (typeHandlerFactory.getTypeHandler(clazz, jdbcType) != null) {
       // Primitive
@@ -114,40 +93,66 @@
           handler = typeHandlerFactory.getTypeHandler(type, jdbcType);
         }
       } else {
-        try {
-          Class javaClass = Resources.classForName(javaType);
-          handler = typeHandlerFactory.getTypeHandler(javaClass, jdbcType);
-        } catch (Exception e) {
-          throw new RuntimeException("Error.  Could not set TypeHandler.  Cause: " + e, e);
-        }
+        handler = typeHandlerFactory.getTypeHandler(javaType, jdbcType);
       }
     }
     return handler;
   }
 
-  // TODO: Split into separate methods
-  public void setSettings(boolean classInfoCacheEnabled, boolean lazyLoadingEnabled, boolean statementCachingEnabled, boolean cacheModelsEnabled, boolean enhancementEnabled, Integer maxTransactions, Integer maxRequests, Integer maxSessions, Integer defaultTimeout) {
-    errorContext.setActivity("loading settings properties");
+  public void setClassInfoCacheEnabled (boolean classInfoCacheEnabled) {
+    errorContext.setActivity("setting class info cache enabled/disabled");
     ClassInfo.setCacheEnabled(classInfoCacheEnabled);
+  }
+
+  public void setLazyLoadingEnabled (boolean lazyLoadingEnabled) {
+    errorContext.setActivity("setting lazy loading enabled/disabled");
     client.getDelegate().setLazyLoadingEnabled(lazyLoadingEnabled);
+  }
+
+  public void setStatementCachingEnabled (boolean statementCachingEnabled) {
+    errorContext.setActivity("setting statement caching enabled/disabled");
     client.getDelegate().setStatementCacheEnabled(statementCachingEnabled);
+  }
+
+  public void setCacheModelsEnabled (boolean cacheModelsEnabled) {
+    errorContext.setActivity("setting cache models enabled/disabled");
     client.getDelegate().setCacheModelsEnabled(cacheModelsEnabled);
+  }
+
+  public void setEnhancementEnabled (boolean enhancementEnabled) {
+    errorContext.setActivity("setting enhancement enabled/disabled");
     try {
       enhancementEnabled = enhancementEnabled && Resources.classForName("net.sf.cglib.proxy.InvocationHandler") != null;
     } catch (ClassNotFoundException e) {
       enhancementEnabled = false;
     }
     client.getDelegate().setEnhancementEnabled(enhancementEnabled);
+    AccessPlanFactory.setBytecodeEnhancementEnabled(enhancementEnabled);
+  }
+
+  public void setMaxTransactions (Integer maxTransactions) {
+    errorContext.setActivity("setting maximum transactions");
     if (maxTransactions != null && maxTransactions.intValue() > 0) {
       client.getDelegate().setMaxTransactions(maxTransactions.intValue());
     }
+  }
+
+  public void setMaxRequests (Integer maxRequests) {
+    errorContext.setActivity("setting maximum requests");
     if (maxRequests != null && maxRequests.intValue() > 0) {
       client.getDelegate().setMaxRequests(maxRequests.intValue());
     }
+  }
+
+  public void setMaxSessions (Integer maxSessions) {
+    errorContext.setActivity("setting maximum sessions");
     if (maxSessions != null && maxSessions.intValue() > 0) {
       client.getDelegate().setMaxSessions(maxSessions.intValue());
     }
-    AccessPlanFactory.setBytecodeEnhancementEnabled(client.getDelegate().isEnhancementEnabled());
+  }
+
+  public void setDefaultStatementTimeout(Integer defaultTimeout) {
+    errorContext.setActivity("setting default timeout");
     if (defaultTimeout != null) {
       try {
         defaultStatementTimeout = defaultTimeout;
@@ -157,31 +162,23 @@
     }
   }
 
-  public void addTypeAlias(String alias, String type) {
-    typeHandlerFactory.putTypeAlias(alias, type);
-  }
-
-  public void addGlobalTypeHandler(String javaType, String jdbcType, String callback) {
+  public void addTypeHandler(Class javaType, String jdbcType, Object callback) {
     try {
       errorContext.setActivity("building a building custom type handler");
       TypeHandlerFactory typeHandlerFactory = client.getDelegate().getTypeHandlerFactory();
-      callback = typeHandlerFactory.resolveAlias(callback);
-      javaType = typeHandlerFactory.resolveAlias(javaType);
-      errorContext.setMoreInfo("Check the callback attribute '" + callback + "' (must be a classname).");
       TypeHandler typeHandler;
-      Object impl = Resources.instantiate(callback);
-      if (impl instanceof TypeHandlerCallback) {
-        typeHandler = new CustomTypeHandler((TypeHandlerCallback) impl);
-      } else if (impl instanceof TypeHandler) {
-        typeHandler = (TypeHandler) impl;
+      if (callback instanceof TypeHandlerCallback) {
+        typeHandler = new CustomTypeHandler((TypeHandlerCallback) callback);
+      } else if (callback instanceof TypeHandler) {
+        typeHandler = (TypeHandler) callback;
       } else {
-        throw new RuntimeException("The class '' is not a valid implementation of TypeHandler or TypeHandlerCallback");
+        throw new RuntimeException("The object '" + callback + "' is not a valid implementation of TypeHandler or TypeHandlerCallback");
       }
       errorContext.setMoreInfo("Check the javaType attribute '" + javaType + "' (must be a classname) or the jdbcType '" + jdbcType + "' (must be a JDBC type name).");
       if (jdbcType != null && jdbcType.length() > 0) {
-        typeHandlerFactory.register(Resources.classForName(javaType), jdbcType, typeHandler);
+        typeHandlerFactory.register(javaType, jdbcType, typeHandler);
       } else {
-        typeHandlerFactory.register(Resources.classForName(javaType), typeHandler);
+        typeHandlerFactory.register(javaType, typeHandler);
       }
     } catch (Exception e) {
       throw new SqlMapException("Error registering occurred.  Cause: " + e, e);
@@ -190,90 +187,12 @@
     errorContext.setObjectId(null);
   }
 
-  //TODO: pass in datasource as a parameter to setTXMgr
-  public void setDataSource(String type, Properties props) {
-    type = typeHandlerFactory.resolveAlias(type);
-    try {
-      errorContext.setMoreInfo("Check the data source type or class.");
-      DataSourceFactory dsFactory = (DataSourceFactory) Resources.instantiate(type);
-      errorContext.setMoreInfo("Check the data source properties or configuration.");
-      dsFactory.initialize(props);
-      dataSource = dsFactory.getDataSource();
-      errorContext.setMoreInfo(null);
-    } catch (Exception e) {
-      if (e instanceof SqlMapException) {
-        throw (SqlMapException) e;
-      } else {
-        throw new SqlMapException("Error initializing DataSource.  Could not instantiate DataSourceFactory.  Cause: " + e, e);
-      }
-    }
-  }
-
-  public void setTransactionManager(String type, boolean commitRequired, Properties props) {
-    errorContext.setActivity("configuring the transaction manager");
-    type = typeHandlerFactory.resolveAlias(type);
-    TransactionManager txManager;
-    try {
-      errorContext.setMoreInfo("Check the transaction manager type or class.");
-      TransactionConfig config = (TransactionConfig) Resources.instantiate(type);
-      config.setDataSource(dataSource);
-      config.setMaximumConcurrentTransactions(client.getDelegate().getMaxTransactions());
-      errorContext.setMoreInfo("Check the transactio nmanager properties or configuration.");
-      config.initialize(props);
-      errorContext.setMoreInfo(null);
-      txManager = new TransactionManager(config);
-      txManager.setForceCommit(commitRequired);
-    } catch (Exception e) {
-      if (e instanceof SqlMapException) {
-        throw (SqlMapException) e;
-      } else {
-        throw new SqlMapException("Error initializing TransactionManager.  Could not instantiate TransactionConfig.  Cause: " + e, e);
-      }
-    }
-    client.getDelegate().setTxManager(txManager);
+  public void setTransactionManager(TransactionManager txManager) {
+    delegate.setTxManager(txManager);
   }
 
-  public void setResultObjectFactory(String type) {
-    errorContext.setActivity("configuring the Result Object Factory");
-    ResultObjectFactory rof;
-    try {
-      rof = (ResultObjectFactory) Resources.instantiate(type);
-      delegate.setResultObjectFactory(rof);
-    } catch (Exception e) {
-      throw new SqlMapException("Error instantiating resultObjectFactory: " + type, e);
-    }
-  }
-
-  // TODO - post processing sql map config
-  public void wireupCacheModels() {
-    Iterator cacheNames = client.getDelegate().getCacheModelNames();
-    while (cacheNames.hasNext()) {
-      String cacheName = (String) cacheNames.next();
-      CacheModel cacheModel = client.getDelegate().getCacheModel(cacheName);
-      Iterator statementNames = cacheModel.getFlushTriggerStatementNames();
-      while (statementNames.hasNext()) {
-        String statementName = (String) statementNames.next();
-        MappedStatement statement = client.getDelegate().getMappedStatement(statementName);
-        if (statement != null) {
-          statement.addExecuteListener(cacheModel);
-        } else {
-          throw new RuntimeException("Could not find statement named '" + statementName + "' for use as a flush trigger for the cache model named '" + cacheName + "'.");
-        }
-      }
-    }
-  }
-
-  // TODO: post processing sql map
-  public void bindDelegateSubMaps() {
-    Iterator names = delegate.getResultMapNames();
-    while (names.hasNext()) {
-      String name = (String) names.next();
-      ResultMap rm = delegate.getResultMap(name);
-      Discriminator disc = rm.getDiscriminator();
-      if (disc != null) {
-        disc.bindSubMaps();
-      }
-    }
+  public void setResultObjectFactory(ResultObjectFactory rof) {
+    delegate.setResultObjectFactory(rof);
   }
 
   public ParameterMapConfig newParameterMapConfig(String id, String parameterClassName) {
@@ -289,7 +208,7 @@
   }
 
   public MappedStatementConfig newMappedStatementConfig(String id, GeneralStatement statement, SqlSource processor, String parameterMapName, String parameterClassName, String resultMapName, String[] additionalResultMapNames, String resultClassName, String[] additionalResultClasses, String resultSetType, String fetchSize, String allowRemapping, String timeout, String cacheModelName, String xmlResultName) {
-    return new MappedStatementConfig(this, id, statement, processor, parameterMapName, parameterClassName, resultMapName, additionalResultMapNames, resultClassName, additionalResultClasses, cacheModelName, resultSetType, fetchSize, allowRemapping, timeout, xmlResultName);
+    return new MappedStatementConfig(this, id, statement, processor, parameterMapName, parameterClassName, resultMapName, additionalResultMapNames, resultClassName, additionalResultClasses, cacheModelName, resultSetType, fetchSize, allowRemapping, timeout, defaultStatementTimeout, xmlResultName);
   }
 
   private void registerDefaultTypeAliases() {
@@ -315,6 +234,43 @@
     typeHandlerFactory.putTypeAlias("domCollection", DomCollectionTypeMarker.class.getName());
     typeHandlerFactory.putTypeAlias("xml", XmlTypeMarker.class.getName());
     typeHandlerFactory.putTypeAlias("xmlCollection", XmlCollectionTypeMarker.class.getName());
+  }
+
+  public void finalizeSqlMapConfig() {
+    wireUpCacheModels();
+    bindResultMapDiscriminators();
+  }
+
+  private void wireUpCacheModels() {
+    // Wire Up Cache Models
+    Iterator cacheNames = client.getDelegate().getCacheModelNames();
+    while (cacheNames.hasNext()) {
+      String cacheName = (String) cacheNames.next();
+      CacheModel cacheModel = client.getDelegate().getCacheModel(cacheName);
+      Iterator statementNames = cacheModel.getFlushTriggerStatementNames();
+      while (statementNames.hasNext()) {
+        String statementName = (String) statementNames.next();
+        MappedStatement statement = client.getDelegate().getMappedStatement(statementName);
+        if (statement != null) {
+          statement.addExecuteListener(cacheModel);
+        } else {
+          throw new RuntimeException("Could not find statement named '" + statementName + "' for use as a flush trigger for the cache model named '" + cacheName + "'.");
+        }
+      }
+    }
+  }
+
+  private void bindResultMapDiscriminators() {
+    // Bind discriminators
+    Iterator names = delegate.getResultMapNames();
+    while (names.hasNext()) {
+      String name = (String) names.next();
+      ResultMap rm = delegate.getResultMap(name);
+      Discriminator disc = rm.getDiscriminator();
+      if (disc != null) {
+        disc.bindSubMaps();
+      }
+    }
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/conifg/SqlSource.java Sat Jun  9 23:55:31 2007
@@ -1,6 +1,6 @@
 package com.ibatis.sqlmap.engine.conifg;
 
-import com.ibatis.sqlmap.engine.mapping.sql.Sql;
+import com.ibatis.sqlmap.engine.mapping.sql.*;
 
 public interface SqlSource {
   Sql getSql();

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.java Sat Jun  9 23:55:31 2007
@@ -852,7 +852,7 @@
   public DataSource getDataSource() {
     DataSource ds = null;
     if (txManager != null) {
-      ds = txManager.getDataSource();
+      ds = txManager.getConfig().getDataSource();
     }
     return ds;
   }
@@ -907,8 +907,8 @@
     CacheKey key = new CacheKey();
     if (txManager != null) {
       key.update(txManager);
-      if (txManager.getDataSource() != null) {
-        key.update(txManager.getDataSource());
+      if (txManager.getConfig().getDataSource() != null) {
+        key.update(txManager.getConfig().getDataSource());
       }
     }
     key.update(System.identityHashCode(this));

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/BaseTransactionConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/BaseTransactionConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/BaseTransactionConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/BaseTransactionConfig.java Sat Jun  9 23:55:31 2007
@@ -15,9 +15,13 @@
  */
 package com.ibatis.sqlmap.engine.transaction;
 
+import javax.sql.DataSource;
+
 public abstract class BaseTransactionConfig implements TransactionConfig {
 
-  private int maximumConcurrentTransactions;
+  protected DataSource dataSource;
+  protected boolean forceCommit;
+  protected int maximumConcurrentTransactions;
 
   public int getMaximumConcurrentTransactions() {
     return maximumConcurrentTransactions;
@@ -25,6 +29,22 @@
 
   public void setMaximumConcurrentTransactions(int maximumConcurrentTransactions) {
     this.maximumConcurrentTransactions = maximumConcurrentTransactions;
+  }
+
+  public boolean isForceCommit() {
+    return forceCommit;
+  }
+
+  public void setForceCommit(boolean forceCommit) {
+    this.forceCommit = forceCommit;
+  }
+
+  public DataSource getDataSource() {
+    return dataSource;
+  }
+
+  public void setDataSource(DataSource ds) {
+    this.dataSource = ds;
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionConfig.java Sat Jun  9 23:55:31 2007
@@ -21,16 +21,19 @@
 
 public interface TransactionConfig {
 
-  public DataSource getDataSource();
+  Transaction newTransaction(int transactionIsolation)
+      throws SQLException, TransactionException;
 
-  public void setDataSource(DataSource ds);
+  DataSource getDataSource();
+  void setDataSource(DataSource ds);
 
-  public void initialize(Properties props) throws SQLException, TransactionException;
+  int getMaximumConcurrentTransactions();
+  void setMaximumConcurrentTransactions(int maximumConcurrentTransactions);
 
-  public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException;
+  boolean isForceCommit();
+  void setForceCommit(boolean forceCommit);
 
-  public int getMaximumConcurrentTransactions();
-
-  public void setMaximumConcurrentTransactions(int maximumConcurrentTransactions);
+  void setProperties(Properties props)
+      throws SQLException, TransactionException;
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionManager.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionManager.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionManager.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/TransactionManager.java Sat Jun  9 23:55:31 2007
@@ -18,23 +18,18 @@
 import com.ibatis.common.util.Throttle;
 import com.ibatis.sqlmap.engine.scope.SessionScope;
 
-import javax.sql.DataSource;
 import java.sql.SQLException;
 
 public class TransactionManager {
 
-  private TransactionConfig transactionConfig;
-
-  private boolean forceCommit;
-
+  private TransactionConfig config;
   private Throttle txThrottle;
 
   public TransactionManager(TransactionConfig transactionConfig) {
-    this.transactionConfig = transactionConfig;
+    this.config = transactionConfig;
     this.txThrottle = new Throttle(transactionConfig.getMaximumConcurrentTransactions());
   }
 
-
   public void begin(SessionScope session) throws SQLException, TransactionException {
     begin(session, IsolationLevel.UNSET_ISOLATION_LEVEL);
   }
@@ -54,7 +49,7 @@
     txThrottle.increment();
 
     try {
-      trans = transactionConfig.newTransaction(transactionIsolation);
+      trans = config.newTransaction(transactionIsolation);
       session.setCommitRequired(false);
     } catch (SQLException e) {
       txThrottle.decrement();
@@ -62,6 +57,9 @@
     } catch (TransactionException e) {
       txThrottle.decrement();
       throw e;
+    } catch (Exception e) {
+      txThrottle.decrement();
+      throw new RuntimeException ("Unexpected exception wile beginning transaction.", e);
     }
 
     session.setTransaction(trans);
@@ -79,7 +77,7 @@
     } else if (state != TransactionState.STATE_STARTED && state != TransactionState.STATE_COMMITTED ) {
       throw new TransactionException("TransactionManager could not commit.  No transaction is started.");
     }
-    if (session.isCommitRequired() || forceCommit) {
+    if (session.isCommitRequired() || config.isForceCommit()) {
       trans.commit();
       session.setCommitRequired(false);
     }
@@ -101,7 +99,7 @@
       if (trans != null) {
         try {
           if (state != TransactionState.STATE_COMMITTED) {
-            if (session.isCommitRequired() || forceCommit) {
+            if (session.isCommitRequired() || config.isForceCommit()) {
               trans.rollback();
               session.setCommitRequired(false);
             }
@@ -122,20 +120,8 @@
     }
   }
 
-  public DataSource getDataSource() {
-    return transactionConfig.getDataSource();
-  }
-
-  public void setDataSource(DataSource ds) {
-    transactionConfig.setDataSource(ds);
-  }
-
-  public boolean isForceCommit() {
-    return forceCommit;
-  }
-
-  public void setForceCommit(boolean forceCommit) {
-    this.forceCommit = forceCommit;
+  public TransactionConfig getConfig() {
+    return config;
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig.java Sat Jun  9 23:55:31 2007
@@ -15,37 +15,41 @@
  */
 package com.ibatis.sqlmap.engine.transaction.external;
 
-import com.ibatis.sqlmap.engine.transaction.BaseTransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.Transaction;
-import com.ibatis.sqlmap.engine.transaction.TransactionException;
+import com.ibatis.sqlmap.engine.transaction.*;
 
-import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Properties;
 
 public class ExternalTransactionConfig extends BaseTransactionConfig {
 
-  private DataSource dataSource;
   private boolean defaultAutoCommit = false;
   private boolean setAutoCommitAllowed = true;
 
-  public DataSource getDataSource() {
-    return dataSource;
+  public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException {
+    return new ExternalTransaction(dataSource, defaultAutoCommit, setAutoCommitAllowed, transactionIsolation);
+  }
+
+  public boolean isDefaultAutoCommit() {
+    return defaultAutoCommit;
+  }
+
+  public void setDefaultAutoCommit(boolean defaultAutoCommit) {
+    this.defaultAutoCommit = defaultAutoCommit;
   }
 
-  public void setDataSource(DataSource ds) {
-    this.dataSource = ds;
+  public boolean isSetAutoCommitAllowed() {
+    return setAutoCommitAllowed;
   }
 
-  public void initialize(Properties props) throws SQLException, TransactionException {
+  public void setSetAutoCommitAllowed(boolean setAutoCommitAllowed) {
+    this.setAutoCommitAllowed = setAutoCommitAllowed;
+  }
+
+  public void setProperties(Properties props) throws SQLException, TransactionException {
     String dacProp = props.getProperty("DefaultAutoCommit");
     String sacaProp = props.getProperty("SetAutoCommitAllowed");
     defaultAutoCommit = "true".equals(dacProp);
     setAutoCommitAllowed = "true".equals(sacaProp) || sacaProp == null;
-  }
-
-  public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException {
-    return new ExternalTransaction(dataSource, defaultAutoCommit, setAutoCommitAllowed, transactionIsolation);
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jdbc/JdbcTransactionConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jdbc/JdbcTransactionConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jdbc/JdbcTransactionConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jdbc/JdbcTransactionConfig.java Sat Jun  9 23:55:31 2007
@@ -15,31 +15,18 @@
  */
 package com.ibatis.sqlmap.engine.transaction.jdbc;
 
-import com.ibatis.sqlmap.engine.transaction.BaseTransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.Transaction;
-import com.ibatis.sqlmap.engine.transaction.TransactionException;
+import com.ibatis.sqlmap.engine.transaction.*;
 
-import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Properties;
 
 public class JdbcTransactionConfig extends BaseTransactionConfig {
 
-  private DataSource dataSource;
-
-  public DataSource getDataSource() {
-    return dataSource;
-  }
-
-  public void setDataSource(DataSource ds) {
-    this.dataSource = ds;
-  }
-
-  public void initialize(Properties props) throws SQLException, TransactionException {
-  }
-
   public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException {
     return new JdbcTransaction(dataSource, transactionIsolation);
+  }
+
+  public void setProperties(Properties props) throws SQLException, TransactionException {
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jta/JtaTransactionConfig.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jta/JtaTransactionConfig.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jta/JtaTransactionConfig.java (original)
+++ ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/transaction/jta/JtaTransactionConfig.java Sat Jun  9 23:55:31 2007
@@ -15,32 +15,31 @@
  */
 package com.ibatis.sqlmap.engine.transaction.jta;
 
-import com.ibatis.sqlmap.client.SqlMapException;
-import com.ibatis.sqlmap.engine.transaction.BaseTransactionConfig;
-import com.ibatis.sqlmap.engine.transaction.Transaction;
-import com.ibatis.sqlmap.engine.transaction.TransactionException;
-
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.sql.DataSource;
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.sqlmap.engine.transaction.*;
+
+import javax.naming.*;
 import javax.transaction.UserTransaction;
 import java.sql.SQLException;
 import java.util.Properties;
 
 public class JtaTransactionConfig extends BaseTransactionConfig {
 
-  private DataSource dataSource;
   private UserTransaction userTransaction;
 
-  public DataSource getDataSource() {
-    return dataSource;
+  public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException {
+    return new JtaTransaction(userTransaction, dataSource, transactionIsolation);
+  }
+
+  public UserTransaction getUserTransaction() {
+    return userTransaction;
   }
 
-  public void setDataSource(DataSource ds) {
-    this.dataSource = ds;
+  public void setUserTransaction(UserTransaction userTransaction) {
+    this.userTransaction = userTransaction;
   }
 
-  public void initialize(Properties props) throws SQLException, TransactionException {
+  public void setProperties(Properties props) throws SQLException, TransactionException {
     String utxName = null;
     try {
       utxName = (String) props.get("UserTransaction");
@@ -49,10 +48,6 @@
     } catch (NamingException e) {
       throw new SqlMapException("Error initializing JtaTransactionConfig while looking up UserTransaction (" + utxName + ").  Cause: " + e);
     }
-  }
-
-  public Transaction newTransaction(int transactionIsolation) throws SQLException, TransactionException {
-    return new JtaTransaction(userTransaction, dataSource, transactionIsolation);
   }
 
 }

Modified: ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/StatementTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/StatementTest.java?view=diff&rev=545849&r1=545848&r2=545849
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/StatementTest.java (original)
+++ ibatis/trunk/java/mapper/mapper2/test/com/ibatis/sqlmap/StatementTest.java Sat Jun  9 23:55:31 2007
@@ -42,30 +42,30 @@
   public void testUserConnection() throws SQLException {
     DataSource ds = sqlMap.getDataSource();
     Connection conn = ds.getConnection();
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(null);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(null);
     sqlMap.setUserConnection(conn);
     Account account = (Account) sqlMap.queryForObject("getAccountViaColumnName", new Integer(1));
     conn.close();
     assertAccount1(account);
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(ds);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(ds);
   }
 
   public void testSessionUserConnection() throws SQLException {
     DataSource ds = sqlMap.getDataSource();
     Connection conn = ds.getConnection();
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(null);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(null);
     SqlMapSession session = sqlMap.openSession(conn);
     Account account = (Account) session.queryForObject("getAccountViaColumnName", new Integer(1));
     session.close();
     conn.close();
     assertAccount1(account);
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(ds);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(ds);
   }
 
   public void testSessionUserConnectionFailures() throws SQLException {
     DataSource ds = sqlMap.getDataSource();
     Connection conn = ds.getConnection();
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(null);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(null);
     SqlMapSession session = sqlMap.openSession(conn);
 
     Exception expected = null;
@@ -95,7 +95,7 @@
     session.close();
     conn.close();
     assertAccount1(account);
-    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().setDataSource(ds);
+    ((SqlMapClientImpl) sqlMap).getDelegate().getTxManager().getConfig().setDataSource(ds);
   }
 
   public void testExecuteQueryForObjectViaColumnIndex() throws SQLException {