Author: rmannibucau Date: Thu Feb 26 08:46:50 2015 New Revision: 1662384 URL: http://svn.apache.org/r1662384 Log: closing cache* if we created it, means for jcache cdi extension closing if using default resolver
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/CacheResolverFactoryImpl.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=1662384&r1=1662383&r2=1662384&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 08:46:50 2015 @@ -24,6 +24,7 @@ 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.CacheKeyGenerator; import javax.cache.annotation.CacheResolverFactory; @@ -39,14 +40,23 @@ import javax.interceptor.InvocationConte public class CDIJCacheHelper { private static final Logger LOGGER = Logger.getLogger(CDIJCacheHelper.class.getName()); + private static final boolean CLOSE_CACHE = !Boolean.getBoolean("org.apache.commons.jcs.jcache.cdi.skip-close"); - private final CacheResolverFactory defaultCacheResolverFactory = new CacheResolverFactoryImpl(); + 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>(); @Inject private BeanManager beanManager; + @PreDestroy + private void release() { + if (CLOSE_CACHE && defaultCacheResolverFactory != null) + { + defaultCacheResolverFactory.release(); + } + } + public String defaultName(final Method method, final CacheDefaults defaults, final String cacheName) { if (!cacheName.isEmpty()) @@ -155,7 +165,7 @@ public class CDIJCacheHelper return instance(defaultCacheResolverFactory); } } - return defaultCacheResolverFactory; + return defaultCacheResolverFactory(); } public <T> T instance(final Class<T> type) @@ -167,7 +177,7 @@ public class CDIJCacheHelper return (T) defaultCacheKeyGenerator; } if (CacheResolverFactory.class == type) { - return (T) defaultCacheResolverFactory; + return (T) defaultCacheResolverFactory(); } return null; } @@ -191,4 +201,18 @@ public class CDIJCacheHelper } } } + + private CacheResolverFactoryImpl defaultCacheResolverFactory() + { + if (defaultCacheResolverFactory != null) { + return defaultCacheResolverFactory; + } + synchronized (this) { + if (defaultCacheResolverFactory != null) { + return defaultCacheResolverFactory; + } + defaultCacheResolverFactory = new CacheResolverFactoryImpl(); + } + return defaultCacheResolverFactory; + } } Modified: commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResolverFactoryImpl.java URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResolverFactoryImpl.java?rev=1662384&r1=1662383&r2=1662384&view=diff ============================================================================== --- commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResolverFactoryImpl.java (original) +++ commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/cdi/CacheResolverFactoryImpl.java Thu Feb 26 08:46:50 2015 @@ -32,10 +32,11 @@ import java.lang.annotation.Annotation; public class CacheResolverFactoryImpl implements CacheResolverFactory { private final CacheManager cacheManager; + private final CachingProvider provider; public CacheResolverFactoryImpl() { - final CachingProvider provider = Caching.getCachingProvider(); + provider = Caching.getCachingProvider(); cacheManager = provider.getCacheManager(provider.getDefaultURI(), provider.getDefaultClassLoader()); } @@ -71,4 +72,10 @@ public class CacheResolverFactoryImpl im cacheManager.createCache(exceptionCacheName, new MutableConfiguration<Object, Object>().setStoreByValue(false)); return cacheManager.getCache(exceptionCacheName); } + + public void release() + { + cacheManager.close(); + provider.close(); + } }