Repository: camel
Updated Branches:
  refs/heads/master c98e63d20 -> 294c169f6


CAMEL-11018: camel-ehcache: make it easy to create temporary caches


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/294c169f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/294c169f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/294c169f

Branch: refs/heads/master
Commit: 294c169f6d66225574ff3491d2d2dd53979cc82f
Parents: c98e63d
Author: lburgazzoli <lburgazz...@gmail.com>
Authored: Wed Mar 15 16:27:12 2017 +0100
Committer: lburgazzoli <lburgazz...@gmail.com>
Committed: Wed Mar 15 16:29:16 2017 +0100

----------------------------------------------------------------------
 .../component/ehcache/EhcacheComponent.java     |  9 +++---
 .../component/ehcache/EhcacheEndpoint.java      |  1 -
 .../camel/component/ehcache/EhcacheManager.java | 29 +++++++++++++++--
 .../ehcache/EhcacheConfigurationTest.java       | 33 ++++++++++++++++----
 4 files changed, 57 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/294c169f/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java
 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java
index dd1e0a6..bccc39e 100644
--- 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java
+++ 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java
@@ -20,19 +20,18 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-import org.apache.camel.impl.UriEndpointComponent;
+import org.apache.camel.impl.DefaultComponent;
 
 /**
- * Represents the component that manages {@link EhcacheEndpoint}.
+ * Represents the component that manages {@link DefaultComponent}.
  */
