Details
Description
The caching implementation in org.apache.wicket.injection.Injector is heavily broken. for each component, a ConcurrentHashMap is created and findFields(..) get called. This happens as a new container is created for every yet unknown class instead of yet unknown ClassLoaders.
this is the erroneous code:
// try cache
ConcurrentHashMap<String, Field[]> container = cache.get(clazz.getClassLoader());
if (container != null)
{
fields = container.get(clazz.getName());
}
if (fields == null)
{
fields = findFields(clazz, factory);
// write to cache
container = new ConcurrentHashMap<String, Field[]>();
container.put(clazz.getName(), fields);
cache.put(clazz.getClassLoader(), container);
}
By the way: This bug was introduced with the fix of WICKET-625 in revision 830070 dated 0ct 27, 2009
Attachments
Attachments
Issue Links
- duplicates
-
WICKET-2741 non-performant Collections.synchronizedMap() should be replaced with ConcurrentMap
- Resolved