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>


Reply via email to