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


Reply via email to