You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/08/25 11:43:11 UTC
[camel] 01/02: CAMEL-13907: Lets clear bean introspection cache
after bootstrap of Camel as the cache was used during initialization.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4b71a46ac6672b4fc8fcf6e9ce4dfde440646972
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Aug 25 09:39:23 2019 +0200
CAMEL-13907: Lets clear bean introspection cache after bootstrap of Camel as the cache was used during initialization.
---
.../org/apache/camel/spi/BeanIntrospection.java | 25 +++++++++++++--
.../impl/engine/CamelPostProcessorHelper.java | 4 +--
.../impl/engine/DefaultBeanIntrospection.java | 37 ++++++++++------------
.../management/ManagedBeanIntrospectionTest.java | 2 +-
.../camel/support/PropertyBindingSupport.java | 2 +-
5 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java b/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
index d4a5192..9680037 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
@@ -129,12 +129,31 @@ public interface BeanIntrospection extends StaticService {
*/
ClassInfo cacheClass(Class<?> clazz);
- Object getOrElseProperty(Object target, String propertyName, Object defaultValue);
+ /**
+ * Clears the introspection cache.
+ */
+ void clearCache();
+ /**
+ * Gets the property or else returning the default value.
+ *
+ * @param target the target bean
+ * @param propertyName the property name
+ * @param defaultValue the default value
+ * @param ignoreCase whether to ignore case for matching the property name
+ * @return the property value, or the default value if the target does not have a property with the given name
+ */
Object getOrElseProperty(Object target, String propertyName, Object defaultValue, boolean ignoreCase);
- Method getPropertyGetter(Class<?> type, String propertyName) throws NoSuchMethodException;
-
+ /**
+ * Gets the getter method for the property.
+ *
+ * @param type the target class
+ * @param propertyName the property name
+ * @param ignoreCase whether to ignore case for matching the property name
+ * @return the getter method
+ * @throws NoSuchMethodException is thrown if there are no getter method for the property
+ */
Method getPropertyGetter(Class<?> type, String propertyName, boolean ignoreCase) throws NoSuchMethodException;
/**
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
index b28cf0f..c6e65dd 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelPostProcessorHelper.java
@@ -178,10 +178,10 @@ public class CamelPostProcessorHelper implements CamelContextAware {
// 2. then the getter with Endpoint as postfix
// 3. then if start with on then try step 1 and 2 again, but omit the on prefix
try {
- Object value = getCamelContext().adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(bean, propertyName, null);
+ Object value = getCamelContext().adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(bean, propertyName, null, false);
if (value == null) {
// try endpoint as postfix
- value = getCamelContext().adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(bean, propertyName + "Endpoint", null);
+ value = getCamelContext().adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(bean, propertyName + "Endpoint", null, false);
}
if (value == null && propertyName.startsWith("on")) {
// retry but without the on as prefix
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultBeanIntrospection.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultBeanIntrospection.java
index ca8bca9..2d02c38 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultBeanIntrospection.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultBeanIntrospection.java
@@ -77,41 +77,47 @@ public class DefaultBeanIntrospection extends ServiceSupport implements BeanIntr
if (args != null && args.length > 0) {
obj = Arrays.asList(args);
}
- logger.log("Invoked: " + invoked.get() + " times (overall) [Method: " + method + ", Target: " + target + ", Arguments: " + obj + " ]");
+ if (target == null) {
+ logger.log("Invoked: " + invoked.get() + " times (overall) [Method: " + method + " ]");
+ } else if (args == null) {
+ logger.log("Invoked: " + invoked.get() + " times (overall) [Method: " + method + ", Target: " + target + "]");
+ } else {
+ logger.log("Invoked: " + invoked.get() + " times (overall) [Method: " + method + ", Target: " + target + ", Arguments: " + obj + " ]");
+ }
}
@Override
public ClassInfo cacheClass(Class<?> clazz) {
- log("cacheClass", clazz);
+ if (logger.shouldLog()) {
+ log("cacheClass", clazz);
+ }
invoked.incrementAndGet();
return IntrospectionSupport.cacheClass(clazz);
}
@Override
- public boolean getProperties(Object target, Map<String, Object> properties, String optionPrefix) {
- invoked.incrementAndGet();
+ public void clearCache() {
if (logger.shouldLog()) {
- log("getProperties", target);
+ log("clearCache", null);
}
- return IntrospectionSupport.getProperties(target, properties, optionPrefix);
}
@Override
- public boolean getProperties(Object target, Map<String, Object> properties, String optionPrefix, boolean includeNull) {
+ public boolean getProperties(Object target, Map<String, Object> properties, String optionPrefix) {
invoked.incrementAndGet();
if (logger.shouldLog()) {
log("getProperties", target);
}
- return IntrospectionSupport.getProperties(target, properties, optionPrefix, includeNull);
+ return IntrospectionSupport.getProperties(target, properties, optionPrefix);
}
@Override
- public Object getOrElseProperty(Object target, String propertyName, Object defaultValue) {
+ public boolean getProperties(Object target, Map<String, Object> properties, String optionPrefix, boolean includeNull) {
invoked.incrementAndGet();
if (logger.shouldLog()) {
- log("getOrElseProperty", target, propertyName);
+ log("getProperties", target);
}
- return IntrospectionSupport.getOrElseProperty(target, propertyName, defaultValue);
+ return IntrospectionSupport.getProperties(target, properties, optionPrefix, includeNull);
}
@Override
@@ -124,15 +130,6 @@ public class DefaultBeanIntrospection extends ServiceSupport implements BeanIntr
}
@Override
- public Method getPropertyGetter(Class<?> type, String propertyName) throws NoSuchMethodException {
- invoked.incrementAndGet();
- if (logger.shouldLog()) {
- log("getPropertyGetter", type, propertyName);
- }
- return IntrospectionSupport.getPropertyGetter(type, propertyName);
- }
-
- @Override
public Method getPropertyGetter(Class<?> type, String propertyName, boolean ignoreCase) throws NoSuchMethodException {
invoked.incrementAndGet();
if (logger.shouldLog()) {
diff --git a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
index 0ec992b..3e356a8 100644
--- a/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
+++ b/core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
@@ -65,7 +65,7 @@ public class ManagedBeanIntrospectionTest extends ManagementTestSupport {
Long counter = (Long) mbeanServer.getAttribute(on, "InvokedCounter");
assertEquals("Should not have been invoked", 0, counter.intValue());
- Object dummy = context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(this, "dummy", null);
+ Object dummy = context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getOrElseProperty(this, "dummy", null, false);
assertEquals("MyDummy", dummy);
counter = (Long) mbeanServer.getAttribute(on, "InvokedCounter");
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 3974bb1..0d70e88 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -713,7 +713,7 @@ public final class PropertyBindingSupport {
return getter.getReturnType();
}
} else {
- Method getter = context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getPropertyGetter(target.getClass(), name);
+ Method getter = context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getPropertyGetter(target.getClass(), name, false);
if (getter != null) {
return getter.getReturnType();
}