Repository: camel Updated Branches: refs/heads/master b5f05a366 -> 18dec0331
Resolve CAMEL-8686 Camel-Infinispan Replace operation can use options Lifespan and Max Idle Time Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/18dec033 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/18dec033 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/18dec033 Branch: refs/heads/master Commit: 18dec0331f9e06d842032b6be1eeb3d4e5094bc6 Parents: b5f05a3 Author: ancosen <anco...@gmail.com> Authored: Wed Apr 22 17:17:56 2015 +0200 Committer: ancosen <anco...@gmail.com> Committed: Wed Apr 22 17:17:56 2015 +0200 ---------------------------------------------------------------------- .../infinispan/InfinispanOperation.java | 16 ++++- .../infinispan/InfinispanProducerTest.java | 63 +++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/18dec033/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java ---------------------------------------------------------------------- diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java index e53c715..7cd5a2a 100644 --- a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java +++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java @@ -139,7 +139,21 @@ public class InfinispanOperation { }, REPLACE { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { - Object result = cache.replace(getKey(exchange), getValue(exchange)); + Object result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME)) && !ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME_UNIT))) { + long lifespan = exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME, long.class); + String timeUnit = exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, String.class); + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME)) + && !ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT))) { + long maxIdle = exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME, long.class); + String maxIdleTimeUnit = exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT, String.class); + result = cache.replace(getKey(exchange), getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit), maxIdle, TimeUnit.valueOf(maxIdleTimeUnit)); + } else { + result = cache.replace(getKey(exchange), getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit)); + } + } else { + result = cache.replace(getKey(exchange), getValue(exchange)); + } setResult(result, exchange); } }, CLEAR { http://git-wip-us.apache.org/repos/asf/camel/blob/18dec033/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java index 26d6d9e..ca38e2b 100644 --- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java +++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java @@ -142,7 +142,6 @@ public class InfinispanProducerTest extends InfinispanTestSupport { }); assertEquals(currentCache().size(), 2); - Object value = currentCache().get(KEY_ONE); Thread.sleep(10000); @@ -346,6 +345,68 @@ public class InfinispanProducerTest extends InfinispanTestSupport { assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class), VALUE_ONE); assertEquals(currentCache().get(KEY_ONE), VALUE_TWO); } + + @Test + public void replaceAValueByKeyWithLifespan() throws Exception { + currentCache().put(KEY_ONE, VALUE_ONE); + + Exchange exchange = template.request("direct:replace", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE); + exchange.getIn().setHeader(InfinispanConstants.VALUE, VALUE_TWO); + exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME, new Long(LIFESPAN_TIME)); + exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, TimeUnit.SECONDS.toString()); + exchange.getIn().setHeader(InfinispanConstants.OPERATION, InfinispanConstants.REPLACE); + } + }); + + assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class), VALUE_ONE); + assertEquals(currentCache().get(KEY_ONE), VALUE_TWO); + + Thread.sleep(LIFESPAN_TIME * 1000); + + exchange = template.send("direct:get", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE); + } + }); + String resultGet = exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class); + assertEquals(null, resultGet); + } + + @Test + public void replaceAValueByKeyWithLifespanAndMaxIdleTime() throws Exception { + currentCache().put(KEY_ONE, VALUE_ONE); + + Exchange exchange = template.request("direct:replace", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE); + exchange.getIn().setHeader(InfinispanConstants.VALUE, VALUE_TWO); + exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME, new Long(LIFESPAN_FOR_MAX_IDLE)); + exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, TimeUnit.SECONDS.toString()); + exchange.getIn().setHeader(InfinispanConstants.MAX_IDLE_TIME, new Long(MAX_IDLE_TIME)); + exchange.getIn().setHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT, TimeUnit.SECONDS.toString()); + exchange.getIn().setHeader(InfinispanConstants.OPERATION, InfinispanConstants.REPLACE); + } + }); + + assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class), VALUE_ONE); + assertEquals(currentCache().get(KEY_ONE), VALUE_TWO); + + Thread.sleep(10000); + + exchange = template.send("direct:get", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE); + } + }); + String resultGet = exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class); + assertEquals(null, resultGet); + } @Test public void deletesExistingValueByKey() throws Exception {