aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/collections/MethodCache.java7
2 files changed, 8 insertions, 1 deletions
diff --git a/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java b/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java
index cf3ff7d3d66..4ee8df0c249 100644
--- a/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java
+++ b/container-core/src/main/java/com/yahoo/processing/request/CloneHelper.java
@@ -114,7 +114,7 @@ public class CloneHelper {
private Object cloneByReflection(Object object) {
try {
- Method cloneMethod = cloneMethodCache.get(object);
+ Method cloneMethod = cloneMethodCache.get(object, name -> log.warning("Caching the clone method of '" + name + "'. Let it implement com.yahoo.lang.PublicCloneable instead"));
if (cloneMethod == null) {
log.warning("'" + object + "' of class " + object.getClass() +
" is Cloneable, but has no clone method - will use the same instance in all requests");
diff --git a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
index 4a4331b1c6e..bf9200efb2e 100644
--- a/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
+++ b/vespajlib/src/main/java/com/yahoo/collections/MethodCache.java
@@ -4,6 +4,7 @@ package com.yahoo.collections;
import com.yahoo.concurrent.CopyOnWriteHashMap;
import java.lang.reflect.Method;
+import java.util.function.Consumer;
/**
* This will cache methods solved by reflection as reflection is expensive.
@@ -28,11 +29,17 @@ public final class MethodCache {
public void clear() {
cache.clear();
}
+
public Method get(Object object) {
+ return get(object, null);
+ }
+ public Method get(Object object, Consumer<String> onPut) {
Method m = cache.get(object.getClass().getName());
if (m == null) {
m = lookupMethod(object);
if (m != null) {
+ if (onPut != null)
+ onPut.accept(object.getClass().getName());
cache.put(object.getClass().getName(), m);
}
}