Author: cbegin
Date: Sun Aug 13 22:48:51 2006
New Revision: 431297
URL: http://svn.apache.org/viewvc?rev=431297&view=rev
Log:
Fixed IBATIS-325 SimpleDateFormat thread safety issue.
Added:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SimpleDateFormatter.java
Modified:
ibatis/trunk/java/mapper/mapper2/build/version.properties
ibatis/trunk/java/mapper/mapper2/doc/release.txt
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateOnlyTypeHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateTypeHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlDateTypeHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimeTypeHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimestampTypeHandler.java
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TimeOnlyTypeHandler.java
Modified: ibatis/trunk/java/mapper/mapper2/build/version.properties
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/build/version.properties?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/build/version.properties (original)
+++ ibatis/trunk/java/mapper/mapper2/build/version.properties Sun Aug 13
22:48:51 2006
@@ -1,5 +1,5 @@
#Build version info
-#Sun Aug 13 02:50:18 MDT 2006
+#Sun Aug 13 23:45:30 MDT 2006
version=2.1.7
-buildDate=2006/08/13 02\:50
-buildNum=624
+buildDate=2006/08/13 23\:45
+buildNum=626
Modified: ibatis/trunk/java/mapper/mapper2/doc/release.txt
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/doc/release.txt?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/doc/release.txt (original)
+++ ibatis/trunk/java/mapper/mapper2/doc/release.txt Sun Aug 13 22:48:51 2006
@@ -11,6 +11,7 @@
o Added support for ResultSet OUT params from stored procs (e.g. Oracle Ref
Cursor)
o Added support for Multiple ResultSets mapped to corresponding ResultMaps or
ResultClasses.
+ o Fixed IBATIS-325 - DateTypeHandler uses static SimpleDateFormat instance.
Not thread-safe.
o Fixed IBATIS-224 - isNotNull node causes typehandler mappings in statement
to fail
o Fixed IBATIS-249 - Race conditions in Throttle lead to thread blockage
popping items from ThrottledPools under stress
o Fixed IBATIS-250 - CLONE -SELECT statement returns unexpected result when
'groupBy' and 'nullValue' are specified in resultMaps.
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/mapping/sql/dynamic/elements/ConditionalTagHandler.java
Sun Aug 13 22:48:51 2006
@@ -17,13 +17,10 @@
import com.ibatis.common.beans.Probe;
import com.ibatis.common.beans.ProbeFactory;
-
+import com.ibatis.sqlmap.engine.type.SimpleDateFormatter;
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
public abstract class ConditionalTagHandler extends BaseTagHandler {
@@ -32,7 +29,6 @@
public static final long NOT_COMPARABLE = Long.MIN_VALUE;
private static final String DATE_MASK = "yyyy/MM/dd hh:mm:ss";
- private static final DateFormat DATE_FORMAT = new
SimpleDateFormat(DATE_MASK);
private static final String START_INDEX = "[";
@@ -137,11 +133,7 @@
} else if (type == Boolean.class || type == boolean.class) {
return Boolean.valueOf(value);
} else if (type == Date.class) {
- try {
- return DATE_FORMAT.parse(value);
- } catch (ParseException e) {
- throw new RuntimeException("Error parsing date. Cause: " + e, e);
- }
+ return SimpleDateFormatter.format(DATE_MASK, value);
} else if (type == BigInteger.class) {
return new BigInteger(value);
} else if (type == BigDecimal.class) {
@@ -158,7 +150,6 @@
*
* @param ctx
* @param tag
- * @return
*/
protected String getResolvedProperty(SqlTagContext ctx, SqlTag tag) {
String prop = tag.getPropertyAttr();
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateOnlyTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateOnlyTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateOnlyTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateOnlyTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,15 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
/**
@@ -32,7 +27,6 @@
public class DateOnlyTypeHandler extends BaseTypeHandler implements
TypeHandler {
private static final String DATE_FORMAT = "yyyy/MM/dd";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -70,11 +64,7 @@
}
public Object valueOf(String s) {
- try {
- return format.parse(s);
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/DateTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,15 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
/**
@@ -32,7 +27,6 @@
public class DateTypeHandler extends BaseTypeHandler implements TypeHandler {
private static final String DATE_FORMAT = "yyyy/MM/dd hh:mm:ss";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -70,11 +64,7 @@
}
public Object valueOf(String s) {
- try {
- return format.parse(s);
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}
Added:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SimpleDateFormatter.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SimpleDateFormatter.java?rev=431297&view=auto
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SimpleDateFormatter.java
(added)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SimpleDateFormatter.java
Sun Aug 13 22:48:51 2006
@@ -0,0 +1,18 @@
+package com.ibatis.sqlmap.engine.type;
+
+import com.ibatis.sqlmap.client.SqlMapException;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class SimpleDateFormatter {
+ public static Date format(String format, String datetime) {
+ try {
+ return new SimpleDateFormat(format).parse(datetime);
+ } catch (ParseException e) {
+ throw new SqlMapException("Error parsing default null value date.
Format must be '" + format + "'. Cause: " + e);
+ }
+ }
+
+}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlDateTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlDateTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlDateTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlDateTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,12 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
-import java.sql.*;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
/**
* SQL Date implementation of TypeHandler
@@ -28,7 +26,6 @@
public class SqlDateTypeHandler extends BaseTypeHandler implements TypeHandler
{
private static final String DATE_FORMAT = "yyyy/MM/dd";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -66,12 +63,7 @@
}
public Object valueOf(String s) {
- try {
- java.util.Date date = format.parse(s);
- return new Date(date.getTime());
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimeTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimeTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimeTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimeTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,12 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
-import java.sql.*;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
/**
* SQL time implementation of TypeHandler
@@ -28,7 +26,6 @@
public class SqlTimeTypeHandler extends BaseTypeHandler implements TypeHandler
{
private static final String DATE_FORMAT = "hh:mm:ss";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -66,12 +63,7 @@
}
public Object valueOf(String s) {
- try {
- java.util.Date date = format.parse(s);
- return new Time(date.getTime());
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimestampTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimestampTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimestampTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/SqlTimestampTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,12 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
-import java.sql.*;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
/**
* SQL timestamp implementation of TypeHandler
@@ -28,7 +26,6 @@
public class SqlTimestampTypeHandler extends BaseTypeHandler implements
TypeHandler {
private static final String DATE_FORMAT = "yyyy/MM/dd hh:mm:ss";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -66,12 +63,7 @@
}
public Object valueOf(String s) {
- try {
- java.util.Date date = format.parse(s);
- return new Timestamp(date.getTime());
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}
Modified:
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TimeOnlyTypeHandler.java
URL:
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TimeOnlyTypeHandler.java?rev=431297&r1=431296&r2=431297&view=diff
==============================================================================
---
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TimeOnlyTypeHandler.java
(original)
+++
ibatis/trunk/java/mapper/mapper2/src/com/ibatis/sqlmap/engine/type/TimeOnlyTypeHandler.java
Sun Aug 13 22:48:51 2006
@@ -15,15 +15,10 @@
*/
package com.ibatis.sqlmap.engine.type;
-import com.ibatis.sqlmap.client.SqlMapException;
-
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
/**
@@ -32,7 +27,6 @@
public class TimeOnlyTypeHandler extends BaseTypeHandler implements
TypeHandler {
private static final String DATE_FORMAT = "hh:mm:ss";
- private static final DateFormat format = new SimpleDateFormat(DATE_FORMAT);
public void setParameter(PreparedStatement ps, int i, Object parameter,
String jdbcType)
throws SQLException {
@@ -70,11 +64,7 @@
}
public Object valueOf(String s) {
- try {
- return format.parse(s);
- } catch (ParseException e) {
- throw new SqlMapException("Error parsing default null value date.
Format must be '" + DATE_FORMAT + "'. Cause: " + e);
- }
+ return SimpleDateFormatter.format(DATE_FORMAT, s);
}
}