Repository: camel Updated Branches: refs/heads/master 8af7e6517 -> 1c20c435e
CAMEL-8733 Camel-Hazelcast: Add the possibility to specify a ttl related to a specific key Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1c20c435 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1c20c435 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1c20c435 Branch: refs/heads/master Commit: 1c20c435e84a43b24ab69138165be6c06128b1c6 Parents: 8af7e65 Author: Andrea Cosentino <anco...@gmail.com> Authored: Sun May 3 10:34:19 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Sun May 3 10:34:19 2015 +0200 ---------------------------------------------------------------------- .../component/hazelcast/HazelcastConstants.java | 4 +++- .../hazelcast/map/HazelcastMapProducer.java | 25 +++++++++++++++++++- .../hazelcast/HazelcastMapProducerTest.java | 11 +++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/1c20c435/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java index dcdcf6f..ecc63e3 100644 --- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java +++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java @@ -36,6 +36,8 @@ public final class HazelcastConstants { public static final String OBJECT_ID = "CamelHazelcastObjectId"; public static final String OBJECT_POS = "CamelHazelcastObjectIndex"; public static final String OBJECT_VALUE = "CamelHazelcastObjectValue"; + public static final String TTL_VALUE = "CamelHazelcastObjectTtlValue"; + public static final String TTL_UNIT = "CamelHazelcastObjectTtlUnit"; public static final String QUERY = "CamelHazelcastQuery"; /* @@ -49,7 +51,7 @@ public final class HazelcastConstants { public static final String CACHE_NAME = "CamelHazelcastCacheName"; public static final String CACHE_TYPE = "CamelHazelcastCacheType"; - // actions (put, delete, get, getAll, replace, update, clear) + // actions (put, delete, get, getAll, update, clear) public static final String OPERATION = "CamelHazelcastOperationType"; public static final int PUT_OPERATION = 1; public static final int DELETE_OPERATION = 2; http://git-wip-us.apache.org/repos/asf/camel/blob/1c20c435/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java index dfc917c..6d0921d 100644 --- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java +++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java @@ -19,6 +19,7 @@ package org.apache.camel.component.hazelcast.map; import java.util.Collection; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; @@ -46,6 +47,8 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer { // get header parameters Object oid = null; Object ovalue = null; + Object ttl = null; + Object ttlUnit = null; String query = null; if (headers.containsKey(HazelcastConstants.OBJECT_ID)) { @@ -56,6 +59,14 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer { ovalue = headers.get(HazelcastConstants.OBJECT_VALUE); } + if (headers.containsKey(HazelcastConstants.TTL_VALUE)) { + ttl = headers.get(HazelcastConstants.TTL_VALUE); + } + + if (headers.containsKey(HazelcastConstants.TTL_UNIT)) { + ttlUnit = headers.get(HazelcastConstants.TTL_UNIT); + } + if (headers.containsKey(HazelcastConstants.QUERY)) { query = (String) headers.get(HazelcastConstants.QUERY); } @@ -64,7 +75,11 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer { switch (operation) { case HazelcastConstants.PUT_OPERATION: - this.put(oid, exchange); + if (ObjectHelper.isEmpty(ttl) && ObjectHelper.isEmpty(ttlUnit)) { + this.put(oid, exchange); + } else { + this.put(oid, ttl, ttlUnit, exchange); + } break; case HazelcastConstants.GET_OPERATION: @@ -168,6 +183,14 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer { } /** + * put a new object into the cache with a specific time to live + */ + private void put(Object oid, Object ttl, Object ttlUnit, Exchange exchange) { + Object body = exchange.getIn().getBody(); + this.cache.put(oid, body, (long) ttl, (TimeUnit) ttlUnit); + } + + /** * Clear all the entries */ private void clear(Exchange exchange) { http://git-wip-us.apache.org/repos/asf/camel/blob/1c20c435/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java index e820420..2879843 100644 --- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java +++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.TimeUnit; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; @@ -82,6 +83,16 @@ public class HazelcastMapProducerTest extends HazelcastCamelTestSupport implemen } @Test + public void testPutWithTTL() throws InterruptedException { + Map<String, Object> headers = new HashMap<String, Object>(); + headers.put(HazelcastConstants.OBJECT_ID, "4711"); + headers.put(HazelcastConstants.TTL_VALUE, new Long(1)); + headers.put(HazelcastConstants.TTL_UNIT, TimeUnit.MINUTES); + template.sendBodyAndHeaders("direct:put", "test", headers); + verify(map).put("4711", "test", 1, TimeUnit.MINUTES); + } + + @Test public void testUpdate() { template.sendBodyAndHeader("direct:update", "my-fooo", HazelcastConstants.OBJECT_ID, "4711"); verify(map).lock("4711");