Repository: camel Updated Branches: refs/heads/master 9b93ea51a -> 08665fecd
CAMEL-9620 Infinispan: Support IGNORE_RETURN_VALUES for Put/Remove/Replace operations Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5ae721c0 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5ae721c0 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5ae721c0 Branch: refs/heads/master Commit: 5ae721c0c2846b1b5c45da22a2ade5b9185fd55e Parents: 9b93ea5 Author: Tristan Tarrant <ttarr...@redhat.com> Authored: Thu Feb 18 19:51:59 2016 +0100 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Fri Feb 19 09:17:58 2016 +0100 ---------------------------------------------------------------------- components/camel-infinispan/pom.xml | 4 +- .../infinispan/InfinispanConstants.java | 3 +- .../infinispan/InfinispanOperation.java | 46 ++++++++++--- .../component/infinispan/InfinispanUtil.java | 71 ++++++++++++++++++++ 4 files changed, 110 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5ae721c0/components/camel-infinispan/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-infinispan/pom.xml b/components/camel-infinispan/pom.xml index 96c1631..c6e4c07 100644 --- a/components/camel-infinispan/pom.xml +++ b/components/camel-infinispan/pom.xml @@ -42,12 +42,12 @@ </dependency> <dependency> <groupId>org.infinispan</groupId> - <artifactId>infinispan-core</artifactId> + <artifactId>infinispan-embedded</artifactId> <version>${infinispan-version}</version> </dependency> <dependency> <groupId>org.infinispan</groupId> - <artifactId>infinispan-client-hotrod</artifactId> + <artifactId>infinispan-remote</artifactId> <version>${infinispan-version}</version> </dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/5ae721c0/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanConstants.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanConstants.java index 9b82bc5..a6ae8a5 100644 --- a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanConstants.java +++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanConstants.java @@ -23,7 +23,7 @@ public interface InfinispanConstants { String KEY = "CamelInfinispanKey"; String VALUE = "CamelInfinispanValue"; String OLD_VALUE = "CamelInfinispanOldValue"; - String MAP = "CamelInfinispanMap"; + String MAP = "CamelInfinispanMap"; String OPERATION = "CamelInfinispanOperation"; String PUT = "CamelInfinispanOperationPut"; String PUT_ASYNC = "CamelInfinispanOperationPutAsync"; @@ -46,4 +46,5 @@ public interface InfinispanConstants { String LIFESPAN_TIME_UNIT = "CamelInfinispanTimeUnit"; String MAX_IDLE_TIME = "CamelInfinispanMaxIdleTime"; String MAX_IDLE_TIME_UNIT = "CamelInfinispanMaxIdleTimeUnit"; + String IGNORE_RETURN_VALUES = "CamelInfinispanIgnoreReturnValues"; } http://git-wip-us.apache.org/repos/asf/camel/blob/5ae721c0/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 69eb3e8..f4f7184 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 @@ -55,10 +55,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { Object result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -75,10 +78,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { NotifyingFuture result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -97,7 +103,7 @@ public final class InfinispanOperation { 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)) + 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); @@ -116,7 +122,7 @@ public final class InfinispanOperation { 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)) + 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); @@ -133,10 +139,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { Object result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -153,10 +162,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { NotifyingFuture result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -191,6 +203,9 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { Object result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } if (ObjectHelper.isEmpty(getValue(exchange))) { result = cache.remove(getKey(exchange)); } else { @@ -202,6 +217,9 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { NotifyingFuture result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } if (ObjectHelper.isEmpty(getValue(exchange))) { result = cache.removeAsync(getKey(exchange)); } else { @@ -213,10 +231,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { Object result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -224,7 +245,7 @@ public final class InfinispanOperation { result = cache.replace(getKey(exchange), getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit), maxIdle, TimeUnit.valueOf(maxIdleTimeUnit)); } else { result = cache.replace(getKey(exchange), getOldValue(exchange), getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit), maxIdle, TimeUnit.valueOf(maxIdleTimeUnit)); - } + } } else { if (ObjectHelper.isEmpty(getOldValue(exchange))) { result = cache.replace(getKey(exchange), getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit)); @@ -245,10 +266,13 @@ public final class InfinispanOperation { @Override void execute(BasicCache<Object, Object> cache, Exchange exchange) { NotifyingFuture result; + if (!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.IGNORE_RETURN_VALUES))) { + cache = InfinispanUtil.ignoreReturnValuesCache(cache); + } 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)) + 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); @@ -304,11 +328,11 @@ public final class InfinispanOperation { Object getValue(Exchange exchange) { return exchange.getIn().getHeader(InfinispanConstants.VALUE); } - + Object getOldValue(Exchange exchange) { return exchange.getIn().getHeader(InfinispanConstants.OLD_VALUE); } - + Map<? extends Object, ? extends Object> getMap(Exchange exchange) { return (Map<? extends Object, ? extends Object>) exchange.getIn().getHeader(InfinispanConstants.MAP); } http://git-wip-us.apache.org/repos/asf/camel/blob/5ae721c0/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanUtil.java ---------------------------------------------------------------------- diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanUtil.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanUtil.java new file mode 100644 index 0000000..b0713da --- /dev/null +++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanUtil.java @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.infinispan; + +import org.infinispan.Cache; +import org.infinispan.client.hotrod.RemoteCache; +import org.infinispan.client.hotrod.RemoteCacheManager; +import org.infinispan.commons.api.BasicCache; +import org.infinispan.commons.api.BasicCacheContainer; +import org.infinispan.context.Flag; +import org.infinispan.manager.EmbeddedCacheManager; + +public class InfinispanUtil { + private InfinispanUtil() { + } + + public static boolean isEmbedded(BasicCacheContainer container) { + try { + return container instanceof EmbeddedCacheManager; + } catch (Throwable e) { + return false; + } + } + + public static <K, V> boolean isEmbedded(BasicCache<K, V> cache) { + try { + return cache instanceof Cache; + } catch (Throwable e) { + return false; + } + } + + public static boolean isRemote(BasicCacheContainer container) { + try { + return container instanceof RemoteCacheManager; + } catch (Throwable e) { + return false; + } + } + + public static <K, V> boolean isRemote(BasicCache<K, V> cache) { + try { + return cache instanceof RemoteCache; + } catch (Throwable e) { + return false; + } + } + + public static <K, V> BasicCache<K, V> ignoreReturnValuesCache(BasicCache<K, V> cache) { + if (isEmbedded(cache)) { + return ((Cache<K, V>) cache).getAdvancedCache().withFlags(Flag.IGNORE_RETURN_VALUES); + } else { + return cache; + } + } + +}