Author: ningjiang Date: Thu May 5 08:28:08 2011 New Revision: 1099711 URL: http://svn.apache.org/viewvc?rev=1099711&view=rev Log: CAMEL-3867 improve ehcache configuration by reference RegisteredEventListeners and CacheLoaders
Added: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java (contents, props changed) - copied, changed from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java (contents, props changed) - copied, changed from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java (contents, props changed) - copied, changed from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java (with props) camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java (with props) Removed: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java Thu May 5 08:28:08 2011 @@ -39,7 +39,7 @@ public class CacheComponent extends Defa } @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "rawtypes" }) protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { // must use copy as each endpoint can have different options ObjectHelper.notNull(configuration, "configuration"); Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java Thu May 5 08:28:08 2011 @@ -20,6 +20,7 @@ import java.net.URI; import java.util.Map; import net.sf.ehcache.store.MemoryStoreEvictionPolicy; + import org.apache.camel.RuntimeCamelException; import org.apache.camel.util.URISupport; @@ -34,6 +35,8 @@ public class CacheConfiguration implemen private long timeToIdleSeconds = 300; private boolean diskPersistent; private long diskExpiryThreadIntervalSeconds; + private CacheEventListenerRegistry eventListenerRegistry = new CacheEventListenerRegistry(); + private CacheLoaderRegistry cacheLoaderRegistry = new CacheLoaderRegistry(); public CacheConfiguration() { } @@ -174,5 +177,21 @@ public class CacheConfiguration implemen public void setDiskExpiryThreadIntervalSeconds(long diskExpiryThreadIntervalSeconds) { this.diskExpiryThreadIntervalSeconds = diskExpiryThreadIntervalSeconds; } - + + public void setEventListenerRegistry(CacheEventListenerRegistry eventListenerRegistry) { + this.eventListenerRegistry = eventListenerRegistry; + } + + public CacheEventListenerRegistry getEventListenerRegistry() { + return eventListenerRegistry; + } + + public void setCacheLoaderRegistry(CacheLoaderRegistry cacheLoaderRegistry) { + this.cacheLoaderRegistry = cacheLoaderRegistry; + } + + public CacheLoaderRegistry getCacheLoaderRegistry() { + return cacheLoaderRegistry; + } + } Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java Thu May 5 08:28:08 2011 @@ -16,22 +16,13 @@ */ package org.apache.camel.component.cache; -import net.sf.ehcache.Cache; -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.Ehcache; - import org.apache.camel.Endpoint; import org.apache.camel.Processor; import org.apache.camel.impl.DefaultConsumer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class CacheConsumer extends DefaultConsumer { - private static final transient Logger LOG = LoggerFactory.getLogger(CacheConsumer.class); private CacheConfiguration config; - private Ehcache cache; - private CacheManager cacheManager; public CacheConsumer(Endpoint endpoint, Processor processor, CacheConfiguration config) { super(endpoint, processor); @@ -45,47 +36,17 @@ public class CacheConsumer extends Defau } @Override - protected void doStop() throws Exception { - removeConsumerCacheConnection(); - super.doStop(); - } - - @Override public CacheEndpoint getEndpoint() { return (CacheEndpoint) super.getEndpoint(); } - + protected void createConsumerCacheConnection() { - cacheManager = getEndpoint().getCacheManagerFactory().instantiateCacheManager(); - CacheEventListener cacheEventListener = new CacheEventListenerFactory().createCacheEventListener(null); + CacheEventListener cacheEventListener = new CacheEventListener(); cacheEventListener.setCacheConsumer(this); - if (cacheManager.cacheExists(config.getCacheName())) { - cache = cacheManager.getCache(config.getCacheName()); - cache.getCacheEventNotificationService().registerListener(cacheEventListener); - } else { - cache = new Cache(config.getCacheName(), - config.getMaxElementsInMemory(), - config.getMemoryStoreEvictionPolicy(), - config.isOverflowToDisk(), - config.getDiskStorePath(), - config.isEternal(), - config.getTimeToLiveSeconds(), - config.getTimeToIdleSeconds(), - config.isDiskPersistent(), - config.getDiskExpiryThreadIntervalSeconds(), - null); - cache.getCacheEventNotificationService().registerListener(cacheEventListener); - cacheManager.addCache(cache); - - if (LOG.isDebugEnabled()) { - LOG.debug("Added a new cache: " + cache.getName()); - } - } - } - - protected void removeConsumerCacheConnection() { - cacheManager.removeCache(config.getCacheName()); + config.getEventListenerRegistry().addCacheEventListener(cacheEventListener); + + getEndpoint().initializeCache(); } } Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java Thu May 5 08:28:08 2011 @@ -16,6 +16,11 @@ */ package org.apache.camel.component.cache; +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Ehcache; +import net.sf.ehcache.event.CacheEventListener; + import org.apache.camel.Component; import org.apache.camel.Consumer; import org.apache.camel.Exchange; @@ -26,16 +31,19 @@ import org.apache.camel.impl.DefaultEndp import org.apache.camel.impl.DefaultExchange; import org.apache.camel.impl.DefaultMessage; import org.apache.camel.util.ObjectHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CacheEndpoint extends DefaultEndpoint { + private static final transient Logger LOG = LoggerFactory.getLogger(CacheEndpoint.class); private CacheConfiguration config; private CacheManagerFactory cacheManagerFactory; public CacheEndpoint() { } - public CacheEndpoint(String endpointUri, Component component, CacheConfiguration config, - CacheManagerFactory cacheManagerFactory) { + public CacheEndpoint(String endpointUri, Component component, + CacheConfiguration config, CacheManagerFactory cacheManagerFactory) { super(endpointUri, component); this.config = config; this.cacheManagerFactory = cacheManagerFactory; @@ -73,8 +81,10 @@ public class CacheEndpoint extends Defau this.cacheManagerFactory = cacheManagerFactory; } - public Exchange createCacheExchange(String operation, String key, Object value) { - Exchange exchange = new DefaultExchange(this.getCamelContext(), getExchangePattern()); + public Exchange createCacheExchange(String operation, String key, + Object value) { + Exchange exchange = new DefaultExchange(this.getCamelContext(), + getExchangePattern()); Message message = new DefaultMessage(); message.setHeader(CacheConstants.CACHE_OPERATION, operation); message.setHeader(CacheConstants.CACHE_KEY, key); @@ -82,5 +92,58 @@ public class CacheEndpoint extends Defau exchange.setIn(message); return exchange; } - + + /** + * Returns {@link Cache} instance or create new one if not exists. + * + * @return {@link Cache} + */ + public Ehcache initializeCache() { + CacheManager cacheManager = getCacheManagerFactory().getInstance(); + Cache cache; + if (cacheManager.cacheExists(config.getCacheName())) { + if (LOG.isTraceEnabled()) { + LOG.trace("Found an existing cache: {}", config.getCacheName()); + LOG.trace("Cache {} currently contains {} elements", + config.getCacheName(), + cacheManager.getCache(config.getCacheName()).getSize()); + } + cache = cacheManager.getCache(config.getCacheName()); + } else { + cache = new Cache(config.getCacheName(), + config.getMaxElementsInMemory(), + config.getMemoryStoreEvictionPolicy(), + config.isOverflowToDisk(), + config.getDiskStorePath(), + config.isEternal(), + config.getTimeToLiveSeconds(), + config.getTimeToIdleSeconds(), + config.isDiskPersistent(), + config.getDiskExpiryThreadIntervalSeconds(), + null); + + for (CacheEventListener listener : config.getEventListenerRegistry().getEventListeners()) { + cache.getCacheEventNotificationService().registerListener(listener); + } + + for (CacheLoaderWrapper loader : config.getCacheLoaderRegistry().getCacheLoaders()) { + loader.init(cache); + cache.registerCacheLoader(loader); + } + + cacheManager.addCache(cache); + + if (LOG.isDebugEnabled()) { + LOG.debug("Added a new cache: " + cache.getName()); + } + } + + return cache; + } + + @Override + public void stop() { + CacheManager cacheManager = getCacheManagerFactory().getInstance(); + cacheManager.removeCache(config.getCacheName()); + } } Copied: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java (from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java?p2=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java&p1=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java&r1=1099648&r2=1099711&rev=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java Thu May 5 08:28:08 2011 @@ -16,12 +16,34 @@ */ package org.apache.camel.component.cache; -import java.util.Properties; +import java.util.ArrayList; +import java.util.List; -public class CacheEventListenerFactory extends net.sf.ehcache.event.CacheEventListenerFactory { +import net.sf.ehcache.event.CacheEventListener; - public CacheEventListener createCacheEventListener(Properties properties) { - return new CacheEventListener(); +public class CacheEventListenerRegistry { + + private List<CacheEventListener> eventListeners; + + public CacheEventListenerRegistry() { + } + + public CacheEventListenerRegistry(List<CacheEventListener> eventListeners) { + this.eventListeners = eventListeners; + } + + public void addCacheEventListener(CacheEventListener listener) { + getEventListeners().add(listener); + } + + public synchronized List<CacheEventListener> getEventListeners() { + if (eventListeners == null) { + eventListeners = new ArrayList<CacheEventListener>(); + } + return eventListeners; + } + + public int size() { + return eventListeners.size(); } - } Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerRegistry.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Copied: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java (from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java?p2=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java&p1=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java&r1=1099648&r2=1099711&rev=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java Thu May 5 08:28:08 2011 @@ -16,12 +16,32 @@ */ package org.apache.camel.component.cache; -import java.util.Properties; +import java.util.ArrayList; +import java.util.List; -public class CacheEventListenerFactory extends net.sf.ehcache.event.CacheEventListenerFactory { +public class CacheLoaderRegistry { - public CacheEventListener createCacheEventListener(Properties properties) { - return new CacheEventListener(); + private List<CacheLoaderWrapper> registeredCacheLoaders; + + public CacheLoaderRegistry() { + } + + public CacheLoaderRegistry(List<CacheLoaderWrapper> registeredCacheLoaders) { + this.registeredCacheLoaders = registeredCacheLoaders; + } + + public void addCacheLoader(CacheLoaderWrapper cacheLoader) { + getCacheLoaders().add(cacheLoader); + } + + public synchronized List<CacheLoaderWrapper> getCacheLoaders() { + if (registeredCacheLoaders == null) { + registeredCacheLoaders = new ArrayList<CacheLoaderWrapper>(); + } + return registeredCacheLoaders; + } + + public int size() { + return registeredCacheLoaders.size(); } - } Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderRegistry.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Copied: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java (from r1099648, camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java?p2=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java&p1=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java&r1=1099648&r2=1099711&rev=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEventListenerFactory.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java Thu May 5 08:28:08 2011 @@ -16,12 +16,10 @@ */ package org.apache.camel.component.cache; -import java.util.Properties; +import net.sf.ehcache.Ehcache; +import net.sf.ehcache.loader.CacheLoader; -public class CacheEventListenerFactory extends net.sf.ehcache.event.CacheEventListenerFactory { +public interface CacheLoaderWrapper extends CacheLoader { - public CacheEventListener createCacheEventListener(Properties properties) { - return new CacheEventListener(); - } - + void init(Ehcache cache); } Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheLoaderWrapper.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java Thu May 5 08:28:08 2011 @@ -22,7 +22,7 @@ import org.apache.camel.impl.ServiceSupp public abstract class CacheManagerFactory extends ServiceSupport { private CacheManager cacheManager; - public synchronized CacheManager instantiateCacheManager() { + public synchronized CacheManager getInstance() { if (cacheManager == null) { cacheManager = createCacheManagerInstance(); } 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=1099711&r1=1099710&r2=1099711&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 Thu May 5 08:28:08 2011 @@ -19,11 +19,10 @@ package org.apache.camel.component.cache import java.io.InputStream; import java.io.Serializable; -import net.sf.ehcache.Cache; import net.sf.ehcache.CacheException; -import net.sf.ehcache.CacheManager; import net.sf.ehcache.Ehcache; import net.sf.ehcache.Element; + import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.NoTypeConversionAvailableException; @@ -34,7 +33,6 @@ import org.slf4j.LoggerFactory; public class CacheProducer extends DefaultProducer { private static final transient Logger LOG = LoggerFactory.getLogger(CacheProducer.class); private CacheConfiguration config; - private CacheManager cacheManager; private Ehcache cache; public CacheProducer(Endpoint endpoint, CacheConfiguration config) throws Exception { @@ -44,7 +42,6 @@ public class CacheProducer extends Defau @Override protected void doStart() throws Exception { - cacheManager = getEndpoint().getCacheManagerFactory().instantiateCacheManager(); super.doStart(); } @@ -56,30 +53,7 @@ public class CacheProducer extends Defau public void process(Exchange exchange) throws Exception { LOG.trace("Cache Name: {}", config.getCacheName()); - if (cacheManager.cacheExists(config.getCacheName())) { - if (LOG.isTraceEnabled()) { - LOG.trace("Found an existing cache: {}", config.getCacheName()); - LOG.trace("Cache {} currently contains {} elements", - config.getCacheName(), cacheManager.getCache(config.getCacheName()).getSize()); - } - cache = cacheManager.getCache(config.getCacheName()); - } else { - cache = new Cache(config.getCacheName(), - config.getMaxElementsInMemory(), - config.getMemoryStoreEvictionPolicy(), - config.isOverflowToDisk(), - config.getDiskStorePath(), - config.isEternal(), - config.getTimeToLiveSeconds(), - config.getTimeToIdleSeconds(), - config.isDiskPersistent(), - config.getDiskExpiryThreadIntervalSeconds(), - null); - cacheManager.addCache(cache); - if (LOG.isDebugEnabled()) { - LOG.debug("Added a new cache: " + cache.getName()); - } - } + cache = getEndpoint().initializeCache(); String key = exchange.getIn().getHeader(CacheConstants.CACHE_KEY, String.class); String operation = exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION, String.class); Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java Thu May 5 08:28:08 2011 @@ -45,7 +45,7 @@ public class CacheBasedMessageBodyReplac public void process(Exchange exchange) throws Exception { // Cache the buffer to the specified Cache against the specified key - cacheManager = new DefaultCacheManagerFactory().instantiateCacheManager(); + cacheManager = new DefaultCacheManagerFactory().getInstance(); if (isValid(cacheManager, cacheName, key)) { cache = cacheManager.getCache(cacheName); Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java Thu May 5 08:28:08 2011 @@ -51,7 +51,7 @@ public class CacheBasedTokenReplacer ext public void process(Exchange exchange) throws Exception { // Cache the buffer to the specified Cache against the specified key - cacheManager = new DefaultCacheManagerFactory().instantiateCacheManager(); + cacheManager = new DefaultCacheManagerFactory().getInstance(); if (isValid(cacheManager, cacheName, key)) { cache = cacheManager.getCache(cacheName); Modified: camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java?rev=1099711&r1=1099710&r2=1099711&view=diff ============================================================================== --- camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java (original) +++ camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java Thu May 5 08:28:08 2011 @@ -64,7 +64,7 @@ public class CacheBasedXPathReplacer ext public void process(Exchange exchange) throws Exception { // Cache the buffer to the specified Cache against the specified key - cacheManager = new DefaultCacheManagerFactory().instantiateCacheManager(); + cacheManager = new DefaultCacheManagerFactory().getInstance(); if (isValid(cacheManager, cacheName, key)) { cache = cacheManager.getCache(cacheName); Added: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java?rev=1099711&view=auto ============================================================================== --- camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java (added) +++ camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java Thu May 5 08:28:08 2011 @@ -0,0 +1,240 @@ +/** + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.cache; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheException; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Ehcache; +import net.sf.ehcache.Element; +import net.sf.ehcache.Status; +import net.sf.ehcache.event.CacheEventListener; +import net.sf.ehcache.loader.CacheLoader; + +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.Produce; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.CamelTestSupport; +import org.junit.Test; + +public class CacheRegistryRefTest extends CamelTestSupport { + private static final String CACHE_ENDPOINT_URI = "cache://foo" + + "?eventListenerRegistry=#eventListenerRegistry&cacheLoaderRegistry=#cacheLoaderRegistry"; + + @EndpointInject(uri = CACHE_ENDPOINT_URI) + protected CacheEndpoint cacheEndpoint; + + @Produce(uri = "direct:start") + protected ProducerTemplate producerTemplate; + + private CacheEventListenerRegistry eventListenerRegistry = new CacheEventListenerRegistry(); + private CacheLoaderRegistry loaderRegistry = new CacheLoaderRegistry(); + + @Override + public void setUp() throws Exception { + super.setUp(); + eventListenerRegistry.addCacheEventListener(new TestCacheEventListener()); + loaderRegistry.addCacheLoader(new TestLoader()); + } + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("eventListenerRegistry", eventListenerRegistry); + jndi.bind("cacheLoaderRegistry", loaderRegistry); + return jndi; + } + + @Override + public RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").to(CACHE_ENDPOINT_URI); + } + }; + } + + @Test + public void testConfig() throws Exception { + producerTemplate.send(new Processor() { + public void process(Exchange exchange) throws Exception { + exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8"); + Message in = exchange.getIn(); + in.setHeader(CacheConstants.CACHE_OPERATION, CacheConstants.CACHE_OPERATION_ADD); + in.setHeader(CacheConstants.CACHE_KEY, "greeting"); + in.setBody("Hello World"); + } + }); + + CacheManager cm = cacheEndpoint.getCacheManagerFactory().getInstance(); + Cache cache = cm.getCache(cacheEndpoint.getConfig().getCacheName()); + Set<CacheEventListener> ehcacheEventListners = cache.getCacheEventNotificationService().getCacheEventListeners(); + List<CacheLoader> cacheLoaders = cache.getRegisteredCacheLoaders(); + CacheEventListenerRegistry configuredEventRegistry = cacheEndpoint.getConfig().getEventListenerRegistry(); + CacheLoaderRegistry configuredLoaderRegistry = cacheEndpoint.getConfig().getCacheLoaderRegistry(); + + //Test if CacheEventListenerRegistry was referenced correctly + assertEquals("CacheEventListenerRegistry size", 1, configuredEventRegistry.size()); + + //Expecting 1 loader to be configured via spring + assertEquals("configuredLoaderRegistry size", 1, configuredLoaderRegistry.size()); + + //Expecting 2 listeners- one added by us: TestCacheEventListener and + //one added by ehcache by cfg file. + assertEquals("Number of registered listeners", 2, ehcacheEventListners.size()); + + assertEquals("Number of registered loaders", 1, cacheLoaders.size()); + + + //Is our TestCacheEventListener really invoked? + int puts = 0; + for (Object listener : ehcacheEventListners) { + if (listener instanceof TestCacheEventListener) { + puts = ((TestCacheEventListener)listener).getNumberOfPuts(); + break; + } + } + assertEquals("TestCacheEventListener put invocations", 1, puts); + + //Is cache loader initialized by ehcache + assertEquals("loader initialized", cacheLoaders.get(0).getStatus(), Status.STATUS_ALIVE); + } + + public static class TestingCacheManagerFactory extends CacheManagerFactory { + @Override + protected CacheManager createCacheManagerInstance() { + return CacheManager.create(getClass().getResourceAsStream("/ehcache.xml")); + } + } + + public class TestLoader implements CacheLoaderWrapper { + + private Status status; + private Ehcache cache; + + public TestLoader() { + status = Status.STATUS_UNINITIALISED; + } + + @Override + public CacheLoader clone(Ehcache arg0) throws CloneNotSupportedException { + return null; + } + + @Override + public void dispose() throws CacheException { + status = Status.STATUS_SHUTDOWN; + } + + @Override + public String getName() { + return "Testing cache loader"; + } + + @Override + public Status getStatus() { + return status; + } + + @Override + public void init() { + status = Status.STATUS_ALIVE; + } + + @Override + public Object load(Object arg0) throws CacheException { + return null; + } + + @Override + public Object load(Object arg0, Object arg1) { + return null; + } + + @Override + @SuppressWarnings("rawtypes") + public Map loadAll(Collection arg0) { + return null; + } + + @Override + @SuppressWarnings("rawtypes") + public Map loadAll(Collection arg0, Object arg1) { + return null; + } + + @Override + public void init(Ehcache cache) { + this.cache = cache; + } + + } + + //Test event lister that will help us to count put method invocations. + public class TestCacheEventListener implements CacheEventListener { + private int numberOfPuts; + + @Override + public void dispose() { + } + + @Override + public void notifyElementEvicted(Ehcache arg0, Element arg1) { + } + + @Override + public void notifyElementExpired(Ehcache arg0, Element arg1) { + } + + @Override + public void notifyElementPut(Ehcache arg0, Element arg1) throws CacheException { + numberOfPuts++; + } + + @Override + public void notifyElementRemoved(Ehcache arg0, Element arg1) throws CacheException { + } + + @Override + public void notifyElementUpdated(Ehcache arg0, Element arg1) throws CacheException { + } + + @Override + public void notifyRemoveAll(Ehcache arg0) { + } + + @Override + public TestCacheEventListener clone() { + return this.clone(); + } + + public int getNumberOfPuts() { + return numberOfPuts; + } + } +} Propchange: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRegistryRefTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java?rev=1099711&view=auto ============================================================================== --- camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java (added) +++ camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java Thu May 5 08:28:08 2011 @@ -0,0 +1,138 @@ +/** + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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.cache; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Status; + +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.Produce; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.CamelTestSupport; +import org.junit.Test; + +public class CacheRoutesManagementTest extends CamelTestSupport { + private static final String CACHE_URI = "cache:foo?cacheManagerFactory=#cacheManagerFactory"; + private static final String ROUTE1_ID = "TEST_ROUTE_1"; + private static final String ROUTE2_ID = "TEST_ROUTE_2"; + + @EndpointInject(uri = CACHE_URI) + protected CacheEndpoint cacheEndpoint; + + @Produce(uri = "direct:route1") + protected ProducerTemplate producerTemplate1; + + @Produce(uri = "direct:route2") + protected ProducerTemplate producerTemplate2; + + private TestingCacheManagerFactory cmfRef = new TestingCacheManagerFactory("ehcache_test.xml"); + + private Processor templateProcessor = new Processor() { + public void process(Exchange exchange) throws Exception { + exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8"); + Message in = exchange.getIn(); + in.setBody("Hello World"); + } + }; + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("cacheManagerFactory", cmfRef); + return jndi; + } + + + @Override + public RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:add1") + .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD)) + .setHeader(CacheConstants.CACHE_KEY, constant("foo")) + .to(CACHE_URI).setId(ROUTE1_ID); + + from("direct:add2") + .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD)) + .setHeader(CacheConstants.CACHE_KEY, constant("foo")) + .to(CACHE_URI).setId(ROUTE2_ID); + } + }; + } + + @Test + public void testConfig() throws Exception { + //do some routes + producerTemplate1.send(templateProcessor); + producerTemplate2.send(templateProcessor); + + // Now do some routes to let endpoints be initialized + template.sendBody("direct:add1", "Hello World"); + template.sendBody("direct:add2", "Hello World"); + + //Now should not be null + CacheManager cacheManager = cmfRef.getCacheManager(); + assertNotNull("CacheManager initialized", cacheManager); + + Cache cache = cmfRef.getCacheManager().getCache("foo"); + + // Is cache alive + assertEquals("Is cache still alive", Status.STATUS_ALIVE, cache.getStatus()); + + context.stopRoute(ROUTE1_ID); + + // Is cache still alive? + assertEquals("Is cache still alive", Status.STATUS_ALIVE, cache.getStatus()); + + context.stop(); + + // Was the cache shutdowned with context? + assertEquals("Is cache still alive", Status.STATUS_SHUTDOWN, cache.getStatus()); + } + + public class TestingCacheManagerFactory extends CacheManagerFactory { + private String xmlName; + + //Only for testing purpose, normally not needed + private CacheManager cacheManager; + + public TestingCacheManagerFactory(String xmlName) { + this.xmlName = xmlName; + } + + @Override + protected synchronized CacheManager createCacheManagerInstance() { + //Singleton- only for testing purpose, normally not needed + if (cacheManager == null) { + cacheManager = CacheManager.create(getClass().getResourceAsStream(xmlName)); + } + + return cacheManager; + } + + public CacheManager getCacheManager() { + return cacheManager; + } + } +} Propchange: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheRoutesManagementTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date