Dear Sir or Madam,
we have done a Performance measurement on our application, which uses Wicket
7.10 to identify performance hotspots.
During this, we identified a programming issue in
AnnotProxyFieldValueFactory::getBeanName:
/**
*
* @param field
* @return bean name
*/
private String getBeanName(final Field field, String name, boolean required,
Class<?> generic)
{
if (Strings.isEmpty(name))
{
Class<?> fieldType = field.getType();
SimpleEntry<Class<?>, Class<?>> keyPair =
new SimpleEntry<Class<?>, Class<?>>(fieldType, generic);
name = beanNameCache.get(fieldType); // BUG HERE, must be keyPair, NOT
fieldType
if (name == null)
{
name = getBeanNameOfClass(contextLocator.getSpringContext(), fieldType,
generic, field.getName());
if (name != null)
{
String tmpName = beanNameCache.putIfAbsent(keyPair, name); // keyPair is
inserted into the Map here
if (tmpName != null)
{
name = tmpName;
}
}
}
}
...
It seems, that the caching mechanism is never used, because the get call uses
the wrong parameter (fieldType instead of keyPair).
We are using Spring with Wicket, with many Components using @Inject annotation.
We figured out, that this bug slows down the inject process of beans in our
components significantly.
We also checked the current Wicket version 7.11 and 8.2, both having this
issues.
Can you confirm this bug and told us, when there will be a bugfix?
Kind regards
PATRICK SCHWARZER
SOFTWARE ENGINEER
o +49 89 32175 655
TOMTEC Imaging Systems GmbH
Edisonstrasse 6, 85716 Unterschleissheim, Germany, Managing Director:
Johannes Waldinger, Dr. Thomas Piehler, HRB 235646 Amtsgericht Muenchen
[cid:[email protected]]<http://www.tomtec.de/>