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 2015/02/26 09:46:51 UTC

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

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();
+    }
 }