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:image001.jpg@01D4AD9F.79464280]<http://www.tomtec.de/>




Reply via email to