TimeKvpParser.getDate() is not thread safe -- WMS request causes 
NumberFormatException 
---------------------------------------------------------------------------------------

                 Key: GEOS-2931
                 URL: http://jira.codehaus.org/browse/GEOS-2931
             Project: GeoServer
          Issue Type: Bug
    Affects Versions: 1.7.1
         Environment: RHEL3, Java 1.6.0_11, JBoss 4.0.3SP1, two Intel Xeon CPU 
2.80GHz (appears as 4 processors)
            Reporter: Ryan Hofschneider
            Assignee: Andrea Aime
            Priority: Critical


Making a WMS call to a layer that is backed by PostgreSQL/PostGIS that contains 
a non-NULL date column on a can result in a NumberFormatException with various 
exception messages: 


java.lang.NumberFormatException: multiple points
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084)
    at java.lang.Double.parseDouble(Double.java:510)
    at java.text.DigitList.getDouble(DigitList.java:151)
    at java.text.DecimalFormat.parse(DecimalFormat.java:1303)
    at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1538)
    at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1263)
    at org.geoserver.ows.kvp.TimeKvpParser.getDate(TimeKvpParser.java:133)
    at org.geoserver.ows.kvp.TimeKvpParser.parse(TimeKvpParser.java:93)
    at org.geoserver.ows.util.KvpUtils.parse(KvpUtils.java:471)
    at org.geoserver.ows.Dispatcher.parseKVP(Dispatcher.java:1049)
    <snip>

or for example:
java.lang.NumberFormatException: For input string: ".330E"
    at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:403)
    at java.lang.Long.parseLong(Long.java:461)
    at java.text.DigitList.getLong(DigitList.java:177)
    at java.text.DecimalFormat.parse(DecimalFormat.java:1298)
    at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1874)
    at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1263)
    at org.geoserver.ows.kvp.TimeKvpParser.getDate(TimeKvpParser.java:133)
    at org.geoserver.ows.kvp.TimeKvpParser.parse(TimeKvpParser.java:93)
    at org.geoserver.ows.util.KvpUtils.parse(KvpUtils.java:471)
    at org.geoserver.ows.Dispatcher.parseKVP(Dispatcher.java:1049)
    <snip>

(The input string value reported in the above trace will vary from call to call)

These exception traces are indicative of SimpleDateFormat being used 
simultaneously by multiple threads:
http://forums.sun.com/thread.jspa?threadID=5343210
http://forums.sun.com/thread.jspa?threadID=497693
(above thread mentions Intel hyperthreading as a trigger)

SimpleDateFormat is not thread safe, but it appears that TimeKvpParser caches 
SimpleDateFormat instances, and GeoServerExtensions has a static hash map that 
maintains an instance of TimeKvpParser.






 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to