Author: cbegin Date: Sat Feb 13 03:01:44 2010 New Revision: 909700 URL: http://svn.apache.org/viewvc?rev=909700&view=rev Log: Fixed IBATIS-737 lazy loading problem
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderMap.java - copied, changed from r901055, ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderRegistry.java Removed: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderRegistry.java Modified: ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.doc ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.pdf ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoader.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultObjectProxy.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/Configuration.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/executor/SerializableProxyTest.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPELazyTest.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml ibatis/java/ibatis-3/trunk/version.properties Modified: ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.doc URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.doc?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== Binary files - no diff available. Modified: ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.pdf URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.pdf?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== Binary files - no diff available. Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java Sat Feb 13 03:01:44 2010 @@ -156,7 +156,8 @@ } configuration.setAutoMappingBehavior(AutoMappingBehavior.valueOf(stringValueOf(props.getProperty("autoMappingBehavior"), "PARTIAL"))); configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), true)); - configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), false)); + configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), safeCglibCheck())); + configuration.setAggressiveLazyLoading(booleanValueOf(props.getProperty("aggressiveLazyLoading"), true)); configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"), true)); configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"), true)); configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"), false)); @@ -165,6 +166,14 @@ } } + private boolean safeCglibCheck() { + try { + return Resources.classForName("net.sf.cglib.proxy.Enhancer") != null; + } catch (Exception e) { + return false; + } + } + private void environmentsElement(XNode context) throws Exception { if (context != null) { if (environment == null) { Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoader.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoader.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoader.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoader.java Sat Feb 13 03:01:44 2010 @@ -11,7 +11,6 @@ import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.transaction.Transaction; -import org.apache.ibatis.transaction.TransactionFactory; import org.apache.ibatis.transaction.jdbc.JdbcTransaction; import javax.sql.DataSource; Copied: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderMap.java (from r901055, ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderRegistry.java) URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderMap.java?p2=ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderMap.java&p1=ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderRegistry.java&r1=901055&r2=909700&rev=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderRegistry.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultLoaderMap.java Sat Feb 13 03:01:44 2010 @@ -6,36 +6,40 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.Set; -public class ResultLoaderRegistry implements Serializable { +public class ResultLoaderMap implements Serializable { private final Map<String, LoadPair> loaderMap = new HashMap<String, LoadPair>(); - public void registerLoader(String property, MetaObject metaResultObject, ResultLoader resultLoader) { - // Converts property to method name strictly for performance. + public void addLoader(String property, MetaObject metaResultObject, ResultLoader resultLoader) { String upperFirst = getUppercaseFirstProperty(property); - loaderMap.put(toGetter(upperFirst), new LoadPair(property, metaResultObject, resultLoader)); - loaderMap.put(toSetter(upperFirst), new LoadPair(property, metaResultObject, resultLoader)); + loaderMap.put(upperFirst, new LoadPair(property, metaResultObject, resultLoader)); } - public void loadAll() throws SQLException { - synchronized (loaderMap) { - Object[] keys = loaderMap.keySet().toArray(); - for (Object key : keys) { - LoadPair pair = loaderMap.remove(key); - if (pair != null) { - pair.load(); - } - } - } - } + public int size() throws SQLException { + return loaderMap.size(); + } + + public boolean hasLoader(String methodName) throws SQLException { + return loaderMap.containsKey(methodName.toUpperCase()); + } - private String toGetter(String first) { - return "GET" + first; + public boolean load(String property) throws SQLException { + LoadPair pair = loaderMap.remove(property.toUpperCase()); + if (pair != null) { + pair.load(); + return true; + } + return false; } - private String toSetter(String first) { - return "SET" + first; + public void loadAll() throws SQLException { + final Set<String> methodNameSet = loaderMap.keySet(); + String[] methodNames = methodNameSet.toArray(new String[methodNameSet.size()]); + for (String methodName : methodNames) { + load(methodName); + } } private static String getUppercaseFirstProperty(String property) { @@ -43,7 +47,7 @@ return parts[0].toUpperCase(); } - private class LoadPair { + private static class LoadPair { private String property; private MetaObject metaResultObject; private ResultLoader resultLoader; Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultObjectProxy.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultObjectProxy.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultObjectProxy.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/loader/ResultObjectProxy.java Sat Feb 13 03:01:44 2010 @@ -1,50 +1,84 @@ package org.apache.ibatis.executor.loader; import net.sf.cglib.proxy.Enhancer; -import net.sf.cglib.proxy.InvocationHandler; +import net.sf.cglib.proxy.MethodInterceptor; +import net.sf.cglib.proxy.MethodProxy; import org.apache.ibatis.reflection.ExceptionUtil; import org.apache.ibatis.reflection.property.PropertyNamer; import org.apache.ibatis.type.TypeHandlerRegistry; import java.io.Serializable; import java.lang.reflect.Method; +import java.lang.reflect.Field; +import java.util.*; public class ResultObjectProxy { + private static final Set<String> objectMethods = new HashSet<String>(Arrays.asList(new String[]{"equals","hashCode","toString"})); private static final TypeHandlerRegistry registry = new TypeHandlerRegistry(); - public static Object createProxy(Class type, Object target, ResultLoaderRegistry lazyLoader) { - return EnhancedResultObjectProxyImpl.createProxy(type, target, lazyLoader); + public static Object createProxy(Object target, ResultLoaderMap lazyLoader, boolean aggressive) { + return EnhancedResultObjectProxyImpl.createProxy(target, lazyLoader, aggressive); } - private static class EnhancedResultObjectProxyImpl implements InvocationHandler, Serializable { + private static class EnhancedResultObjectProxyImpl implements MethodInterceptor, Serializable { - private Object target; - private ResultLoaderRegistry lazyLoader; + private ResultLoaderMap lazyLoader; + private boolean aggressive; - private EnhancedResultObjectProxyImpl(Object target, ResultLoaderRegistry lazyLoader) { - this.target = target; + private EnhancedResultObjectProxyImpl(ResultLoaderMap lazyLoader, boolean aggressive) { this.lazyLoader = lazyLoader; + this.aggressive = aggressive; } - public static Object createProxy(Class type, Object target, ResultLoaderRegistry lazyLoader) { + public static Object createProxy(Object target, ResultLoaderMap lazyLoader, boolean aggressive) { + Class type = target.getClass(); if (registry.hasTypeHandler(type)) { return target; } else { - return Enhancer.create(type, new EnhancedResultObjectProxyImpl(target, lazyLoader)); + final Object enhanced = Enhancer.create(target.getClass(), new EnhancedResultObjectProxyImpl(lazyLoader, aggressive)); + copyInitialState(type, target, enhanced); + return enhanced; } } - public Object invoke(Object o, Method method, Object[] args) throws Throwable { + public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { try { - if (!Object.class.equals(method.getDeclaringClass()) && PropertyNamer.isGetter(method.getName())) { - lazyLoader.loadAll(); + final String methodName = method.getName(); + synchronized (lazyLoader) { + if (lazyLoader.size() > 0) { + if (aggressive || objectMethods.contains(methodName)) { + lazyLoader.loadAll(); + } else if (PropertyNamer.isProperty(methodName)) { + final String property = PropertyNamer.methodToProperty(methodName); + if (lazyLoader.hasLoader(property)) { + lazyLoader.load(property); + } + } + } } - return method.invoke(target, args); + return methodProxy.invokeSuper(o, args); } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } } + + private static void copyInitialState(Class type, Object target, Object enhanced) { + Class parent = type; + while (parent != null) { + final Field[] fields = parent.getDeclaredFields(); + for(Field field : fields) { + try { + field.setAccessible(true); + field.set(enhanced,field.get(target)); + } catch (Exception e) { + // Nothing useful to do, will only fail on final fields, which will be ignored. + } + } + parent = parent.getSuperclass(); + } + } + } } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/FastResultSetHandler.java Sat Feb 13 03:01:44 2010 @@ -4,7 +4,7 @@ import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.ExecutorException; import org.apache.ibatis.executor.loader.ResultLoader; -import org.apache.ibatis.executor.loader.ResultLoaderRegistry; +import org.apache.ibatis.executor.loader.ResultLoaderMap; import org.apache.ibatis.executor.loader.ResultObjectProxy; import org.apache.ibatis.executor.parameter.ParameterHandler; import org.apache.ibatis.executor.result.DefaultResultContext; @@ -166,7 +166,7 @@ protected Object getRowValue(ResultSet rs, ResultMap resultMap, CacheKey rowKey) throws SQLException { final List<String> mappedColumnNames = new ArrayList<String>(); final List<String> unmappedColumnNames = new ArrayList<String>(); - final ResultLoaderRegistry lazyLoader = instantiateResultLoaderRegistry(); + final ResultLoaderMap lazyLoader = instantiateResultLoaderMap(); Object resultObject = createResultObject(rs, resultMap, lazyLoader); if (resultObject != null && !typeHandlerRegistry.hasTypeHandler(resultMap.getType())) { final MetaObject metaObject = configuration.newMetaObject(resultObject); @@ -182,9 +182,9 @@ return resultObject; } - protected ResultLoaderRegistry instantiateResultLoaderRegistry() { + protected ResultLoaderMap instantiateResultLoaderMap() { if (configuration.isLazyLoadingEnabled()) { - return new ResultLoaderRegistry(); + return new ResultLoaderMap(); } else { return null; } @@ -194,7 +194,7 @@ // PROPERTY MAPPINGS // - protected boolean applyPropertyMappings(ResultSet rs, ResultMap resultMap, List<String> mappedColumnNames, MetaObject metaObject, ResultLoaderRegistry lazyLoader) throws SQLException { + protected boolean applyPropertyMappings(ResultSet rs, ResultMap resultMap, List<String> mappedColumnNames, MetaObject metaObject, ResultLoaderMap lazyLoader) throws SQLException { boolean foundValues = false; final List<ResultMapping> propertyMappings = resultMap.getPropertyResultMappings(); for (ResultMapping propertyMapping : propertyMappings) { @@ -211,7 +211,7 @@ return foundValues; } - protected Object getPropertyMappingValue(ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderRegistry lazyLoader) throws SQLException { + protected Object getPropertyMappingValue(ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader) throws SQLException { final TypeHandler typeHandler = propertyMapping.getTypeHandler(); if (propertyMapping.getNestedQueryId() != null) { return getNestedQueryMappingValue(rs, metaResultObject, propertyMapping, lazyLoader); @@ -264,10 +264,10 @@ // INSTANTIATION & CONSTRUCTOR MAPPING // - protected Object createResultObject(ResultSet rs, ResultMap resultMap, ResultLoaderRegistry lazyLoader) throws SQLException { + protected Object createResultObject(ResultSet rs, ResultMap resultMap, ResultLoaderMap lazyLoader) throws SQLException { final Object resultObject = createResultObject(rs, resultMap); if (resultObject != null && configuration.isLazyLoadingEnabled()) { - return ResultObjectProxy.createProxy(resultMap.getType(), resultObject, lazyLoader); + return ResultObjectProxy.createProxy(resultObject, lazyLoader, configuration.isAggressiveLazyLoading()); } return resultObject; } @@ -319,7 +319,7 @@ // NESTED QUERY // - protected Object getNestedQueryMappingValue(ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderRegistry lazyLoader) throws SQLException { + protected Object getNestedQueryMappingValue(ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader) throws SQLException { final String nestedQueryId = propertyMapping.getNestedQueryId(); final String property = propertyMapping.getProperty(); final MappedStatement nestedQuery = configuration.getMappedStatement(nestedQueryId); @@ -333,7 +333,7 @@ } else { final ResultLoader resultLoader = new ResultLoader(configuration, executor, nestedQuery, nestedQueryParameterObject, propertyMapping.getJavaType()); if (configuration.isLazyLoadingEnabled()) { - lazyLoader.registerLoader(property, metaResultObject, resultLoader); + lazyLoader.addLoader(property, metaResultObject, resultLoader); } else { value = resultLoader.loadResult(); } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/NestedResultSetHandler.java Sat Feb 13 03:01:44 2010 @@ -3,7 +3,7 @@ import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.ExecutorException; -import org.apache.ibatis.executor.loader.ResultLoaderRegistry; +import org.apache.ibatis.executor.loader.ResultLoaderMap; import org.apache.ibatis.executor.parameter.ParameterHandler; import org.apache.ibatis.executor.result.DefaultResultContext; import org.apache.ibatis.mapping.BoundSql; @@ -94,7 +94,7 @@ } else { final List<String> mappedColumnNames = new ArrayList<String>(); final List<String> unmappedColumnNames = new ArrayList<String>(); - final ResultLoaderRegistry lazyLoader = instantiateResultLoaderRegistry(); + final ResultLoaderMap lazyLoader = instantiateResultLoaderMap(); Object resultObject = createResultObject(rs, resultMap, lazyLoader); if (resultObject != null && !typeHandlerRegistry.hasTypeHandler(resultMap.getType())) { final MetaObject metaObject = configuration.newMetaObject(resultObject); Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/Configuration.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/Configuration.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/Configuration.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/Configuration.java Sat Feb 13 03:01:44 2010 @@ -40,6 +40,7 @@ protected Environment environment; protected boolean lazyLoadingEnabled = false; + protected boolean aggressiveLazyLoading = true; protected boolean multipleResultSetsEnabled = true; protected boolean useGeneratedKeys = false; protected boolean useColumnLabel = true; @@ -115,6 +116,14 @@ this.lazyLoadingEnabled = lazyLoadingEnabled; } + public boolean isAggressiveLazyLoading() { + return aggressiveLazyLoading; + } + + public void setAggressiveLazyLoading(boolean aggressiveLazyLoading) { + this.aggressiveLazyLoading = aggressiveLazyLoading; + } + public boolean isMultipleResultSetsEnabled() { return multipleResultSetsEnabled; } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/executor/SerializableProxyTest.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/executor/SerializableProxyTest.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/executor/SerializableProxyTest.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/executor/SerializableProxyTest.java Sat Feb 13 03:01:44 2010 @@ -2,7 +2,7 @@ import domain.blog.Author; import domain.blog.Section; -import org.apache.ibatis.executor.loader.ResultLoaderRegistry; +import org.apache.ibatis.executor.loader.ResultLoaderMap; import org.apache.ibatis.executor.loader.ResultObjectProxy; import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -14,7 +14,7 @@ @Test public void shouldDemonstrateSerializableEnhancer() throws Exception { Author author = new Author(999, "someone", "!...@#@!...@#", "some...@somewhere.com", "blah", Section.NEWS); - Object proxy = ResultObjectProxy.createProxy(Author.class, author, new ResultLoaderRegistry()); + Object proxy = ResultObjectProxy.createProxy(author, new ResultLoaderMap(), true); byte[] bytes = serialize((Serializable) proxy); Object proxy2 = deserialize(bytes); assertEquals(author.toString(), proxy2.toString()); Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPELazyTest.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPELazyTest.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPELazyTest.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPELazyTest.java Sat Feb 13 03:01:44 2010 @@ -1,10 +1,5 @@ package org.apache.ibatis.submitted.cglib_lazy_error; -import java.io.PrintWriter; -import java.io.Reader; -import java.sql.Connection; -import java.sql.DriverManager; - import org.apache.ibatis.io.Resources; import org.apache.ibatis.jdbc.ScriptRunner; import org.apache.ibatis.session.SqlSession; @@ -14,86 +9,101 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.io.PrintWriter; +import java.io.Reader; +import java.sql.Connection; +import java.sql.DriverManager; + public class CglibNPELazyTest { - - private static SqlSessionFactory sqlSessionFactory; - - @BeforeClass - public static void initDatabase() throws Exception { - Connection conn = null; - - try { - Class.forName("org.hsqldb.jdbcDriver"); - conn = DriverManager.getConnection("jdbc:hsqldb:mem:cglib_lazy_error", "sa", - ""); - - Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql"); - - ScriptRunner runner = new ScriptRunner(conn); - runner.setLogWriter(null); - runner.setErrorLogWriter(new PrintWriter(System.err)); - runner.runScript(reader); - conn.commit(); - reader.close(); - - reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml"); - sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); - reader.close(); - } finally { - if (conn != null) { - conn.close(); - } - } - } - - @Test - public void testNoParent() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person person = personMapper.selectById(1); - Assert.assertNotNull("Persons must not be null", person); - Person parent = person.getParent(); - Assert.assertNull("Parent must be null", parent); - } - @Test - public void testAncestorSelf() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person person = personMapper.selectById(1); - Assert.assertNotNull("Persons must not be null", person); - Person ancestor = person.getAncestor(); - Assert.assertEquals("Ancestor must be John Smith sr.", person, ancestor); - } - @Test - public void testGrandParent() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedParent = personMapper.selectById(2); - Person expectedGrandParent = personMapper.selectById(1); - Person person = personMapper.selectById(3); - Assert.assertNotNull("Persons must not be null", person); - Assert.assertEquals("Parent must be John Smith", expectedParent, person.getParent()); - Assert.assertEquals("Parent must be John Smith sr.", expectedGrandParent, person.getParent().getParent()); - } - @Test - public void testAncestor() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedAncestor = personMapper.selectById(1); - Person person = personMapper.selectById(3); - Assert.assertNotNull("Persons must not be null", person); - Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); - } - @Test - public void testAncestorAfterQueryingParents() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedAncestor = personMapper.selectById(1); - Person person = personMapper.selectById(3); - // Load ancestor indirectly. - Assert.assertNotNull("Persons must not be null", person); - Assert.assertNotNull("Parent must not be null", person.getParent()); - Assert.assertNotNull("Grandparent must not be null", person.getParent().getParent()); - Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); - } + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeClass + public static void initDatabase() throws Exception { + Connection conn = null; + + try { + Class.forName("org.hsqldb.jdbcDriver"); + conn = DriverManager.getConnection("jdbc:hsqldb:mem:cglib_lazy_error", "sa", + ""); + + Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql"); + + ScriptRunner runner = new ScriptRunner(conn); + runner.setLogWriter(null); + runner.setErrorLogWriter(new PrintWriter(System.err)); + runner.runScript(reader); + conn.commit(); + reader.close(); + + reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + sqlSessionFactory.getConfiguration().setLazyLoadingEnabled(true); + sqlSessionFactory.getConfiguration().setAggressiveLazyLoading(false); + reader.close(); + } finally { + if (conn != null) { + conn.close(); + } + } + } + + @Test + public void testNoParent() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person person = personMapper.selectById(1); + Assert.assertNotNull("Persons must not be null", person); + Person parent = person.getParent(); + Assert.assertNull("Parent must be null", parent); + } + + @Test + public void testAncestorSelf() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person person = personMapper.selectById(1); + Assert.assertNotNull("Persons must not be null", person); + Person ancestor = person.getAncestor(); + Assert.assertEquals("Ancestor must be John Smith sr.", person, ancestor); + } + + @Test + public void testAncestorAfterQueryingParents() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedAncestor = personMapper.selectById(1); + Person person = personMapper.selectById(3); + // Load ancestor indirectly. + Assert.assertNotNull("Persons must not be null", person); + Assert.assertNotNull("Parent must not be null", person.getParent()); + Assert.assertNotNull("Grandparent must not be null", person.getParent().getParent()); + Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); + } + + @Test + public void testGrandParent() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedParent = personMapper.selectById(2); + Person expectedGrandParent = personMapper.selectById(1); + Person person = personMapper.selectById(3); + Assert.assertNotNull("Persons must not be null", person); + final Person actualParent = person.getParent(); + final Person actualGrandParent = person.getParent().getParent(); + Assert.assertEquals(expectedParent, actualParent); + Assert.assertEquals(expectedGrandParent, actualGrandParent); + } + + @Test + public void testAncestor() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedAncestor = personMapper.selectById(1); + Person person = personMapper.selectById(3); + Assert.assertNotNull("Persons must not be null", person); + final Person actualAncestor = person.getAncestor(); + Assert.assertEquals(expectedAncestor, actualAncestor); + } + } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java Sat Feb 13 03:01:44 2010 @@ -1,10 +1,5 @@ package org.apache.ibatis.submitted.cglib_lazy_error; -import java.io.PrintWriter; -import java.io.Reader; -import java.sql.Connection; -import java.sql.DriverManager; - import org.apache.ibatis.io.Resources; import org.apache.ibatis.jdbc.ScriptRunner; import org.apache.ibatis.session.SqlSession; @@ -14,88 +9,97 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.io.PrintWriter; +import java.io.Reader; +import java.sql.Connection; +import java.sql.DriverManager; + public class CglibNPETest { - - private static SqlSessionFactory sqlSessionFactory; - - @BeforeClass - public static void initDatabase() throws Exception { - Connection conn = null; - - try { - Class.forName("org.hsqldb.jdbcDriver"); - conn = DriverManager.getConnection("jdbc:hsqldb:mem:cglib_lazy_eager_no_error", "sa", - ""); - - Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql"); - - ScriptRunner runner = new ScriptRunner(conn); - runner.setLogWriter(null); - runner.setErrorLogWriter(new PrintWriter(System.err)); - runner.runScript(reader); - conn.commit(); - reader.close(); - - reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml"); - sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); - reader.close(); - } finally { - if (conn != null) { - conn.close(); - } - } - } - - @Test - public void testNoParent() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person person = personMapper.selectById(1); - Assert.assertNotNull("Persons must not be null", person); - Person parent = person.getParent(); - Assert.assertNull("Parent must be null", parent); - } - @Test - public void testAncestorSelf() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person person = personMapper.selectById(1); - Assert.assertNotNull("Persons must not be null", person); - Person ancestor = person.getAncestor(); - Assert.assertEquals("Ancestor must be John Smith sr.", person, ancestor); - } - @Test - public void testGrandParent() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedParent = personMapper.selectById(2); - Person expectedGrandParent = personMapper.selectById(1); - Person person = personMapper.selectById(3); - Assert.assertNotNull("Persons must not be null", person); - Assert.assertEquals("Parent must be John Smith", expectedParent, person.getParent()); - Assert.assertEquals("Parent must be John Smith sr.", expectedGrandParent, person.getParent().getParent()); - } - @Test - public void testAncestor() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedAncestor = personMapper.selectById(1); - Person person = personMapper.selectById(3); - Assert.assertNotNull("Persons must not be null", person); - Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); - } - @Test - public void testAncestorAfterQueryingParents() { - SqlSession sqlSession = sqlSessionFactory.openSession(); - PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); - Person expectedAncestor = personMapper.selectById(1); - Person person = personMapper.selectById(3); - // Load ancestor indirectly. - Assert.assertNotNull("Persons must not be null", person); - Assert.assertNotNull("Parent must not be null", person.getParent()); - Assert.assertNotNull("Grandparent must not be null", person.getParent().getParent()); - Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); + + private static SqlSessionFactory sqlSessionFactory; + + @BeforeClass + public static void initDatabase() throws Exception { + Connection conn = null; + + try { + Class.forName("org.hsqldb.jdbcDriver"); + conn = DriverManager.getConnection("jdbc:hsqldb:mem:cglib_lazy_eager_no_error", "sa", + ""); + + Reader reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql"); + + ScriptRunner runner = new ScriptRunner(conn); + runner.setLogWriter(null); + runner.setErrorLogWriter(new PrintWriter(System.err)); + runner.runScript(reader); + conn.commit(); + reader.close(); + + reader = Resources.getResourceAsReader("org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml"); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); + reader.close(); + } finally { + if (conn != null) { + conn.close(); + } } + } + + @Test + public void testNoParent() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person person = personMapper.selectById(1); + Assert.assertNotNull("Persons must not be null", person); + Person parent = person.getParent(); + Assert.assertNull("Parent must be null", parent); + } + + @Test + public void testAncestorSelf() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person person = personMapper.selectById(1); + Assert.assertNotNull("Persons must not be null", person); + Person ancestor = person.getAncestor(); + Assert.assertEquals("Ancestor must be John Smith sr.", person, ancestor); + } + + @Test + public void testGrandParent() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedParent = personMapper.selectById(2); + Person expectedGrandParent = personMapper.selectById(1); + Person person = personMapper.selectById(3); + Assert.assertNotNull("Persons must not be null", person); + Assert.assertEquals("Parent must be John Smith", expectedParent, person.getParent()); + Assert.assertEquals("Parent must be John Smith sr.", expectedGrandParent, person.getParent().getParent()); + } + + @Test + public void testAncestor() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedAncestor = personMapper.selectById(1); + Person person = personMapper.selectById(3); + Assert.assertNotNull("Persons must not be null", person); + Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); + } + + @Test + public void testAncestorAfterQueryingParents() { + SqlSession sqlSession = sqlSessionFactory.openSession(); + PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); + Person expectedAncestor = personMapper.selectById(1); + Person person = personMapper.selectById(3); + // Load ancestor indirectly. + Assert.assertNotNull("Persons must not be null", person); + Assert.assertNotNull("Parent must not be null", person.getParent()); + Assert.assertNotNull("Grandparent must not be null", person.getParent().getParent()); + Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor()); + } @Test public void testInsertBetweenTwoSelects() { @@ -107,15 +111,15 @@ Person selected3 = personMapper.selectById(3); selected1.setId(4L); int rows = personMapper.insertPerson(selected1); - Assert.assertEquals(1,rows); + Assert.assertEquals(1, rows); selected1 = personMapper.selectById(1); selected2 = personMapper.selectById(2); selected3 = personMapper.selectById(3); Person selected4 = personMapper.selectById(4); - Assert.assertEquals(1,selected1.getId().longValue()); - Assert.assertEquals(2,selected2.getId().longValue()); - Assert.assertEquals(3,selected3.getId().longValue()); - Assert.assertEquals(4,selected4.getId().longValue()); + Assert.assertEquals(1, selected1.getId().longValue()); + Assert.assertEquals(2, selected2.getId().longValue()); + Assert.assertEquals(3, selected3.getId().longValue()); + Assert.assertEquals(4, selected4.getId().longValue()); } finally { sqlSession.close(); @@ -128,7 +132,7 @@ try { PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); Person selected1 = personMapper.selectByStringId("1"); - Assert.assertEquals(1,selected1.getId().longValue()); + Assert.assertEquals(1, selected1.getId().longValue()); } finally { sqlSession.close(); Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CreateDB.sql Sat Feb 13 03:01:44 2010 @@ -1,8 +1,8 @@ create table person ( - id int, - firstName varchar(100), - lastName varchar(100), - parent int DEFAULT NULL +id int, +firstName varchar(100), +lastName varchar(100), +parent int DEFAULT NULL ); INSERT INTO person (id, firstName, lastName, parent) Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.java Sat Feb 13 03:01:44 2010 @@ -1,58 +1,72 @@ package org.apache.ibatis.submitted.cglib_lazy_error; public class Person { - - private Long id; - private String firstName; - private String lastName; - private Person parent; - public Person getAncestor() { - if (getParent() == null) { - return this; - } else { - return getParent().getAncestor(); - } - } - - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof Person) { - return this.getId() == ((Person) obj).getId(); - } - return false; - } - @Override - public int hashCode() { - return id != null ? id.intValue() : null; + + private Long id; + private String firstName; + private String lastName; + private Person parent; + + public Person getAncestor() { + if (getParent() == null) { + return this; + } else { + return getParent().getAncestor(); } + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Person)) return false; + + Person person = (Person) o; - - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Person getParent() { - return parent; - } - public void setParent(Person parent) { - this.parent = parent; - } + if (id != null ? !id.equals(person.id) : person.id != null) return false; + + return true; + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } + + @Override + public String toString() { + return id + ": " + firstName + " " + lastName + " ("+parent+")"; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Person getParent() { + return parent; + } + + public void setParent(Person parent) { + this.parent = parent; + } } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml Sat Feb 13 03:01:44 2010 @@ -4,38 +4,41 @@ "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="org.apache.ibatis.submitted.cglib_lazy_error.PersonMapper"> - - <resultMap id="personMap" type="Person"> - <id property="id" column="Person_id"/> - <result property="firstName" column="Person_firstName"/> - <result property="lastName" column="Person_lastName"/> - <association property="parent" column="Person_parent" select="org.apache.ibatis.submitted.cglib_lazy_error.PersonMapper.selectById"/> - </resultMap> - - - <sql id="columns"> - Person.id AS Person_id, - Person.firstName AS Person_firstName, - Person.lastName AS Person_lastName, - Person.parent AS Person_parent - </sql> - - - <select id="selectById" resultMap="personMap" parameterType="int"> - SELECT <include refid="columns"/> - FROM Person - WHERE id = #{id,jdbcType=INTEGER} - </select> - - <select id="selectByStringId" resultMap="personMap" parameterType="String"> - SELECT <include refid="columns"/> - FROM Person - WHERE id = ${value} - </select> - - <insert id="insertPerson"> - INSERT INTO person (id, firstName, lastName, parent) - VALUES (#{id}, #{firstName}, #{lastName}, null); - </insert> - + + <resultMap id="personMap" type="Person"> + <id property="id" column="Person_id"/> + <result property="firstName" column="Person_firstName"/> + <result property="lastName" column="Person_lastName"/> + <association property="parent" column="Person_parent" + select="selectById"/> + </resultMap> + + + <sql id="columns"> + Person.id AS Person_id, + Person.firstName AS Person_firstName, + Person.lastName AS Person_lastName, + Person.parent AS Person_parent + </sql> + + + <select id="selectById" resultMap="personMap" parameterType="int"> + SELECT + <include refid="columns"/> + FROM Person + WHERE id = #{id,jdbcType=INTEGER} + </select> + + <select id="selectByStringId" resultMap="personMap" parameterType="String"> + SELECT + <include refid="columns"/> + FROM Person + WHERE id = ${value} + </select> + + <insert id="insertPerson"> + INSERT INTO person (id, firstName, lastName, parent) + VALUES (#{id}, #{firstName}, #{lastName}, null); + </insert> + </mapper> Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java Sat Feb 13 03:01:44 2010 @@ -1,9 +1,11 @@ package org.apache.ibatis.submitted.cglib_lazy_error; public interface PersonMapper { - - public Person selectById(int id); - public Person selectByStringId(String id); - public int insertPerson (Person person); + + public Person selectById(int id); + + public Person selectByStringId(String id); + + public int insertPerson(Person person); } Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfig.xml Sat Feb 13 03:01:44 2010 @@ -4,22 +4,22 @@ "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> - <typeAliases> - <typeAlias alias="Person" type="org.apache.ibatis.submitted.cglib_lazy_error.Person"/> - </typeAliases> - - <environments default="test"> - <environment id="test"> - <transactionManager type="JDBC"></transactionManager> - <dataSource type="UNPOOLED"> - <property name="driver" value="org.hsqldb.jdbcDriver"/> - <property name="url" value="jdbc:hsqldb:mem:cglib_lazy_eager_no_error"/> - <property name="username" value="sa"/> - </dataSource> - </environment> - </environments> - - <mappers> - <mapper resource="org/apache/ibatis/submitted/cglib_lazy_error/Person.xml"/> - </mappers> + <typeAliases> + <typeAlias alias="Person" type="org.apache.ibatis.submitted.cglib_lazy_error.Person"/> + </typeAliases> + + <environments default="test"> + <environment id="test"> + <transactionManager type="JDBC"></transactionManager> + <dataSource type="UNPOOLED"> + <property name="driver" value="org.hsqldb.jdbcDriver"/> + <property name="url" value="jdbc:hsqldb:mem:cglib_lazy_eager_no_error"/> + <property name="username" value="sa"/> + </dataSource> + </environment> + </environments> + + <mappers> + <mapper resource="org/apache/ibatis/submitted/cglib_lazy_error/Person.xml"/> + </mappers> </configuration> Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/ibatisConfigLazy.xml Sat Feb 13 03:01:44 2010 @@ -4,26 +4,26 @@ "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> - <settings> - <setting name="lazyLoadingEnabled" value="true"/> - </settings> - - <typeAliases> - <typeAlias alias="Person" type="org.apache.ibatis.submitted.cglib_lazy_error.Person"/> - </typeAliases> - - <environments default="test"> - <environment id="test"> - <transactionManager type="JDBC"></transactionManager> - <dataSource type="UNPOOLED"> - <property name="driver" value="org.hsqldb.jdbcDriver"/> - <property name="url" value="jdbc:hsqldb:mem:cglib_lazy_error"/> - <property name="username" value="sa"/> - </dataSource> - </environment> - </environments> - - <mappers> - <mapper resource="org/apache/ibatis/submitted/cglib_lazy_error/Person.xml"/> - </mappers> + <settings> + <setting name="lazyLoadingEnabled" value="true"/> + </settings> + + <typeAliases> + <typeAlias alias="Person" type="org.apache.ibatis.submitted.cglib_lazy_error.Person"/> + </typeAliases> + + <environments default="test"> + <environment id="test"> + <transactionManager type="JDBC"></transactionManager> + <dataSource type="UNPOOLED"> + <property name="driver" value="org.hsqldb.jdbcDriver"/> + <property name="url" value="jdbc:hsqldb:mem:cglib_lazy_error"/> + <property name="username" value="sa"/> + </dataSource> + </environment> + </environments> + + <mappers> + <mapper resource="org/apache/ibatis/submitted/cglib_lazy_error/Person.xml"/> + </mappers> </configuration> Modified: ibatis/java/ibatis-3/trunk/version.properties URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/version.properties?rev=909700&r1=909699&r2=909700&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/version.properties (original) +++ ibatis/java/ibatis-3/trunk/version.properties Sat Feb 13 03:01:44 2010 @@ -1,5 +1,5 @@ #Build version info -#Sat Jan 23 19:23:01 MST 2010 +#Fri Feb 12 19:52:58 MST 2010 version=3.0.0 -buildDate=2010/01/23 19\:23 -buildNum=228 +buildDate=2010/02/12 19\:52 +buildNum=230