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() {