svn commit: r729772 - in /ibatis/trunk/java/ibatis-3: ./ ibatis-3-core/src/main/java/org/apache/ibatis/api/ ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/ ibatis-3-core/src/test/java/org/
Author: cbegin Date: Sun Dec 28 12:38:45 2008 New Revision: 729772 URL: http://svn.apache.org/viewvc?rev=729772view=rev Log: refactored transaction management in session api Modified: ibatis/trunk/java/ibatis-3/TODO ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java Modified: ibatis/trunk/java/ibatis-3/TODO URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=729772r1=729771r2=729772view=diff == --- ibatis/trunk/java/ibatis-3/TODO (original) +++ ibatis/trunk/java/ibatis-3/TODO Sun Dec 28 12:38:45 2008 @@ -1,20 +1,16 @@ -Known Issues - * Duplicate element IDs are clobbering each other in config - * Statement (other elements?) not found does not fail gracefully - -Core +Improvements + * Duplicate element IDs are clobbering each other in config + * Statement (other elements?) not found does not fail gracefully * Improved Error Messages + * Exception hierarchy returned from exceptionfactory -XML Config +Incomplete * Named parameter parsing/merging * Loosely bound cache id to instance - (perhaps use late-binding lookup proxies for all config elements?) API - * Transaction Manager (REAL AutoCommit support...) * Mapper Interface Binding - * Client / Mapper Factory - * Exception hierarchy returned from exceptionfactory Testing * Functional tests Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java?rev=729772r1=729771r2=729772view=diff == --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java Sun Dec 28 12:38:45 2008 @@ -24,7 +24,9 @@ int delete(String statement, Object parameter); void commit(); - void end(); + void commit(boolean force); + void rollback(); + void rollback(boolean force); void close(); } Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java?rev=729772r1=729771r2=729772view=diff == --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java Sun Dec 28 12:38:45 2008 @@ -92,17 +92,25 @@ } public void commit() { +commit(false); + } + + public void commit(boolean force) { try { - executor.commit(!autoCommit dirty); + executor.commit(isCommitOrRollbackRequired(force)); dirty = false; } catch (SQLException e) { throw ExceptionFactory.wrapException(Error committing transaction. Cause: + e, e); } } - public void end() { + public void rollback() { +rollback(false); + } + + public void rollback(boolean force) { try { - executor.rollback(!autoCommit dirty); + executor.rollback(isCommitOrRollbackRequired(force)); dirty = false; } catch (SQLException e) { throw ExceptionFactory.wrapException(Error rolling back transaction. Cause: + e, e); @@ -112,9 +120,7 @@ public void close() { try { try { -if (dirty) { - this.end(); -} +rollback(false); } finally { executor.close(); } @@ -123,5 +129,8 @@ } } + private boolean isCommitOrRollbackRequired(boolean force) { +return (!autoCommit dirty) || force; + } } Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java?rev=729772r1=729771r2=729772view=diff == --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java Sun Dec 28 12:38:45 2008 @@ -2,7 +2,6 @@ import org.junit.*; import org.apache.ibatis.BaseDataTest; -import org.apache.ibatis.api.*; import org.apache.ibatis.io.Resources; import
svn commit: r729779 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis: api/SqlSessionTest.java parser/AuthorMapper.xml
Author: cbegin Date: Sun Dec 28 13:46:40 2008 New Revision: 729779 URL: http://svn.apache.org/viewvc?rev=729779view=rev Log: added tests for implicit rollback and explicit commit Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java?rev=729779r1=729778r2=729779view=diff == --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/api/SqlSessionTest.java Sun Dec 28 13:46:40 2008 @@ -74,6 +74,55 @@ } @Test + public void shouldUpdateAuthorImplicitRollback() throws Exception { +SqlSession session = sqlMapper.openSession(); +Author original; +Author updated; +try { + original = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + original.setEmail(n...@email.com); + session.update(com.domain.AuthorMapper.updateAuthor, original); + + updated = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + Assert.assertEquals(original.getEmail(), updated.getEmail()); +} finally { + session.close(); +} +try { + session = sqlMapper.openSession(); + updated = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + Assert.assertEquals(j...@ibatis.apache.org, updated.getEmail()); +} finally { + session.close(); +} + } + + @Test + public void shouldUpdateAuthorCommit() throws Exception { +SqlSession session = sqlMapper.openSession(); +Author original; +Author updated; +try { + original = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + original.setEmail(n...@email.com); + session.update(com.domain.AuthorMapper.updateAuthor, original); + + updated = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + Assert.assertEquals(original.getEmail(), updated.getEmail()); + session.commit(); +} finally { + session.close(); +} +try { + session = sqlMapper.openSession(); + updated = (Author) session.selectOne(com.domain.AuthorMapper.selectAuthor, 101); + Assert.assertEquals(original.getEmail(), updated.getEmail()); +} finally { + session.close(); +} + } + + @Test public void shouldDeleteAuthor() throws Exception { SqlSession session = sqlMapper.openSession(); try { Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml?rev=729779r1=729778r2=729779view=diff == --- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml (original) +++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml Sun Dec 28 13:46:40 2008 @@ -34,6 +34,13 @@ values (#{id},#{username},#{password},#{email},#{bio}) /insert + update id=updateAuthor + parameterType=domain.blog.Author +update Author +set username=#{username},password=#{password},email=#{email},bio=#{bio} +where id=#{id} + /update + delete id=deleteAuthor parameterType=int delete from Author where id = #{id}
svn commit: r729795 - in /ibatis/trunk/java/tools/ibator/core: build/ src/org/apache/ibatis/ibator/api/ src/org/apache/ibatis/ibator/internal/rules/
Author: jgbutler Date: Sun Dec 28 14:29:10 2008 New Revision: 729795 URL: http://svn.apache.org/viewvc?rev=729795view=rev Log: Changes for IBATIS-569 - provide a method of overriding IbatorRules Added: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/IbatorRulesDelegate.java Modified: ibatis/trunk/java/tools/ibator/core/build/version.properties ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/ConditionalModelRules.java ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/FlatModelRules.java ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/HierarchicalModelRules.java ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/IbatorRules.java Modified: ibatis/trunk/java/tools/ibator/core/build/version.properties URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/build/version.properties?rev=729795r1=729794r2=729795view=diff == --- ibatis/trunk/java/tools/ibator/core/build/version.properties (original) +++ ibatis/trunk/java/tools/ibator/core/build/version.properties Sun Dec 28 14:29:10 2008 @@ -1,4 +1,4 @@ #Ibator build version info -#Mon Dec 22 15:32:20 CST 2008 +#Sun Dec 28 16:25:29 CST 2008 version=1.2.1 -buildNum=681 +buildNum=683 Modified: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java?rev=729795r1=729794r2=729795view=diff == --- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java (original) +++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/api/IntrospectedTable.java Sun Dec 28 14:29:10 2008 @@ -491,11 +491,11 @@ calculateSqlMapFileName(); if (tableConfiguration.getModelType() == ModelType.HIERARCHICAL) { -rules = new HierarchicalModelRules(tableConfiguration, this); +rules = new HierarchicalModelRules(this); } else if (tableConfiguration.getModelType() == ModelType.FLAT) { -rules = new FlatModelRules(tableConfiguration, this); +rules = new FlatModelRules(this); } else { -rules = new ConditionalModelRules(tableConfiguration, this); +rules = new ConditionalModelRules(this); } ibatorContext.getPlugins().initialized(this); @@ -686,4 +686,8 @@ public void setRules(IbatorRules rules) { this.rules = rules; } + +public TableConfiguration getTableConfiguration() { +return tableConfiguration; +} } Added: ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java?rev=729795view=auto == --- ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java (added) +++ ibatis/trunk/java/tools/ibator/core/src/org/apache/ibatis/ibator/internal/rules/BaseIbatorRules.java Sun Dec 28 14:29:10 2008 @@ -0,0 +1,299 @@ +/* + * Copyright 2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.ibatis.ibator.internal.rules; + +import org.apache.ibatis.ibator.api.IntrospectedTable; +import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType; +import org.apache.ibatis.ibator.config.TableConfiguration; + +/** + * This class centralizes all the rules related to code generation - including + * the methods and objects to create, and certain attributes related to those + * objects. + * + * See package JavaDoc for more information. + * + * @author Jeff Butler + */ +public abstract class BaseIbatorRules implements IbatorRules { + +protected TableConfiguration tableConfiguration; +protected IntrospectedTable