DefaultConverterManager could be adding to its non-synchronized map <i>converters</i> dynamically (say if the type is LinkedList or HashMap) and meanwhile DefaultRemoter is looping through the converters via DefaultConverterManager.getConverterMatchStrings(). We're seeing ConcurrentModificationException being thrown in some cases because of this.
We're sort of overcoming this by explicitly providing converters for LinkedList, HashMap, etc in dwr.xml so that DWR doesn't have to add to the hashmap on the fly.
I took 2.0.6 source and see some sychronized blocks have been added in DefaultConverterManager .. but not in DefaultRemoter. DefaultRemoter still iterates through the hash keys in an unsychronized fashion:
Collection converterMatches = converterManager.getConverterMatchStrings();
Iterator it = converterMatches.iterator();
String match = (String) it.next();
I think making and returning a copy of the keyset in getConverterMatchStrings may be a better solution than synchronizing in DefaultRemoter. I will look into it. Thanks.
will checkout the source but can't really do a load test. We're experiencing thread's looping once in a while in the DefaultRemoter and are hoping the workaround I mentioned fixes it.