Author: rmannibucau
Date: Mon Sep  7 16:18:03 2015
New Revision: 1701647

URL: http://svn.apache.org/r1701647
Log:
JCS-152 making easy to override jcache.ccf

Removed:
    commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf
Modified:
    
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCachingManager.java

Modified: 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCachingManager.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCachingManager.java?rev=1701647&r1=1701646&r2=1701647&view=diff
==============================================================================
--- 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCachingManager.java
 (original)
+++ 
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCachingManager.java
 Mon Sep  7 16:18:03 2015
@@ -26,9 +26,12 @@ import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.configuration.Configuration;
 import javax.cache.spi.CachingProvider;
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.net.URL;
+import java.util.Enumeration;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
@@ -39,6 +42,21 @@ import static org.apache.commons.jcs.jca
 public class JCSCachingManager implements CacheManager
 {
     private static final Subsitutor SUBSTITUTOR = Subsitutor.Helper.INSTANCE;
+    private static final String DEFAULT_CONFIG =
+        "jcs.default=DC\n" +
+        
"jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes\n"
 +
+        "jcs.default.cacheattributes.MaxObjects=200001\n" +
+        
"jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache\n"
 +
+        "jcs.default.cacheattributes.UseMemoryShrinker=true\n" +
+        "jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600\n" +
+        "jcs.default.cacheattributes.ShrinkerIntervalSeconds=60\n" +
+        
"jcs.default.elementattributes=org.apache.commons.jcs.engine.ElementAttributes\n"
 +
+        "jcs.default.elementattributes.IsEternal=false\n" +
+        "jcs.default.elementattributes.MaxLife=700\n" +
+        "jcs.default.elementattributes.IdleTime=1800\n" +
+        "jcs.default.elementattributes.IsSpool=true\n" +
+        "jcs.default.elementattributes.IsRemote=true\n" +
+        "jcs.default.elementattributes.IsLateral=true\n";
 
     private static class InternalManager extends CompositeCacheManager
     {
@@ -81,18 +99,58 @@ public class JCSCachingManager implement
 
     private Properties readConfig(final URI uri, final ClassLoader loader, 
final Properties properties) {
         final Properties props = new Properties();
-        InputStream inStream = null;
-        try
-        {
+        try {
             if 
(JCSCachingProvider.DEFAULT_URI.toString().equals(uri.toString()) || 
uri.toURL().getProtocol().equals("jcs"))
             {
-                inStream = loader.getResourceAsStream(uri.getPath());
+
+                final Enumeration<URL> resources = 
loader.getResources(uri.getPath());
+                if (!resources.hasMoreElements()) // default
+                {
+                    props.load(new 
ByteArrayInputStream(DEFAULT_CONFIG.getBytes("UTF-8")));
+                }
+                else
+                {
+                    do
+                    {
+                        addProperties(resources.nextElement(), props);
+                    }
+                    while (resources.hasMoreElements());
+                }
             }
             else
             {
-                inStream = uri.toURL().openStream();
+                props.load(uri.toURL().openStream());
+            }
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+
+        if (properties != null)
+        {
+            props.putAll(properties);
+        }
+
+        for (final Map.Entry<Object, Object> entry : props.entrySet()) {
+            if (entry.getValue() == null)
+            {
+                continue;
+            }
+            final String substitute = 
SUBSTITUTOR.substitute(entry.getValue().toString());
+            if (!substitute.equals(entry.getValue()))
+            {
+                entry.setValue(substitute);
             }
-            props.load(inStream);
+        }
+        return props;
+    }
+
+    private void addProperties(final URL url, final Properties aggregator)
+    {
+        InputStream inStream = null;
+        try
+        {
+            inStream = url.openStream();
+            aggregator.load(inStream);
         }
         catch (final IOException e)
         {
@@ -112,22 +170,6 @@ public class JCSCachingManager implement
                 }
             }
         }
-        if (properties != null)
-        {
-            props.putAll(properties);
-        }
-        for (final Map.Entry<Object, Object> entry : props.entrySet()) {
-            if (entry.getValue() == null)
-            {
-                continue;
-            }
-            final String substitute = 
SUBSTITUTOR.substitute(entry.getValue().toString());
-            if (!substitute.equals(entry.getValue()))
-            {
-                entry.setValue(substitute);
-            }
-        }
-        return props;
     }
 
     private void assertNotClosed()


Reply via email to