[prev in list] [next in list] [prev in thread] [next in thread] 

List:       axis-dev
Subject:    [jira] [Resolved] (AXIS2-4878) Simple BeanInfo cache in
From:       "Andreas Veithen (Resolved) (JIRA)" <jira () apache ! org>
Date:       2011-10-28 19:51:32
Message-ID: 647406632.33153.1319831492556.JavaMail.tomcat () hel ! zones ! apache ! org
[Download RAW message or body]


     [ 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-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic