You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/07/08 08:39:17 UTC

svn commit: r1358697 - in /camel/trunk/components/camel-cache/src: main/java/org/apache/camel/component/cache/ test/java/org/apache/camel/component/cache/

Author: davsclaus
Date: Sun Jul  8 06:39:17 2012
New Revision: 1358697

URL: http://svn.apache.org/viewvc?rev=1358697&view=rev
Log:
CAMEL-5226: Added headers to set ttl,eternal etc. when adding/updating to cache. Thanks to Mark Ford for the patch.

Modified:
    camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
    camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
    camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java

Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java?rev=1358697&r1=1358696&r2=1358697&view=diff
==============================================================================
--- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java (original)
+++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java Sun Jul  8 06:39:17 2012
@@ -25,6 +25,10 @@ public interface CacheConstants {
     String CACHE_KEY = CACHE_HEADER_PREFIX + "Key";
     String CACHE_ELEMENT_WAS_FOUND = CACHE_HEADER_PREFIX + "ElementWasFound";
 
+    String CACHE_ELEMENT_EXPIRY_TTL = "TimeToLive";
+    String CACHE_ELEMENT_EXPIRY_IDLE = "TimeToIdle";
+    String CACHE_ELEMENT_EXPIRY_ETERNAL = "Eternal";
+
     String CACHE_OPERATION_URL_ADD = "Add";
     String CACHE_OPERATION_URL_UPDATE = "Update";
     String CACHE_OPERATION_URL_DELETE = "Delete";

Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java?rev=1358697&r1=1358696&r2=1358697&view=diff
==============================================================================
--- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java (original)
+++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java Sun Jul  8 06:39:17 2012
@@ -77,16 +77,15 @@ public class CacheProducer extends Defau
     }
 
     private void performCacheOperation(Exchange exchange, String operation, String key) throws Exception {
-        Object element;
 
         if (checkIsEqual(operation, CacheConstants.CACHE_OPERATION_URL_ADD)) {
             LOG.debug("Adding an element with key {} into the Cache", key);
-            element = createElementFromBody(exchange, CacheConstants.CACHE_OPERATION_ADD);
-            cache.put(new Element(key, element));
+            Element element = createElementFromBody(key, exchange, CacheConstants.CACHE_OPERATION_ADD);
+            cache.put(element);
         } else if (checkIsEqual(operation, CacheConstants.CACHE_OPERATION_URL_UPDATE)) {
             LOG.debug("Updating an element with key {} into the Cache", key);
-            element = createElementFromBody(exchange, CacheConstants.CACHE_OPERATION_UPDATE);
-            cache.put(new Element(key, element));
+            Element element = createElementFromBody(key, exchange, CacheConstants.CACHE_OPERATION_UPDATE);
+            cache.put(element);
         } else if (checkIsEqual(operation, CacheConstants.CACHE_OPERATION_URL_DELETEALL)) {
             LOG.debug("Deleting All elements from the Cache");
             cache.removeAll();
@@ -119,18 +118,32 @@ public class CacheProducer extends Defau
     }
 
 
-    private Object createElementFromBody(Exchange exchange, String cacheOperation) throws NoTypeConversionAvailableException {
-        Object element;
+    private Element createElementFromBody(String key, Exchange exchange, String cacheOperation) throws NoTypeConversionAvailableException {
+        Element element;
         Object body = exchange.getIn().getBody();
         if (body == null) {
             throw new CacheException("Body cannot be null for operation " + cacheOperation);
         } else if (body instanceof Serializable) {
-            element = body;
+            element = new Element(key, body);
         } else {
             InputStream is = exchange.getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, body);
             // Read InputStream into a byte[] buffer
-            element = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, is);
+            element = new Element(key, exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, is));
         }
+        // set overrides for the cache expiration and such
+        final Integer ttl = exchange.getIn().getHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_TTL, Integer.class);
+        if (ttl != null) {
+            element.setTimeToLive(ttl);
+        }
+        final Integer idle = exchange.getIn().getHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_IDLE, Integer.class);
+        if (idle != null) {
+            element.setTimeToIdle(idle);
+        }
+        final Boolean flag = exchange.getIn().getHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_ETERNAL, Boolean.class);
+        if (flag != null) {
+            element.setEternal(flag);
+        }
+
         return element;
     }
 

Modified: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java?rev=1358697&r1=1358696&r2=1358697&view=diff
==============================================================================
--- camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java (original)
+++ camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java Sun Jul  8 06:39:17 2012
@@ -20,7 +20,9 @@ package org.apache.camel.component.cache
 import java.io.FileInputStream;
 import java.io.InputStream;
 
+import net.sf.ehcache.Cache;
 import net.sf.ehcache.CacheException;
+import net.sf.ehcache.Element;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -30,9 +32,7 @@ import org.apache.camel.component.mock.M
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.util.IOHelper;
-
 import org.junit.Test;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -133,6 +133,66 @@ public class CacheProducerTest extends C
     }
 
     @Test
+    public void testAddingDataElementEternal() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
+                        setHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_ETERNAL, constant(Boolean.TRUE)).
+                        to("cache://TestCache1");
+            }
+        });
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Add Test---------------");
+        sendOriginalFile();
+        Element element = fetchElement("Ralph_Waldo_Emerson");
+        assertTrue(element.isEternal());
+    }
+
+    @Test
+    public void testAddingDataElementIdle() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
+                        setHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_IDLE, constant(24)).
+                        to("cache://TestCache1");
+            }
+        });
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Add Test---------------");
+        sendOriginalFile();
+        Element element = fetchElement("Ralph_Waldo_Emerson");
+        assertEquals(24, element.getTimeToIdle());
+    }
+
+    @Test
+    public void testAddingDataElementTimeToLive() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
+                        setHeader(CacheConstants.CACHE_ELEMENT_EXPIRY_TTL, constant(42)).
+                        to("cache://TestCache1");
+            }
+        });
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Add Test---------------");
+        sendOriginalFile();
+        Element element = fetchElement("Ralph_Waldo_Emerson");
+        assertEquals(42, element.getTimeToLive());
+    }
+
+    private Element fetchElement(String key) {
+        CacheEndpoint ep = context.getEndpoint("cache://TestCache1", CacheEndpoint.class);
+        Cache cache = ep.getCacheManagerFactory().getInstance().getCache("TestCache1");
+        return cache.get(key);
+    }
+
+    @Test
     public void testAddingDataToCacheDoesFailOnEmptyBody() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {