axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Armstrong (JIRA)" <>
Subject [jira] Created: (AXIS2-4878) Simple BeanInfo cache in helped as go from 48 second to 8 second request
Date Wed, 10 Nov 2010 07:52:13 GMT
Simple BeanInfo cache in helped as go from 48 second to 8 second request

                 Key: AXIS2-4878
             Project: Axis2
          Issue Type: Improvement
          Components: adb
    Affects Versions: 1.5.2
         Environment: Linux (Debian Lenny x86_64), JDK 1.6.0, Tomcat 6 (in NetBeans 6.5.1).
 Deployed POJO service as .aar file.
            Reporter: Dan Armstrong

We return arrays of complex objects - all of the same type for any particular web services
call.  Axis2 was unusably slow.  Upon closer inspection, it was spending much of its time
in BeanUtil.  The #1 problem is that it is performing introspection repeatedly for each and
every object.  Introspection is very expensive - calling the methods once you find them is

The solution is to perform the introspection and cache the results.  I added a few lines of
code to and brought our request from 48 seconds down to 8.  This solution may
not be exactly how you would implement it, but the idea is sound and the results are very

import java.util.concurrent.*;

    private static final ConcurrentMap<Class<?>,BeanInfo> beanInfoCache = new

            // About line 140, where calls Introspector.getBeanInfo:
            BeanInfo beanInfo = beanInfoCache.get(beanClass);
            if(beanInfo==null) beanInfoCache.put(beanClass, beanInfo = Introspector.getBeanInfo(beanClass,

The map would probably need to use weak references to not prevent class unloading.  And you
may not want to depend on the Java 5 generics and concurrent collections.  But the point remains
- without this POJO to too slow (rhyme intended).

Please add this to the Axis2 to benefit others.

Thank you,

Dan Armstrong
AO Industries, Inc.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message