Author: rmannibucau Date: Fri Feb 20 12:46:49 2015 New Revision: 1661112 URL: http://svn.apache.org/r1661112 Log: JCS-142 making cdi extension scanning independent
Removed: commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/META-INF/beans.xml Modified: commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml commons/proper/jcs/trunk/commons-jcs-jcache/pom.xml 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/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 commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/MakeJCacheCDIInterceptorFriendly.java commons/proper/jcs/trunk/commons-jcs-tck-tests/pom.xml commons/proper/jcs/trunk/commons-jcs-tck-tests/src/test/java/org/apache/commons/jcs/jcache/OWBBeanProvider.java commons/proper/jcs/trunk/pom.xml Modified: commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml (original) +++ commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml Fri Feb 20 12:46:49 2015 @@ -40,11 +40,11 @@ </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jcdi_1.0_spec</artifactId> + <artifactId>geronimo-jcdi_1.1_spec</artifactId> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-interceptor_1.1_spec</artifactId> + <artifactId>geronimo-interceptor_1.2_spec</artifactId> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> Modified: commons/proper/jcs/trunk/commons-jcs-jcache/pom.xml URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/pom.xml?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-jcache/pom.xml (original) +++ commons/proper/jcs/trunk/commons-jcs-jcache/pom.xml Fri Feb 20 12:46:49 2015 @@ -41,11 +41,15 @@ </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jcdi_1.0_spec</artifactId> + <artifactId>geronimo-jcdi_1.1_spec</artifactId> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-interceptor_1.1_spec</artifactId> + <artifactId>geronimo-interceptor_1.2_spec</artifactId> + </dependency> + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-annotation_1.2_spec</artifactId> </dependency> <dependency> 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=1661112&r1=1661111&r2=1661112&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 20 12:46:49 2015 @@ -18,6 +18,12 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.logging.Logger; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKeyGenerator; import javax.cache.annotation.CacheResolverFactory; @@ -28,12 +34,6 @@ 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.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.logging.Logger; @ApplicationScoped public class CDIJCacheHelper @@ -163,6 +163,12 @@ public class CDIJCacheHelper final Set<Bean<?>> beans = beanManager.getBeans(type); if (beans.isEmpty()) { + if (CacheKeyGenerator.class == type) { + return (T) defaultCacheKeyGenerator; + } + if (CacheResolverFactory.class == type) { + return (T) defaultCacheResolverFactory; + } return null; } final Bean<?> bean = beanManager.resolve(beans); 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=1661112&r1=1661111&r2=1661112&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 Fri Feb 20 12:46:49 2015 @@ -18,6 +18,8 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.io.Serializable; +import javax.annotation.Priority; import javax.cache.Cache; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKeyInvocationContext; @@ -30,7 +32,8 @@ import javax.interceptor.InvocationConte @CachePut @Interceptor -public class CachePutInterceptor +@Priority(/*LIBRARY_BEFORE*/1000) +public class CachePutInterceptor implements Serializable { @Inject private CDIJCacheHelper helper; 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=1661112&r1=1661111&r2=1661112&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 Fri Feb 20 12:46:49 2015 @@ -18,6 +18,8 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.io.Serializable; +import javax.annotation.Priority; import javax.cache.Cache; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKeyInvocationContext; @@ -29,7 +31,8 @@ import javax.interceptor.InvocationConte @CacheRemoveAll @Interceptor -public class CacheRemoveAllInterceptor +@Priority(/*LIBRARY_BEFORE*/1000) +public class CacheRemoveAllInterceptor implements Serializable { @Inject private CDIJCacheHelper helper; 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=1661112&r1=1661111&r2=1661112&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 Fri Feb 20 12:46:49 2015 @@ -18,6 +18,8 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.io.Serializable; +import javax.annotation.Priority; import javax.cache.Cache; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKeyInvocationContext; @@ -30,7 +32,8 @@ import javax.interceptor.InvocationConte @CacheRemove @Interceptor -public class CacheRemoveInterceptor +@Priority(/*LIBRARY_BEFORE*/1000) +public class CacheRemoveInterceptor implements Serializable { @Inject private CDIJCacheHelper helper; 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=1661112&r1=1661111&r2=1661112&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 Fri Feb 20 12:46:49 2015 @@ -18,6 +18,8 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.io.Serializable; +import javax.annotation.Priority; import javax.cache.Cache; import javax.cache.annotation.CacheDefaults; import javax.cache.annotation.CacheKeyInvocationContext; @@ -32,7 +34,8 @@ import javax.interceptor.InvocationConte @CacheResult @Interceptor -public class CacheResultInterceptor +@Priority(/*LIBRARY_BEFORE*/1000) +public class CacheResultInterceptor implements Serializable { @Inject private CDIJCacheHelper helper; Modified: commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/MakeJCacheCDIInterceptorFriendly.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/MakeJCacheCDIInterceptorFriendly.java?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/MakeJCacheCDIInterceptorFriendly.java (original) +++ commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/MakeJCacheCDIInterceptorFriendly.java Fri Feb 20 12:46:49 2015 @@ -18,23 +18,68 @@ */ package org.apache.commons.jcs.jcache.cdi; +import java.lang.annotation.Annotation; import javax.cache.annotation.CachePut; import javax.cache.annotation.CacheRemove; import javax.cache.annotation.CacheRemoveAll; import javax.cache.annotation.CacheResult; import javax.enterprise.event.Observes; +import javax.enterprise.inject.spi.AfterBeanDiscovery; +import javax.enterprise.inject.spi.AnnotatedType; +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.BeanAttributes; +import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.Extension; +import javax.enterprise.inject.spi.InjectionTarget; +import javax.enterprise.inject.spi.InjectionTargetFactory; +import javax.enterprise.inject.spi.ProcessAnnotatedType; + +import static java.util.Arrays.asList; // TODO: observe annotated type (or maybe sthg else) to cache data and inecjt this extension (used as metadata cache) // to get class model and this way allow to add cache annotation on the fly - == avoid java pure reflection to get metadata public class MakeJCacheCDIInterceptorFriendly implements Extension { - protected void discoverInterceptorBindings(final @Observes BeforeBeanDiscovery beforeBeanDiscoveryEvent) + private boolean needHelper = true; + + protected void discoverInterceptorBindings(final @Observes BeforeBeanDiscovery beforeBeanDiscoveryEvent, + final BeanManager bm) { - beforeBeanDiscoveryEvent.addInterceptorBinding(CachePut.class); - beforeBeanDiscoveryEvent.addInterceptorBinding(CacheResult.class); - beforeBeanDiscoveryEvent.addInterceptorBinding(CacheRemove.class); - beforeBeanDiscoveryEvent.addInterceptorBinding(CacheRemoveAll.class); + for (final Class<?> interceptor : asList( + CachePutInterceptor.class, CacheRemoveInterceptor.class, + CacheRemoveAllInterceptor.class, CacheResultInterceptor.class)) { + beforeBeanDiscoveryEvent.addAnnotatedType(bm.createAnnotatedType(interceptor)); + } + for (final Class<? extends Annotation> interceptor : asList( + CachePut.class, CacheRemove.class, + CacheRemoveAll.class, CacheResult.class)) { + beforeBeanDiscoveryEvent.addInterceptorBinding(interceptor); + } + } + + protected void addHelper(final @Observes AfterBeanDiscovery afterBeanDiscovery, + final BeanManager bm) + { + if (!needHelper) { + return; + } + final AnnotatedType<CDIJCacheHelper> annotatedType = bm.createAnnotatedType(CDIJCacheHelper.class); + final BeanAttributes<CDIJCacheHelper> beanAttributes = bm.createBeanAttributes(annotatedType); + final InjectionTarget<CDIJCacheHelper> injectionTarget = bm.createInjectionTarget(annotatedType); + final Bean<CDIJCacheHelper> bean = bm.createBean(beanAttributes, CDIJCacheHelper.class, new InjectionTargetFactory<CDIJCacheHelper>() { + @Override + public InjectionTarget<CDIJCacheHelper> createInjectionTarget(Bean<CDIJCacheHelper> bean) { + return injectionTarget; + } + }); + afterBeanDiscovery.addBean(bean); + } + + protected void vetoScannedCDIJCacheHelperQualifiers(final @Observes ProcessAnnotatedType<CDIJCacheHelper> pat) { + if (!needHelper) { // already seen, shouldn't really happen,just a protection + pat.veto(); + } + needHelper = false; } } Modified: commons/proper/jcs/trunk/commons-jcs-tck-tests/pom.xml URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-tck-tests/pom.xml?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-tck-tests/pom.xml (original) +++ commons/proper/jcs/trunk/commons-jcs-tck-tests/pom.xml Fri Feb 20 12:46:49 2015 @@ -113,7 +113,7 @@ <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jcdi_1.0_spec</artifactId> + <artifactId>geronimo-jcdi_1.1_spec</artifactId> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> @@ -121,7 +121,11 @@ </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-interceptor_1.1_spec</artifactId> + <artifactId>geronimo-interceptor_1.2_spec</artifactId> + </dependency> + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-annotation_1.2_spec</artifactId> </dependency> <dependency> <groupId>org.apache.openwebbeans</groupId> Modified: commons/proper/jcs/trunk/commons-jcs-tck-tests/src/test/java/org/apache/commons/jcs/jcache/OWBBeanProvider.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-tck-tests/src/test/java/org/apache/commons/jcs/jcache/OWBBeanProvider.java?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-tck-tests/src/test/java/org/apache/commons/jcs/jcache/OWBBeanProvider.java (original) +++ commons/proper/jcs/trunk/commons-jcs-tck-tests/src/test/java/org/apache/commons/jcs/jcache/OWBBeanProvider.java Fri Feb 20 12:46:49 2015 @@ -22,9 +22,9 @@ import org.apache.webbeans.config.WebBea import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.spi.ContainerLifecycle; +import java.util.Set; import javax.cache.annotation.BeanProvider; import javax.enterprise.inject.spi.Bean; -import java.util.Set; public class OWBBeanProvider implements BeanProvider { Modified: commons/proper/jcs/trunk/pom.xml URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/pom.xml?rev=1661112&r1=1661111&r2=1661112&view=diff ============================================================================== --- commons/proper/jcs/trunk/pom.xml (original) +++ commons/proper/jcs/trunk/pom.xml Fri Feb 20 12:46:49 2015 @@ -516,14 +516,14 @@ <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jcdi_1.0_spec</artifactId> - <version>1.0</version> + <artifactId>geronimo-jcdi_1.1_spec</artifactId> + <version>1.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-interceptor_1.1_spec</artifactId> - <version>1.0</version> + <artifactId>geronimo-interceptor_1.2_spec</artifactId> + <version>1.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> @@ -541,9 +541,16 @@ </dependency> <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-annotation_1.2_spec</artifactId> + <version>1.0-alpha-1</version> + <scope>provided</scope> + </dependency> + + <dependency> <groupId>org.apache.openwebbeans</groupId> <artifactId>openwebbeans-impl</artifactId> - <version>1.2.6</version> + <version>1.5.0-SNAPSHOT</version> <scope>test</scope> </dependency>