You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2017/02/24 18:35:17 UTC

svn commit: r1784313 - /commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java

Author: rmannibucau
Date: Fri Feb 24 18:35:17 2017
New Revision: 1784313

URL: http://svn.apache.org/viewvc?rev=1784313&view=rev
Log:
JCS-173 support of java.lang.reflect.Proxy for cdi integration

Modified:
    commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java

Modified: commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java?rev=1784313&r1=1784312&r2=1784313&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java Fri Feb 24 18:35:17 2017
@@ -18,18 +18,8 @@
  */
 package org.apache.commons.jcs.jcache.cdi;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.logging.Logger;
 import javax.annotation.PreDestroy;
 import javax.cache.annotation.CacheDefaults;
-import javax.cache.annotation.CacheInvocationParameter;
 import javax.cache.annotation.CacheKey;
 import javax.cache.annotation.CacheKeyGenerator;
 import javax.cache.annotation.CacheResolverFactory;
@@ -41,6 +31,15 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Inject;
 import javax.interceptor.InvocationContext;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Logger;
 
 @ApplicationScoped
 public class CDIJCacheHelper
@@ -104,8 +103,25 @@ public class CDIJCacheHelper
 
     public CacheDefaults findDefaults(final InvocationContext ic)
     {
-        Class<?> clazz = ic.getTarget().getClass();
+        if (ic.getTarget() != null && Proxy.isProxyClass(ic.getTarget().getClass())) // target doesnt hold annotations
+        {
+            final Class<?> api = ic.getMethod().getDeclaringClass();
+            for (final Class<?> type : ic.getTarget().getClass().getInterfaces())
+            {
+                if (!api.isAssignableFrom(type))
+                {
+                    continue;
+                }
+                return extractDefaults(type);
+            }
+        }
+        return extractDefaults(ic.getTarget().getClass());
+    }
+
+    private CacheDefaults extractDefaults(final Class<?> type)
+    {
         CacheDefaults annotation = null;
+        Class<?> clazz = type;
         while (clazz != null && clazz != Object.class)
         {
             annotation = clazz.getAnnotation(CacheDefaults.class);