[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