Author: cbegin Date: Sun Sep 7 21:47:14 2008 New Revision: 692991 URL: http://svn.apache.org/viewvc?rev=692991&view=rev Log: IBATIS-519 fixed. Tests added, fixed as described in Jira.
Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo-sql-map.xml ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo.java ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/MyThread.java ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/RemapResultsThreadTest.java ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/sql-map-config.xml Modified: ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/result/AutoResultMap.java Modified: ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties?rev=692991&r1=692990&r2=692991&view=diff ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties (original) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties Sun Sep 7 21:47:14 2008 @@ -1,5 +1,5 @@ #Build version info -#Sun Aug 31 11:18:20 MDT 2008 +#Sun Sep 07 22:35:48 MDT 2008 version=2.3.3.x-build -buildDate=2008/08/31 11\:18 -buildNum=723 +buildDate=2008/09/07 22\:35 +buildNum=724 Modified: ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/result/AutoResultMap.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/result/AutoResultMap.java?rev=692991&r1=692990&r2=692991&view=diff ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/result/AutoResultMap.java (original) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/result/AutoResultMap.java Sun Sep 7 21:47:14 2008 @@ -15,22 +15,14 @@ */ package com.ibatis.sqlmap.engine.mapping.result; -import com.ibatis.common.beans.ClassInfo; -import com.ibatis.common.beans.Probe; -import com.ibatis.common.beans.ProbeFactory; - +import com.ibatis.common.beans.*; import com.ibatis.sqlmap.client.SqlMapException; import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate; import com.ibatis.sqlmap.engine.scope.StatementScope; import com.ibatis.sqlmap.engine.type.DomTypeMarker; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.sql.*; +import java.util.*; /** * An automatic result map for simple stuff @@ -55,6 +47,16 @@ return super.getResults(statementScope, rs); } + public Object setResultObjectValues(StatementScope statementScope, Object resultObject, Object[] values) { + // synchronization is only needed when remapping is enabled + if (allowRemapping) { + synchronized (this) { + return super.setResultObjectValues(statementScope, resultObject, values); + } + } + return super.setResultObjectValues(statementScope, resultObject, values); + } + private void initialize(ResultSet rs) { if (getResultClass() == null) { throw new SqlMapException("The automatic ResultMap named " + this.getId() + " had a null result class (not allowed)."); @@ -82,7 +84,7 @@ List resultMappingList = new ArrayList(); ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 0, n = rsmd.getColumnCount(); i < n; i++) { - String columnName = getColumnIdentifier(rsmd, i+1); + String columnName = getColumnIdentifier(rsmd, i + 1); String upperColumnName = columnName.toUpperCase(java.util.Locale.ENGLISH); String matchedProp = (String) propertyMap.get(upperColumnName); Class type = null; @@ -118,7 +120,7 @@ List resultMappingList = new ArrayList(); ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 0, n = rsmd.getColumnCount(); i < n; i++) { - String columnName = getColumnIdentifier(rsmd, i+1); + String columnName = getColumnIdentifier(rsmd, i + 1); ResultMapping resultMapping = new ResultMapping(); resultMapping.setPropertyName(columnName); resultMapping.setColumnName(columnName); @@ -137,7 +139,7 @@ List resultMappingList = new ArrayList(); ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 0, n = rsmd.getColumnCount(); i < n; i++) { - String columnName = getColumnIdentifier(rsmd, i+1); + String columnName = getColumnIdentifier(rsmd, i + 1); ResultMapping resultMapping = new ResultMapping(); resultMapping.setPropertyName(columnName); resultMapping.setColumnName(columnName); @@ -156,7 +158,7 @@ private void initializePrimitiveResults(ResultSet rs) { try { ResultSetMetaData rsmd = rs.getMetaData(); - String columnName = getColumnIdentifier(rsmd,1); + String columnName = getColumnIdentifier(rsmd, 1); ResultMapping resultMapping = new ResultMapping(); resultMapping.setPropertyName(columnName); resultMapping.setColumnName(columnName); Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo-sql-map.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo-sql-map.xml?rev=692991&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo-sql-map.xml (added) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo-sql-map.xml Sun Sep 7 21:47:14 2008 @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE sqlMap PUBLIC + "-//iBATIS.com//DTD SQL Map 2.0//EN" + "http://www.ibatis.com/dtd/sql-map-2.dtd"> + +<sqlMap> + <statement id="selectFooWithRemap" + resultClass="threads.Foo" + remapResults="true"> + select * from foo + </statement> + + + <statement id="selectFooWithoutRemap" + resultClass="threads.Foo" + remapResults="false"> + select * from foo + </statement> + + <statement id="create"> + drop table foo if exists; + + create table foo ( + column1 varchar(50), + column2 varchar(50), + column3 varchar(50) + ); + + + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + insert into foo values ('a', 'a', 'a'); + insert into foo values ('b', 'b', 'b'); + insert into foo values ('c', 'c', 'c'); + + </statement> + +</sqlMap> Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo.java?rev=692991&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo.java (added) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/Foo.java Sun Sep 7 21:47:14 2008 @@ -0,0 +1,36 @@ +package threads; + +public class Foo { + + private String column1; + + private String column2; + + private String column3; + + + public String getColumn1() { + return this.column1; + } + + public void setColumn1(String column1) { + this.column1 = column1; + } + + public String getColumn2() { + return this.column2; + } + + public void setColumn2(String column2) { + this.column2 = column2; + } + + public String getColumn3() { + return this.column3; + } + + public void setColumn3(String column3) { + this.column3 = column3; + } + +} Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/MyThread.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/MyThread.java?rev=692991&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/MyThread.java (added) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/MyThread.java Sun Sep 7 21:47:14 2008 @@ -0,0 +1,41 @@ +package threads; + +import java.sql.SQLException; +import java.util.List; + +import junit.framework.TestCase; + +import com.ibatis.sqlmap.client.SqlMapClient; +import threads.Foo; + +class MyThread extends Thread { + + private SqlMapClient sqlMap; + private String remap; + + public MyThread(SqlMapClient sqlMap, String remap) { + this.remap = remap; + this.sqlMap = sqlMap; + } + + @SuppressWarnings("unchecked") + public void run() { + while (true) { + try { + List<Foo> list = sqlMap.queryForList("selectFoo" + remap, null); + TestCase.assertEquals(300, list.size()); + check(list); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + } + + private static void check(List<Foo> list) { + for (Foo foo : list) { + if (foo == null) { + TestCase.fail("list contained a null element"); + } + } + } +} \ No newline at end of file Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/RemapResultsThreadTest.java URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/RemapResultsThreadTest.java?rev=692991&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/RemapResultsThreadTest.java (added) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/RemapResultsThreadTest.java Sun Sep 7 21:47:14 2008 @@ -0,0 +1,49 @@ +package threads; + +import com.ibatis.common.resources.Resources; +import com.ibatis.sqlmap.client.*; +import junit.framework.TestCase; + +import java.io.*; +import java.util.*; +import java.sql.SQLException; + +public class RemapResultsThreadTest extends TestCase { + + public void testWithRemap() throws Exception { + runTest("WithRemap"); + } + + public void testWithoutRemap() throws Exception { + runTest("WithoutRemap"); + } + + private void runTest(String statementToRun) throws IOException, SQLException { + String resource = "threads/sql-map-config.xml"; + Reader reader = Resources.getResourceAsReader(resource); + SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); + + sqlMap.update("create"); + + int count = 2; + + List<MyThread> threads = new LinkedList<MyThread>(); + + for (int i = 0; i < count; i++) { + MyThread thread = new MyThread(sqlMap, statementToRun); + thread.start(); + threads.add(thread); + } + + Date d1 = new Date(new Date().getTime() + 10000); + + // let's do the test for 10 seconds - for me it failed quite early + while (new Date().before(d1)) { + for (MyThread myThread : threads) { + assertTrue(myThread.isAlive()); + } + } + } + + +} Added: ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/sql-map-config.xml URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/sql-map-config.xml?rev=692991&view=auto ============================================================================== --- ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/sql-map-config.xml (added) +++ ibatis/trunk/java/ibatis-2/ibatis-2-core/test/threads/sql-map-config.xml Sun Sep 7 21:47:14 2008 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE sqlMapConfig PUBLIC + "-//iBATIS.com//DTD SQL Map Config 2.0//EN" + "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> + +<sqlMapConfig> + <properties resource="com/ibatis/sqlmap/maps/SqlMapConfig.properties"/> + + <transactionManager type="JDBC" > + <dataSource type="SIMPLE"> + <property name="JDBC.Driver" value="${driver}"/> + <property name="JDBC.ConnectionURL" value="${url}"/> + <property name="JDBC.Username" value="${username}"/> + <property name="JDBC.Password" value="${password}"/> + </dataSource> + </transactionManager> + + <sqlMap resource="threads/Foo-sql-map.xml" /> + +</sqlMapConfig>