-public class EhcacheComponent extends UriEndpointComponent {
+public class EhcacheComponent extends DefaultComponent {
     
     public EhcacheComponent() {
-        super(EhcacheEndpoint.class);
     }
 
     public EhcacheComponent(CamelContext context) {
-        super(context, EhcacheEndpoint.class);
+        super(context);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/294c169f/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java
 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java
index 9f091d7..ac7bd7f 100644
--- 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java
+++ 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java
@@ -84,5 +84,4 @@ public class EhcacheEndpoint extends DefaultEndpoint {
     EhcacheConfiguration getConfiguration() {
         return configuration;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/294c169f/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java
 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java
index 091af93..be56d06 100644
--- 
a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java
+++ 
b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java
@@ -17,11 +17,16 @@
 package org.apache.camel.component.ehcache;
 
 import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.camel.Service;
 import org.apache.camel.util.ObjectHelper;
 import org.ehcache.Cache;
 import org.ehcache.CacheManager;
+import org.ehcache.UserManagedCache;
+import org.ehcache.config.CacheConfiguration;
+import org.ehcache.config.builders.UserManagedCacheBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -30,6 +35,8 @@ public class EhcacheManager implements Service {
 
     private final EhcacheConfiguration configuration;
     private final CacheManager cacheManager;
+    private final ConcurrentMap<String, UserManagedCache<?, ?>> userCaches;
+
     private final boolean managed;
 
     public EhcacheManager(EhcacheConfiguration configuration) throws 
IOException {
@@ -46,6 +53,7 @@ public class EhcacheManager implements Service {
 
     private EhcacheManager(CacheManager cacheManager, boolean managed, 
EhcacheConfiguration configuration) {
         this.cacheManager = cacheManager;
+        this.userCaches = new ConcurrentHashMap<>();
         this.managed = managed;
         this.configuration = configuration;
 
@@ -53,23 +61,38 @@ public class EhcacheManager implements Service {
     }
 
     @Override
-    public void start() throws Exception {
+    public synchronized void start() throws Exception {
         if (managed) {
             cacheManager.init();
         }
     }
 
     @Override
-    public void stop() throws Exception {
+    public synchronized void stop() throws Exception {
         if (managed) {
             cacheManager.close();
         }
+
+        // Clean up any User managed cache
+        userCaches.values().forEach(UserManagedCache::close);
     }
 
+    @SuppressWarnings("unchecked")
     public <K, V> Cache<K, V> getCache(String name, Class<K> keyType, Class<V> 
valueType) throws Exception {
         Cache<K, V> cache = cacheManager.getCache(name, keyType, valueType);
         if (cache == null && configuration != null && 
configuration.isCreateCacheIfNotExist()) {
-            cache = cacheManager.createCache(name, 
configuration.getMandatoryConfiguration());
+            CacheConfiguration<K, V> cacheConfiguration = 
configuration.getConfiguration();
+
+            if (cacheConfiguration != null) {
+                cache = cacheManager.createCache(name, cacheConfiguration);
+            } else {
+                // If a cache configuration is not provided, create a User 
Managed
+                // Cache
+                cache = (Cache<K, V>)userCaches.computeIfAbsent(
+                    name,
+                    key -> 
UserManagedCacheBuilder.newUserManagedCacheBuilder(keyType, 
valueType).build(true)
+                );
+            }
         }
 
         return cache;

http://git-wip-us.apache.org/repos/asf/camel/blob/294c169f/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java
 
b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java
index 8a77fff..b275869 100644
--- 
a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java
+++ 
b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.ehcache.Cache;
+import org.ehcache.UserManagedCache;
 import org.ehcache.config.ResourcePools;
 import org.ehcache.config.ResourceType;
 import org.ehcache.config.SizedResourcePool;
@@ -32,10 +33,12 @@ import org.ehcache.config.units.MemoryUnit;
 import org.junit.Test;
 
 public class EhcacheConfigurationTest extends CamelTestSupport {
-    @EndpointInject(uri = 
"ehcache://myProgrammaticCacheConf?configuration=#myProgrammaticConfiguration")
-    private EhcacheEndpoint ehcacheConf;
-    @EndpointInject(uri = 
"ehcache://myFileCacheConf?keyType=java.lang.String&valueType=java.lang.String&configUri=classpath:ehcache/ehcache-file-config.xml")
+    @EndpointInject(uri = 
"ehcache:myProgrammaticCacheConf?configuration=#myProgrammaticConfiguration")
+    private EhcacheEndpoint ehcacheProgrammaticConf;
+    @EndpointInject(uri = 
"ehcache:myFileCacheConf?keyType=java.lang.String&valueType=java.lang.String&configUri=classpath:ehcache/ehcache-file-config.xml")
     private EhcacheEndpoint ehcacheFileConf;
+    @EndpointInject(uri = "ehcache:myUserCacheConf")
+    private EhcacheEndpoint ehcacheUserConf;
 
     @Override
     protected JndiRegistry createRegistry() throws Exception {
@@ -60,7 +63,7 @@ public class EhcacheConfigurationTest extends 
CamelTestSupport {
 
     @Test
     public void testProgrammaticConfiguration() throws Exception {
-        Cache<String, String> cache = getCache(ehcacheConf, 
"myProgrammaticCacheConf");
+        Cache<String, String> cache = getCache(ehcacheProgrammaticConf, 
"myProgrammaticCacheConf");
         ResourcePools pools = 
cache.getRuntimeConfiguration().getResourcePools();
 
         SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP);
@@ -85,6 +88,21 @@ public class EhcacheConfigurationTest extends 
CamelTestSupport {
         assertEquals(EntryUnit.ENTRIES, h.getUnit());
     }
 
+    @Test
+    public void testUserConfiguration() throws Exception {
+        fluentTemplate()
+            .withHeader(EhcacheConstants.ACTION, EhcacheConstants.ACTION_PUT)
+            .withHeader(EhcacheConstants.KEY, "user-key")
+            .withBody("user-val")
+            .to("direct:ehcacheUserConf")
+            .send();
+
+        Cache<Object, Object> cache = 
ehcacheUserConf.getManager().getCache("myUserCacheConf", Object.class, 
Object.class);
+
+        assertTrue(cache instanceof UserManagedCache);
+        assertEquals("user-val", cache.get("user-key"));
+    }
+
     protected Cache<String, String> getCache(EhcacheEndpoint endpoint, String 
cacheName) throws Exception {
         return endpoint.getManager().getCache(cacheName, String.class, 
String.class);
     }
@@ -97,9 +115,12 @@ public class EhcacheConfigurationTest extends 
CamelTestSupport {
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
-                from("direct://start")
-                    //.to(ehcacheConf)
+                from("direct:ehcacheProgrammaticConf")
+                    .to(ehcacheProgrammaticConf);
+                from("direct:ehcacheFileConf")
                     .to(ehcacheFileConf);
+                from("direct:ehcacheUserConf")
+                    .to(ehcacheUserConf);
             }
         };
     }

Reply via email to