Author: rmannibucau
Date: Thu Feb 26 09:20:14 2015
New Revision: 1662397

URL: http://svn.apache.org/r1662397
Log:
ignoring CacheValue for key parameters

Modified:
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CDIJCacheHelper.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheInvocationContextImpl.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheKeyInvocationContextImpl.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CachePutInterceptor.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveAllInterceptor.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveInterceptor.java
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResultInterceptor.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=1662397&r1=1662396&r2=1662397&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
 Thu Feb 26 09:20:14 2015
@@ -20,14 +20,20 @@ package org.apache.commons.jcs.jcache.cd
 
 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;
+import javax.cache.annotation.CacheValue;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
@@ -45,6 +51,7 @@ public class CDIJCacheHelper
     private volatile CacheResolverFactoryImpl defaultCacheResolverFactory = 
null; // lazy to not create any cache if not needed
     private final CacheKeyGeneratorImpl defaultCacheKeyGenerator = new 
CacheKeyGeneratorImpl();
     private final ConcurrentMap<Method, String> generatedNames = new 
ConcurrentHashMap<Method, String>();
+    private final ConcurrentMap<Method, Integer[]> parameterIndexes = new 
ConcurrentHashMap<Method, Integer[]>();
 
     @Inject
     private BeanManager beanManager;
@@ -215,4 +222,52 @@ public class CDIJCacheHelper
         }
         return defaultCacheResolverFactory;
     }
+
+    public Integer[] keyParameterIndexes(final Method method)
+    {
+        Integer[] val = parameterIndexes.get(method);
+        if (val == null)
+        {
+            final List<Integer> keys = new LinkedList<Integer>();
+            final Annotation[][] parameterAnnotations = 
method.getParameterAnnotations();
+            
+            // first check if keys are specified explicitely
+            for (int i = 0; i < method.getParameterTypes().length; i++)
+            {
+                final Annotation[] annotations = parameterAnnotations[i];
+                for (final Annotation a : annotations)
+                {
+                    if (a.annotationType().equals(CacheKey.class))
+                    {
+                        keys.add(i);
+                        break;
+                    }
+                }
+            }
+
+            // if not then use all parameters but value ones
+            if (keys.isEmpty())
+            {
+                for (int i = 0; i < method.getParameterTypes().length; i++)
+                {
+                    final Annotation[] annotations = parameterAnnotations[i];
+                    boolean value = false;
+                    for (final Annotation a : annotations)
+                    {
+                        if (a.annotationType().equals(CacheValue.class))
+                        {
+                            value = true;
+                            break;
+                        }
+                    }
+                    if (!value) {
+                        keys.add(i);
+                    }
+                }
+            }
+            val = keys.toArray(new Integer[keys.size()]);
+            parameterIndexes.putIfAbsent(method, val);
+        }
+        return val;
+    }
 }

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheInvocationContextImpl.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheInvocationContextImpl.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheInvocationContextImpl.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheInvocationContextImpl.java
 Thu Feb 26 09:20:14 2015
@@ -18,11 +18,11 @@
  */
 package org.apache.commons.jcs.jcache.cdi;
 
+import java.lang.annotation.Annotation;
+import java.util.HashSet;
 import javax.cache.annotation.CacheInvocationContext;
 import javax.cache.annotation.CacheInvocationParameter;
 import javax.interceptor.InvocationContext;
-import java.lang.annotation.Annotation;
-import java.util.HashSet;
 
 import static java.util.Arrays.asList;
 
@@ -46,14 +46,7 @@ public class CacheInvocationContextImpl<
     {
         if (parameters == null)
         {
-            final Object[] args = delegate.getParameters();
-            final Class<?>[] parameterTypes = getMethod().getParameterTypes();
-            final Annotation[][] parameterAnnotations = 
getMethod().getParameterAnnotations();
-            parameters = new CacheInvocationParameter[args.length];
-            for (int i = 0; i < args.length; i++)
-            {
-                parameters[i] = new 
CacheInvocationParameterImpl(parameterTypes[i], args[i], new 
HashSet<Annotation>(asList(parameterAnnotations[i])), i);
-            }
+            parameters = doGetAllParameters(null);
         }
         return parameters;
     }
@@ -67,4 +60,34 @@ public class CacheInvocationContextImpl<
         }
         throw new IllegalArgumentException(cls.getName());
     }
