[ 
https://issues.apache.org/jira/browse/AXIS2-4878?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen resolved AXIS2-4878.
------------------------------------

       Resolution: Duplicate
    Fix Version/s: 1.7.0
                   1.6.2
         Assignee: Andreas Veithen
    
> Simple BeanInfo cache in BeanUtil.java helped us 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
>            Assignee: Andreas Veithen
>             Fix For: 1.6.2, 1.7.0
>
>   Original Estimate: 0.25h
>  Remaining Estimate: 0.25h
>
> 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 is 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.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to