Challen created OLINGO-421:
------------------------------
Summary: java client - further improve getter method's perf in the
generated proxy codes
Key: OLINGO-421
URL: https://issues.apache.org/jira/browse/OLINGO-421
Project: Olingo
Issue Type: Task
Affects Versions: V4 4.0.0-beta-02
Reporter: Challen
Assignee: Challen
Fix For: V4 4.0.0-beta-02
OLINGO-415 did enhanced the getter method's perf, but further improvement is
still expected. (it may be a significant code change, so targetting beta-02)
in a test, t3 (620) is only half of t2 (1240), so the invoke() method still can
be optimized.
(in AbstractStructuredInvocationHandler.java)
====================
public Object invoke(final Object proxy, final Method method, final Object[]
args) throws Throwable {
+ long start1 = System.nanoTime();
if (method.getName().startsWith("get")) {
// Here need check "get"/"set" first for better get-/set-
performance because
// the below if-statements are really time-consuming, even
twice slower than "get" body.
// Assumption: for each getter will always exist a setter and
viceversa.
// get method annotation and check if it exists as expected
+ long start2 = System.nanoTime();
final Object res;
final Method getter = typeRef.getMethod(method.getName());
final Property property = ClassUtils.getAnnotation(Property.class,
getter);
if (property == null) {
final NavigationProperty navProp =
ClassUtils.getAnnotation(NavigationProperty.class, getter);
if (navProp == null) {
throw new UnsupportedOperationException("Unsupported method " +
method.getName());
} else {
// if the getter refers to a navigation property ... navigate and
follow link if necessary
res = getNavigationPropertyValue(navProp, getter);
}
} else {
// if the getter refers to a property .... get property from wrapped
entity
res = getPropertyValue(property.name(),
getter.getGenericReturnType()); // inside, ClassUtils.t3 is measured
}
+ ClassUtils.t2 += System.nanoTime() - start2;
+ ClassUtils.t1 += System.nanoTime() - start1;
( ClassUtils.t3 is measured in getPropertyValue() method. )
========================
+ long start3 = System.nanoTime();
res = property == null || property.hasNullValue()
? null
: CoreUtils.getObjectFromODataValue(property.getValue(),
type, service);
+ ClassUtils.t3 += System.nanoTime() - start3;
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)