+
+    protected CacheInvocationParameter[] doGetAllParameters(final Integer[] 
indexes)
+    {
+        final Object[] args = delegate.getParameters();
+        final Class<?>[] parameterTypes = getMethod().getParameterTypes();
+        final Annotation[][] parameterAnnotations = 
getMethod().getParameterAnnotations();
+
+        final CacheInvocationParameter[] parametersAsArray = new 
CacheInvocationParameter[indexes == null ? args.length : indexes.length];
+        if (indexes == null)
+        {
+            for (int i = 0; i < args.length; i++)
+            {
+                parametersAsArray[i] = 
newCacheInvocationParameterImpl(parameterTypes[i], args[i], 
parameterAnnotations[i], i);
+            }
+        }
+        else
+        {
+            for (int idx = 0; idx < indexes.length; idx++)
+            {
+                final int i = indexes[idx];
+                parametersAsArray[i] = 
newCacheInvocationParameterImpl(parameterTypes[i], args[i], 
parameterAnnotations[i], i);
+            }
+        }
+        return parametersAsArray;
+    }
+
+    private CacheInvocationParameterImpl newCacheInvocationParameterImpl(final 
Class<?> type, final Object arg,
+                                                                         final 
Annotation[] annotations, final int i) {
+        return new CacheInvocationParameterImpl(type, arg, new 
HashSet<Annotation>(asList(annotations)), i);
+    }
 }

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheKeyInvocationContextImpl.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheKeyInvocationContextImpl.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheKeyInvocationContextImpl.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheKeyInvocationContextImpl.java
 Thu Feb 26 09:20:14 2015
@@ -29,12 +29,15 @@ import java.util.LinkedList;
 
 public class CacheKeyInvocationContextImpl<A extends Annotation> extends 
