Repository: camel Updated Branches: refs/heads/master f5ae492ac -> 0d3f461f6
CAMEL-10838: camel-cache - Create a better body replacer processor Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bdf4aaa6 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bdf4aaa6 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bdf4aaa6 Branch: refs/heads/master Commit: bdf4aaa6b1a6ab6d7a2b7cefc2713cd9605ccaf9 Parents: f5ae492 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Feb 15 21:51:37 2017 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Feb 15 21:51:37 2017 +0100 ---------------------------------------------------------------------- .../cache/CacheBasedMessageBodyReplacer.java | 46 ++++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/bdf4aaa6/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java ---------------------------------------------------------------------- diff --git a/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java b/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java index 64e80a1..7a33c61 100755 --- a/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java +++ b/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java @@ -20,20 +20,26 @@ import net.sf.ehcache.CacheManager; import net.sf.ehcache.Ehcache; import org.apache.camel.Exchange; +import org.apache.camel.Expression; import org.apache.camel.Processor; +import org.apache.camel.Service; +import org.apache.camel.builder.ExpressionBuilder; import org.apache.camel.component.cache.CacheConstants; import org.apache.camel.component.cache.DefaultCacheManagerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class CacheBasedMessageBodyReplacer extends CacheValidate implements Processor { +public class CacheBasedMessageBodyReplacer extends CacheValidate implements Processor, Service { private static final Logger LOG = LoggerFactory.getLogger(CacheBasedMessageBodyReplacer.class); - CacheManager cacheManager; - Ehcache cache; + private CacheManager cacheManager; private String cacheName; - private String key; + private Expression key; public CacheBasedMessageBodyReplacer(String cacheName, String key) { + this(cacheName, ExpressionBuilder.constantExpression(key)); + } + + public CacheBasedMessageBodyReplacer(String cacheName, Expression key) { if (cacheName.contains("cache://")) { this.setCacheName(cacheName.replace("cache://", "")); } else { @@ -43,16 +49,14 @@ public class CacheBasedMessageBodyReplacer extends CacheValidate implements Proc } public void process(Exchange exchange) throws Exception { - // Cache the buffer to the specified Cache against the specified key - cacheManager = new DefaultCacheManagerFactory().getInstance(); + String cacheKey = key.evaluate(exchange, String.class); - if (isValid(cacheManager, cacheName, key)) { - cache = cacheManager.getCache(cacheName); - LOG.debug("Replacing Message Body from CacheName {} for key {}", cacheName, key); - exchange.getIn().setHeader(CacheConstants.CACHE_KEY, key); - exchange.getIn().setBody(cache.get(key).getObjectValue()); + if (isValid(cacheManager, cacheName, cacheKey)) { + Ehcache cache = cacheManager.getCache(cacheName); + LOG.debug("Replacing Message Body from CacheName {} for key {}", cacheName, cacheKey); + exchange.getIn().setHeader(CacheConstants.CACHE_KEY, cacheKey); + exchange.getIn().setBody(cache.get(cacheKey).getObjectValue()); } - } public String getCacheName() { @@ -63,12 +67,28 @@ public class CacheBasedMessageBodyReplacer extends CacheValidate implements Proc this.cacheName = cacheName; } - public String getKey() { + public Expression getKey() { return key; } public void setKey(String key) { + this.key = ExpressionBuilder.constantExpression(key); + } + + public void setKey(Expression key) { this.key = key; } + @Override + public void start() throws Exception { + // Cache the buffer to the specified Cache against the specified key + if (cacheManager == null) { + cacheManager = new DefaultCacheManagerFactory().getInstance(); + } + } + + @Override + public void stop() throws Exception { + // noop + } }