Simple BeanInfo cache in BeanUtil.java helped as go from 48 second to 8 second 
request
--------------------------------------------------------------------------------------

                 Key: AXIS2-4878
                 URL: https://issues.apache.org/jira/browse/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 cheap.

The solution is to perform the introspection and cache the results.  I added a 
few lines of code to BeanUtil.java 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 impressive:

import java.util.concurrent.*;

    private static final ConcurrentMap<Class<?>,BeanInfo> beanInfoCache = new 
ConcurrentHashMap<Class<?>,BeanInfo>();

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


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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to