CacheInvocationContextImpl<A> implements CacheKeyInvocationContext<A>
 {
+    private final Integer[] keyIndexes;
     private CacheInvocationParameter[] keyParams = null;
     private CacheInvocationParameter valueParam = null;
 
-    public CacheKeyInvocationContextImpl(final InvocationContext delegate, 
final A annotation, final String name)
+    public CacheKeyInvocationContextImpl(final InvocationContext delegate, 
final A annotation, final String name,
+                                         final Integer[] keyIndexes)
     {
         super(delegate, annotation, name);
+        this.keyIndexes = keyIndexes;
     }
 
     @Override
@@ -55,7 +58,7 @@ public class CacheKeyInvocationContextIm
             }
             if (keys.isEmpty())
             {
-                keyParams = getAllParameters();
+                keyParams = doGetAllParameters(keyIndexes);
             }
             else
             {

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CachePutInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CachePutInterceptor.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CachePutInterceptor.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CachePutInterceptor.java
 Thu Feb 26 09:20:14 2015
@@ -19,6 +19,7 @@
 package org.apache.commons.jcs.jcache.cdi;
 
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import javax.annotation.Priority;
 import javax.cache.Cache;
 import javax.cache.annotation.CacheDefaults;
@@ -43,11 +44,13 @@ public class CachePutInterceptor impleme
     {
         final CacheDefaults defaults = helper.findDefaults(ic);
 
-        final CachePut cachePut = ic.getMethod().getAnnotation(CachePut.class);
-        final String cacheName = helper.defaultName(ic.getMethod(), defaults, 
cachePut.cacheName());
+        final Method method = ic.getMethod();
+        final CachePut cachePut = method.getAnnotation(CachePut.class);
+        final String cacheName = helper.defaultName(method, defaults, 
cachePut.cacheName());
         final boolean afterInvocation = cachePut.afterInvocation();
 
-        final CacheKeyInvocationContext<CachePut> context = new 
CacheKeyInvocationContextImpl<CachePut>(ic, cachePut, cacheName);
+        final CacheKeyInvocationContext<CachePut> context = new 
CacheKeyInvocationContextImpl<CachePut>(
+                ic, cachePut, cacheName, helper.keyParameterIndexes(method));
         if (!afterInvocation)
         {
             doCache(context, defaults, cachePut);

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveAllInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveAllInterceptor.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveAllInterceptor.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveAllInterceptor.java
 Thu Feb 26 09:20:14 2015
@@ -19,6 +19,7 @@
 package org.apache.commons.jcs.jcache.cdi;
 
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import javax.annotation.Priority;
 import javax.cache.Cache;
 import javax.cache.annotation.CacheDefaults;
@@ -42,11 +43,13 @@ public class CacheRemoveAllInterceptor i
     {
         final CacheDefaults defaults = helper.findDefaults(ic);
 
-        final CacheRemoveAll cacheRemoveAll = 
ic.getMethod().getAnnotation(CacheRemoveAll.class);
-        final String cacheName = helper.defaultName(ic.getMethod(), defaults, 
cacheRemoveAll.cacheName());
+        final Method method = ic.getMethod();
+        final CacheRemoveAll cacheRemoveAll = 
method.getAnnotation(CacheRemoveAll.class);
+        final String cacheName = helper.defaultName(method, defaults, 
cacheRemoveAll.cacheName());
         final boolean afterInvocation = cacheRemoveAll.afterInvocation();
 
-        final CacheKeyInvocationContext<CacheRemoveAll> context = new 
CacheKeyInvocationContextImpl<CacheRemoveAll>(ic, cacheRemoveAll, cacheName);
+        final CacheKeyInvocationContext<CacheRemoveAll> context = new 
CacheKeyInvocationContextImpl<CacheRemoveAll>(
+                ic, cacheRemoveAll, cacheName, 
helper.keyParameterIndexes(method));
         if (!afterInvocation)
         {
             removeAll(context, defaults, cacheRemoveAll);

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveInterceptor.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveInterceptor.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheRemoveInterceptor.java
 Thu Feb 26 09:20:14 2015
@@ -19,6 +19,7 @@
 package org.apache.commons.jcs.jcache.cdi;
 
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import javax.annotation.Priority;
 import javax.cache.Cache;
 import javax.cache.annotation.CacheDefaults;
@@ -43,11 +44,13 @@ public class CacheRemoveInterceptor impl
     {
         final CacheDefaults defaults = helper.findDefaults(ic);
 
-        final CacheRemove cacheRemove = 
ic.getMethod().getAnnotation(CacheRemove.class);
-        final String cacheName = helper.defaultName(ic.getMethod(), defaults, 
cacheRemove.cacheName());
+        final Method method = ic.getMethod();
+        final CacheRemove cacheRemove = 
method.getAnnotation(CacheRemove.class);
+        final String cacheName = helper.defaultName(method, defaults, 
cacheRemove.cacheName());
         final boolean afterInvocation = cacheRemove.afterInvocation();
 
-        final CacheKeyInvocationContext<CacheRemove> context = new 
CacheKeyInvocationContextImpl<CacheRemove>(ic, cacheRemove, cacheName);
+        final CacheKeyInvocationContext<CacheRemove> context =
+                new CacheKeyInvocationContextImpl<CacheRemove>(ic, 
cacheRemove, cacheName, helper.keyParameterIndexes(method));
 
         if (!afterInvocation)
         {

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResultInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResultInterceptor.java?rev=1662397&r1=1662396&r2=1662397&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResultInterceptor.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResultInterceptor.java
 Thu Feb 26 09:20:14 2015
@@ -19,6 +19,7 @@
 package org.apache.commons.jcs.jcache.cdi;
 
 import java.io.Serializable;
+import java.lang.reflect.Method;
 import javax.annotation.Priority;
 import javax.cache.Cache;
 import javax.cache.annotation.CacheDefaults;
@@ -45,10 +46,12 @@ public class CacheResultInterceptor impl
     {
         final CacheDefaults defaults = helper.findDefaults(ic);
 
-        final CacheResult cacheResult = 
ic.getMethod().getAnnotation(CacheResult.class);
-        final String cacheName = helper.defaultName(ic.getMethod(), defaults, 
cacheResult.cacheName());
+        final Method method = ic.getMethod();
+        final CacheResult cacheResult = 
method.getAnnotation(CacheResult.class);
+        final String cacheName = helper.defaultName(method, defaults, 
cacheResult.cacheName());
 
-        final CacheKeyInvocationContext<CacheResult> context = new 
CacheKeyInvocationContextImpl<CacheResult>(ic, cacheResult, cacheName);
+        final CacheKeyInvocationContext<CacheResult> context = new 
CacheKeyInvocationContextImpl<CacheResult>(
+                ic, cacheResult, cacheName, 
helper.keyParameterIndexes(method));
 
         final CacheResolverFactory cacheResolverFactory = 
helper.cacheResolverFactoryFor(defaults, cacheResult.cacheResolverFactory());
         final CacheResolver cacheResolver = 
cacheResolverFactory.getCacheResolver(context);


Reply via email to