You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2013/01/26 19:49:15 UTC

svn commit: r1438943 - in /commons/proper/jcs/trunk/src: java/org/apache/jcs/auxiliary/disk/block/ java/org/apache/jcs/auxiliary/disk/jdbc/ java/org/apache/jcs/auxiliary/remote/behavior/ java/org/apache/jcs/auxiliary/remote/http/client/ java/org/apache...

Author: tv
Date: Sat Jan 26 18:49:14 2013
New Revision: 1438943

URL: http://svn.apache.org/viewvc?rev=1438943&view=rev
Log:
Use central thread pool instance to clean up the code.

Added:
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java   (with props)
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java   (with props)
Removed:
    commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/DiscoveryShutdownHook.java
Modified:
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskKeyStore.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/ShrinkerThread.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheObserver.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheRestore.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IElementAttributes.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObservable.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObserver.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryManager.java
    commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryService.java
    commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java
    commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java
    commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java
    commons/proper/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java Sat Jan 26 18:49:14 2013
@@ -30,6 +30,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.commons.logging.Log;
@@ -39,6 +41,7 @@ import org.apache.jcs.auxiliary.disk.Abs
 import org.apache.jcs.engine.CacheConstants;
 import org.apache.jcs.engine.behavior.ICacheElement;
 import org.apache.jcs.engine.behavior.IElementSerializer;
+import org.apache.jcs.engine.behavior.IRequireScheduler;
 import org.apache.jcs.engine.control.group.GroupAttrName;
 import org.apache.jcs.engine.control.group.GroupId;
 import org.apache.jcs.engine.stats.StatElement;
@@ -53,6 +56,7 @@ import org.apache.jcs.engine.stats.behav
  */
 public class BlockDiskCache<K extends Serializable, V extends Serializable>
     extends AbstractDiskCache<K, V>
+    implements IRequireScheduler
 {
     /** Don't change */
     private static final long serialVersionUID = 1L;
@@ -76,7 +80,7 @@ public class BlockDiskCache<K extends Se
     private final File rootDirectory;
 
     /** Store, loads, and persists the keys */
-    private BlockDiskKeyStore<K> keyStore;
+    protected BlockDiskKeyStore<K> keyStore;
 
     /**
      * Use this lock to synchronize reads and writes to the underlying storage mechanism. We don't
@@ -159,6 +163,29 @@ public class BlockDiskCache<K extends Se
     }
 
     /**
+     * @see org.apache.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        // add this region to the persistence thread.
+        // TODO we might need to stagger this a bit.
+        if ( this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds() > 0 )
+        {
+            scheduledExecutor.scheduleAtFixedRate(
+                    new Runnable()
+                    {
+                        public void run()
+                        {
+                            keyStore.saveKeys();
+                        }
+                    },
+                    this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
+                    this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
+                    TimeUnit.SECONDS);
+        }
+    }
+
+    /**
      * We need to verify that the file on disk uses the same block size and that the file is the
      * proper size.
      * <p>

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskKeyStore.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskKeyStore.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskKeyStore.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskKeyStore.java Sat Jan 26 18:49:14 2013
@@ -32,10 +32,6 @@ import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -74,17 +70,13 @@ public class BlockDiskKeyStore<K extends
     protected final BlockDiskCache<K, ?> blockDiskCache;
 
     /**
-     * The background key persister, one for all regions.
-     */
-    private static volatile ScheduledExecutorService persistenceDaemon;
-
-    /**
      * Set the configuration options.
      * <p>
      * @param cacheAttributes
      * @param blockDiskCache used for freeing
      */
-    public BlockDiskKeyStore( BlockDiskCacheAttributes cacheAttributes, BlockDiskCache<K, ?> blockDiskCache )
+    public BlockDiskKeyStore( BlockDiskCacheAttributes cacheAttributes,
+            BlockDiskCache<K, ?> blockDiskCache)
     {
         this.blockDiskCacheAttributes = cacheAttributes;
         this.logCacheName = "Region [" + this.blockDiskCacheAttributes.getCacheName() + "] ";
@@ -117,28 +109,6 @@ public class BlockDiskKeyStore<K extends
         {
             initKeyMap();
         }
-
-        // add this region to the persistence thread.
-        // TODO we might need to stagger this a bit.
-        if ( this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds() > 0 )
-        {
-            if ( persistenceDaemon == null )
-            {
-                persistenceDaemon = Executors.newScheduledThreadPool(1, new MyThreadFactory());
-            }
-
-            persistenceDaemon
-                .scheduleAtFixedRate(new Runnable()
-                                        {
-                                            public void run()
-                                            {
-                                                saveKeys();
-                                            }
-                                        },
-                        this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
-                        this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
-                        TimeUnit.SECONDS);
-        }
     }
 
     /**
@@ -419,29 +389,4 @@ public class BlockDiskKeyStore<K extends
             }
         }
     }
-
-    /**
-     * Allows us to set the daemon status on the clockdaemon
-     * @author aaronsm
-     */
-    protected static class MyThreadFactory
-        implements ThreadFactory
-    {
-
-        /**
-         * Ensures that we create daemon threads.
-         * <p>
-         * (non-Javadoc)
-         * @see EDU.oswego.cs.dl.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
-         */
-        public Thread newThread( Runnable runner )
-        {
-            Thread t = new Thread( runner );
-            String oldName = t.getName();
-            t.setName( "JCS-BlockDiskKeyStore-" + oldName );
-            t.setDaemon( true );
-            t.setPriority( Thread.MIN_PRIORITY );
-            return t;
-        }
-    }
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/ShrinkerThread.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/ShrinkerThread.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/ShrinkerThread.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/ShrinkerThread.java Sat Jan 26 18:49:14 2013
@@ -129,7 +129,7 @@ public class ShrinkerThread
                     if ( log.isInfoEnabled() )
                     {
                         log.info( "Pausing for [" + this.getPauseBetweenRegionCallsMillis()
-                            + "] ms. before shinker the next region." );
+                            + "] ms. before shrinking the next region." );
                     }
 
                     try

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java Sat Jan 26 18:49:14 2013
@@ -22,7 +22,7 @@ public interface IRemoteCacheDispatcher
      * @return RemoteCacheResponse
      * @throws IOException
      */
-    <K extends Serializable, V extends Serializable, KK extends Serializable, VV extends Serializable>
-        RemoteCacheResponse<K, V> dispatchRequest( RemoteCacheRequest<KK, VV> remoteCacheRequest )
+    <K extends Serializable, V extends Serializable, T>
+        RemoteCacheResponse<T> dispatchRequest( RemoteCacheRequest<K, V> remoteCacheRequest )
             throws IOException;
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java Sat Jan 26 18:49:14 2013
@@ -29,7 +29,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheDispatcher;
 import org.apache.jcs.auxiliary.remote.http.client.behavior.IRemoteHttpCacheClient;
-import org.apache.jcs.auxiliary.remote.http.server.RemoteCacheServiceAdaptor;
 import org.apache.jcs.auxiliary.remote.util.RemoteCacheRequestFactory;
 import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
 import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
@@ -40,7 +39,7 @@ public class RemoteHttpCacheClient<K ext
     implements IRemoteHttpCacheClient<K, V>
 {
     /** The Logger. */
-    private final static Log log = LogFactory.getLog( RemoteCacheServiceAdaptor.class );
+    private final static Log log = LogFactory.getLog( RemoteHttpCacheClient.class );
 
     /** The internal client. */
     private IRemoteCacheDispatcher remoteDispatcher;
@@ -120,19 +119,20 @@ public class RemoteHttpCacheClient<K ext
         RemoteCacheRequest<K, Serializable> remoteHttpCacheRequest =
             RemoteCacheRequestFactory.createGetRequest( cacheName, key, requesterId );
 
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<ICacheElement<K, V>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( log.isDebugEnabled() )
         {
             log.debug( "Get [" + key + "] = " + remoteHttpCacheResponse );
         }
 
-        ICacheElement<K, V> retval = null;
-        if ( remoteHttpCacheResponse != null && remoteHttpCacheResponse.getPayload() != null )
+        if ( remoteHttpCacheResponse != null)
         {
-            retval = remoteHttpCacheResponse.getPayload().get( key );
+            return remoteHttpCacheResponse.getPayload();
         }
-        return retval;
+
+        return null;
     }
 
     /**
@@ -173,7 +173,8 @@ public class RemoteHttpCacheClient<K ext
         RemoteCacheRequest<K, V> remoteHttpCacheRequest =
             RemoteCacheRequestFactory.createGetMatchingRequest( cacheName, pattern, requesterId );
 
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<Map<K, ICacheElement<K, V>>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( log.isDebugEnabled() )
         {
@@ -221,7 +222,8 @@ public class RemoteHttpCacheClient<K ext
         RemoteCacheRequest<K, V> remoteHttpCacheRequest =
             RemoteCacheRequestFactory.createGetMultipleRequest( cacheName, keys, requesterId );
 
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<Map<K, ICacheElement<K, V>>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( log.isDebugEnabled() )
         {
@@ -392,12 +394,11 @@ public class RemoteHttpCacheClient<K ext
         RemoteCacheRequest<String, String> remoteHttpCacheRequest =
             RemoteCacheRequestFactory.createGetGroupKeysRequest( cacheName, groupName, 0 );
 
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<Set<K>> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( remoteHttpCacheResponse != null && remoteHttpCacheResponse.getPayload() != null )
         {
-            // FIXME: Unchecked cast
-            return (Set<K>)remoteHttpCacheResponse.getPayload().get( groupName );
+            return remoteHttpCacheResponse.getPayload();
         }
 
         return Collections.emptySet();
@@ -422,12 +423,12 @@ public class RemoteHttpCacheClient<K ext
         RemoteCacheRequest<String, String> remoteHttpCacheRequest =
             RemoteCacheRequestFactory.createGetGroupNamesRequest( cacheName, 0 );
 
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<Set<String>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( remoteHttpCacheResponse != null && remoteHttpCacheResponse.getPayload() != null )
         {
-            // FIXME: Unchecked cast
-            return (Set<String>)remoteHttpCacheResponse.getPayload().get( cacheName );
+            return remoteHttpCacheResponse.getPayload();
         }
 
         return Collections.emptySet();
@@ -450,7 +451,8 @@ public class RemoteHttpCacheClient<K ext
         }
 
         RemoteCacheRequest<K, V> remoteHttpCacheRequest = RemoteCacheRequestFactory.createAliveCheckRequest( 0 );
-        RemoteCacheResponse<K, V> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+        RemoteCacheResponse<String> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
 
         if ( remoteHttpCacheResponse != null )
         {

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java Sat Jan 26 18:49:14 2013
@@ -74,8 +74,8 @@ public class RemoteHttpCacheDispatcher
      * @return RemoteCacheResponse
      * @throws IOException
      */
-    public <K extends Serializable, V extends Serializable, KK extends Serializable, VV extends Serializable>
-        RemoteCacheResponse<K, V> dispatchRequest( RemoteCacheRequest<KK, VV> remoteCacheRequest )
+    public <K extends Serializable, V extends Serializable, T>
+        RemoteCacheResponse<T> dispatchRequest( RemoteCacheRequest<K, V> remoteCacheRequest )
         throws IOException
     {
         try
@@ -86,7 +86,7 @@ public class RemoteHttpCacheDispatcher
 
             byte[] responseAsByteArray = processRequest( requestAsByteArray, url );
 
-            RemoteCacheResponse<K, V> remoteCacheResponse = null;
+            RemoteCacheResponse<T> remoteCacheResponse = null;
             try
             {
                 remoteCacheResponse = serializer.deSerialize( responseAsByteArray );

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java Sat Jan 26 18:49:14 2013
@@ -21,7 +21,7 @@ package org.apache.jcs.auxiliary.remote.
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -70,13 +70,14 @@ public class RemoteCacheServiceAdaptor<K
      * @param request
      * @return RemoteHttpCacheResponse, never null
      */
-    public RemoteCacheResponse<K, V> processRequest( RemoteCacheRequest<K, V> request )
+    @SuppressWarnings( "unchecked" ) // need to cast to correct return type
+    public <T> RemoteCacheResponse<T> processRequest( RemoteCacheRequest<K, V> request )
     {
-        RemoteCacheResponse<K, V> response = new RemoteCacheResponse<K, V>();
+        RemoteCacheResponse<Object> response = new RemoteCacheResponse<Object>();
 
         if ( request == null )
         {
-            String message = "The request is null.  Cannot process";
+            String message = "The request is null. Cannot process";
             log.warn( message );
             response.setSuccess( false );
             response.setErrorMessage( message );
@@ -90,10 +91,7 @@ public class RemoteCacheServiceAdaptor<K
                     case GET:
                         ICacheElement<K, V> element = getRemoteCacheService().get( request.getCacheName(), request.getKey(),
                                                                              request.getRequesterId() );
-                        if ( element != null )
-                        {
-                            response.getPayload().put( element.getKey(), element );
-                        }
+                        response.setPayload(element);
                         break;
                     case GET_MULTIPLE:
                         Map<K, ICacheElement<K, V>> elementMap = getRemoteCacheService().getMultiple( request.getCacheName(),
@@ -101,7 +99,9 @@ public class RemoteCacheServiceAdaptor<K
                                                                               request.getRequesterId() );
                         if ( elementMap != null )
                         {
-                            response.getPayload().putAll( elementMap );
+                            Map<K, ICacheElement<K, V>> map = new HashMap<K, ICacheElement<K,V>>();
+                            map.putAll(elementMap);
+                            response.setPayload(map);
                         }
                         break;
                     case GET_MATCHING:
@@ -110,7 +110,9 @@ public class RemoteCacheServiceAdaptor<K
                                                                                       request.getRequesterId() );
                         if ( elementMapMatching != null )
                         {
-                            response.getPayload().putAll( elementMapMatching );
+                            Map<K, ICacheElement<K, V>> map = new HashMap<K, ICacheElement<K,V>>();
+                            map.putAll(elementMapMatching);
+                            response.setPayload(map);
                         }
                         break;
                     case REMOVE:
@@ -133,21 +135,11 @@ public class RemoteCacheServiceAdaptor<K
                     case GET_GROUP_KEYS:
                         Set<K> groupKeys = getRemoteCacheService().getGroupKeys( request.getCacheName(),
                                                                               request.getKey() + "" );
-                        if ( groupKeys == null )
-                        {
-                            groupKeys = Collections.emptySet();
-                        }
-                        // FIXME: Re-enable
-                        //response.getPayload().put( request.getKey(), groupKeys );
+                        response.setPayload( groupKeys );
                         break;
                     case GET_GROUP_NAMES:
                         Set<String> groupNames = getRemoteCacheService().getGroupNames( request.getCacheName() );
-                        if ( groupNames == null )
-                        {
-                            groupNames = Collections.emptySet();
-                        }
-                        // FIXME: Re-enable
-                        //response.getPayload().put( request.getKey(), groupNames );
+                        response.setPayload( groupNames );
                         break;
                     default:
                         String message = "Unknown event type.  Cannot process " + request;
@@ -166,7 +158,7 @@ public class RemoteCacheServiceAdaptor<K
             }
         }
 
-        return response;
+        return (RemoteCacheResponse<T>)response;
     }
 
     /**

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java Sat Jan 26 18:49:14 2013
@@ -112,8 +112,8 @@ public class RemoteHttpCacheServlet
         }
 
         RemoteCacheRequest<Serializable, Serializable> remoteRequest = readRequest( request );
-
-        RemoteCacheResponse<Serializable, Serializable> cacheResponse = getRemoteHttpCacheServiceAdaptor().processRequest( remoteRequest );
+        RemoteCacheResponse<Serializable> cacheResponse =
+            getRemoteHttpCacheServiceAdaptor().processRequest( remoteRequest );
 
         writeResponse( response, cacheResponse );
     }
@@ -170,7 +170,7 @@ public class RemoteHttpCacheServlet
      * @param response
      * @param cacheResponse
      */
-    protected void writeResponse( HttpServletResponse response, RemoteCacheResponse<Serializable, Serializable> cacheResponse )
+    protected void writeResponse( HttpServletResponse response, RemoteCacheResponse<Serializable> cacheResponse )
     {
         try
         {

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java Sat Jan 26 18:49:14 2013
@@ -1,16 +1,12 @@
 package org.apache.jcs.auxiliary.remote.value;
 
 import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.jcs.engine.behavior.ICacheElement;
 
 /**
  * This is the response wrapper. The servlet wraps all different type of responses in one of these
  * objects.
  */
-public class RemoteCacheResponse<K extends Serializable, V extends Serializable>
+public class RemoteCacheResponse<T>
     implements Serializable
 {
     /** Don't change. */
@@ -26,7 +22,7 @@ public class RemoteCacheResponse<K exten
      * The payload. Typically a key / ICacheElement<K, V> map. A normal get will return a map with one
      * record.
      */
-    private Map<K, ICacheElement<K, V>> payload = new HashMap<K, ICacheElement<K,V>>();
+    private T payload;
 
     /**
      * @param success the success to set
@@ -63,7 +59,7 @@ public class RemoteCacheResponse<K exten
     /**
      * @param payload the payload to set
      */
-    public void setPayload( Map<K, ICacheElement<K, V>> payload )
+    public void setPayload( T payload )
     {
         this.payload = payload;
     }
@@ -71,7 +67,7 @@ public class RemoteCacheResponse<K exten
     /**
      * @return the payload
      */
-    public Map<K, ICacheElement<K, V>> getPayload()
+    public T getPayload()
     {
         return payload;
     }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java Sat Jan 26 18:49:14 2013
@@ -145,7 +145,7 @@ public class CompositeCacheAttributes
      * <p>
      * @return The useDisk value
      */
-    public boolean getUseDisk()
+    public boolean isUseDisk()
     {
         return useDisk;
     }
@@ -165,7 +165,7 @@ public class CompositeCacheAttributes
      * <p>
      * @return The useLateral value
      */
-    public boolean getUseLateral()
+    public boolean isUseLateral()
     {
         return this.useLateral;
     }
@@ -185,7 +185,7 @@ public class CompositeCacheAttributes
      * <p>
      * @return The useRemote value
      */
-    public boolean getUseRemote()
+    public boolean isUseRemote()
     {
         return this.useRemote;
     }
@@ -245,7 +245,7 @@ public class CompositeCacheAttributes
      * <p>
      * @return The UseMemoryShrinker value
      */
-    public boolean getUseMemoryShrinker()
+    public boolean isUseMemoryShrinker()
     {
         return this.useMemoryShrinker;
     }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheObserver.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheObserver.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheObserver.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheObserver.java Sat Jan 26 18:49:14 2013
@@ -41,7 +41,7 @@ public interface ICacheObserver
      *            object to notify for cache changes.
      * @throws IOException
      */
-    public <K extends Serializable, V extends Serializable> void addCacheListener( String cacheName, ICacheListener<K, V> obj )
+    <K extends Serializable, V extends Serializable> void addCacheListener( String cacheName, ICacheListener<K, V> obj )
         throws IOException;
 
     //, CacheNotFoundException;
@@ -53,7 +53,7 @@ public interface ICacheObserver
      *            object to notify for all cache changes.
      * @throws IOException
      */
-    public <K extends Serializable, V extends Serializable> void addCacheListener( ICacheListener<K, V> obj )
+    <K extends Serializable, V extends Serializable> void addCacheListener( ICacheListener<K, V> obj )
         throws IOException;
 
     /**
@@ -64,7 +64,7 @@ public interface ICacheObserver
      *            existing subscriber.
      * @throws IOException
      */
-    public <K extends Serializable, V extends Serializable> void removeCacheListener( String cacheName, ICacheListener<K, V> obj )
+    <K extends Serializable, V extends Serializable> void removeCacheListener( String cacheName, ICacheListener<K, V> obj )
         throws IOException;
 
     /**
@@ -74,6 +74,6 @@ public interface ICacheObserver
      *            existing subscriber.
      * @throws IOException
      */
-    public <K extends Serializable, V extends Serializable> void removeCacheListener( ICacheListener<K, V> obj )
+    <K extends Serializable, V extends Serializable> void removeCacheListener( ICacheListener<K, V> obj )
         throws IOException;
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheRestore.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheRestore.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheRestore.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICacheRestore.java Sat Jan 26 18:49:14 2013
@@ -20,7 +20,7 @@ package org.apache.jcs.engine.behavior;
  */
 
 /**
- * Description of the Interface
+ * TODO: Description of the Interface
  *
  */
 public interface ICacheRestore
@@ -30,8 +30,8 @@ public interface ICacheRestore
      *
      * @return true if fixed
      */
-    public boolean canFix();
+    boolean canFix();
 
-    /** Description of the Method */
-    public void fix();
+    /** Fix the cache */
+    void fix();
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java Sat Jan 26 18:49:14 2013
@@ -72,7 +72,7 @@ public interface ICompositeCacheAttribut
      * <p>
      * @return The useDisk value
      */
-    boolean getUseDisk();
+    boolean isUseDisk();
 
     /**
      * set whether the cache should use a lateral cache
@@ -87,7 +87,7 @@ public interface ICompositeCacheAttribut
      * <p>
      * @return The useLateral value
      */
-    boolean getUseLateral();
+    boolean isUseLateral();
 
     /**
      * Sets whether the cache is remote enabled
@@ -102,7 +102,7 @@ public interface ICompositeCacheAttribut
      * <p>
      * @return The useRemote value
      */
-    boolean getUseRemote();
+    boolean isUseRemote();
 
     /**
      * Sets the name of the cache, referenced by the appropriate manager.
@@ -149,7 +149,7 @@ public interface ICompositeCacheAttribut
      * <p>
      * @return The UseMemoryShrinker value
      */
-    boolean getUseMemoryShrinker();
+    boolean isUseMemoryShrinker();
 
     /**
      * If UseMemoryShrinker is true the memory cache should auto-expire elements

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IElementAttributes.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IElementAttributes.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IElementAttributes.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IElementAttributes.java Sat Jan 26 18:49:14 2013
@@ -35,7 +35,7 @@ public interface IElementAttributes
      * <p>
      * @param mls The new MaxLifeSeconds value
      */
-    public void setMaxLifeSeconds( long mls );
+    void setMaxLifeSeconds( long mls );
 
     /**
      * Sets the maxLife attribute of the IAttributes object. How many seconds it can live after
@@ -45,7 +45,7 @@ public interface IElementAttributes
      * removed on retrieval, or removed actively if the memory shrinker is turned on.
      * @return The MaxLifeSeconds value
      */
-    public long getMaxLifeSeconds();
+    long getMaxLifeSeconds();
 
     /**
      * Sets the idleTime attribute of the IAttributes object. This is the maximum time the item can
@@ -55,21 +55,21 @@ public interface IElementAttributes
      * removed on retrieval, or removed actively if the memory shrinker is turned on.
      * @param idle The new idleTime value
      */
-    public void setIdleTime( long idle );
+    void setIdleTime( long idle );
 
     /**
      * Size in bytes. This is not used except in the admin pages. It will be -1 by default.
      * <p>
      * @param size The new size value
      */
-    public void setSize( int size );
+    void setSize( int size );
 
     /**
      * Gets the size attribute of the IAttributes object
      * <p>
      * @return The size value
      */
-    public int getSize();
+    int getSize();
 
     /**
      * Gets the createTime attribute of the IAttributes object.
@@ -80,25 +80,25 @@ public interface IElementAttributes
      * Putting an item in the cache overrides any existing items.
      * @return The createTime value
      */
-    public long getCreateTime();
+    long getCreateTime();
 
     /**
      * Gets the LastAccess attribute of the IAttributes object.
      * <p>
      * @return The LastAccess value.
      */
-    public long getLastAccessTime();
+    long getLastAccessTime();
 
     /**
      * Sets the LastAccessTime as now of the IElementAttributes object
      */
-    public void setLastAccessTimeNow();
+    void setLastAccessTimeNow();
 
     /**
      * Gets the idleTime attribute of the IAttributes object
      * @return The idleTime value
      */
-    public long getIdleTime();
+    long getIdleTime();
 
     /**
      * Gets the time left to live of the IAttributes object.
@@ -106,13 +106,13 @@ public interface IElementAttributes
      * This is the (max life + create time) - current time.
      * @return The TimeToLiveSeconds value
      */
-    public long getTimeToLiveSeconds();
+    long getTimeToLiveSeconds();
 
     /**
      * Returns a copy of the object.
      * @return IElementAttributes
      */
-    public IElementAttributes copy();
+    IElementAttributes copy();
 
     /**
      * Can this item be spooled to disk
@@ -120,7 +120,7 @@ public interface IElementAttributes
      * By default this is true.
      * @return The spoolable value
      */
-    public boolean getIsSpool();
+    boolean getIsSpool();
 
     /**
      * Sets the isSpool attribute of the IElementAttributes object
@@ -128,7 +128,7 @@ public interface IElementAttributes
      * By default this is true.
      * @param val The new isSpool value
      */
-    public void setIsSpool( boolean val );
+    void setIsSpool( boolean val );
 
     /**
      * Is this item laterally distributable. Can it be sent to auxiliaries of type lateral.
@@ -136,7 +136,7 @@ public interface IElementAttributes
      * By default this is true.
      * @return The isLateral value
      */
-    public boolean getIsLateral();
+    boolean getIsLateral();
 
     /**
      * Sets the isLateral attribute of the IElementAttributes object
@@ -144,7 +144,7 @@ public interface IElementAttributes
      * By default this is true.
      * @param val The new isLateral value
      */
-    public void setIsLateral( boolean val );
+    void setIsLateral( boolean val );
 
     /**
      * Can this item be sent to the remote cache.
@@ -152,7 +152,7 @@ public interface IElementAttributes
      * By default this is true.
      * @return The isRemote value
      */
-    public boolean getIsRemote();
+    boolean getIsRemote();
 
     /**
      * Sets the isRemote attribute of the IElementAttributes object.
@@ -160,26 +160,26 @@ public interface IElementAttributes
      * By default this is true.
      * @param val The new isRemote value
      */
-    public void setIsRemote( boolean val );
+    void setIsRemote( boolean val );
 
     /**
      * This turns off expiration if it is true.
      * @return The IsEternal value
      */
-    public boolean getIsEternal();
+    boolean getIsEternal();
 
     /**
      * Sets the isEternal attribute of the IElementAttributes object
      * @param val The new isEternal value
      */
-    public void setIsEternal( boolean val );
+    void setIsEternal( boolean val );
 
     /**
      * Adds a ElementEventHandler. Handler's can be registered for multiple events. A registered
      * handler will be called at every recognized event.
      * @param eventHandler The feature to be added to the ElementEventHandler
      */
-    public void addElementEventHandler( IElementEventHandler eventHandler );
+    void addElementEventHandler( IElementEventHandler eventHandler );
 
     /**
      * Gets the elementEventHandlers.
@@ -188,12 +188,12 @@ public interface IElementAttributes
      * lost if the item goes to disk.
      * @return The elementEventHandlers value, null if there are none
      */
-    public ArrayList<IElementEventHandler> getElementEventHandlers();
+    ArrayList<IElementEventHandler> getElementEventHandlers();
 
     /**
      * Sets the eventHandlers of the IElementAttributes object
      * @param eventHandlers value
      */
-    public void addElementEventHandlers( ArrayList<IElementEventHandler> eventHandlers );
+    void addElementEventHandlers( ArrayList<IElementEventHandler> eventHandlers );
 
 }

Added: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java?rev=1438943&view=auto
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java (added)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java Sat Jan 26 18:49:14 2013
@@ -0,0 +1,37 @@
+package org.apache.jcs.engine.behavior;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+/*
+ * 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.
+ */
+
+/**
+ * Marker interface for providers of the central ScheduledExecutorService
+ * <p>
+ * @author Thomas Vandahl
+ *
+ */
+public interface IProvideScheduler
+{
+    /**
+     * Get an instance of a central ScheduledExecutorService
+     * @return the central scheduler
+     */
+    ScheduledExecutorService getScheduledExecutorService();
+}

Propchange: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IProvideScheduler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java?rev=1438943&view=auto
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java (added)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java Sat Jan 26 18:49:14 2013
@@ -0,0 +1,38 @@
+package org.apache.jcs.engine.behavior;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+/*
+ * 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.
+ */
+
+/**
+ * Marker interface to allow the injection of a central ScheduledExecutorService
+ * for all modules requiring scheduled background operations.
+ * <p>
+ * @author Thomas Vandahl
+ *
+ */
+public interface IRequireScheduler
+{
+    /**
+     * Inject an instance of a central ScheduledExecutorService
+     * @param scheduledExecutor
+     */
+    void setScheduledExecutorService( ScheduledExecutorService scheduledExecutor );
+}

Propchange: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IRequireScheduler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObservable.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObservable.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObservable.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObservable.java Sat Jan 26 18:49:14 2013
@@ -20,16 +20,16 @@ package org.apache.jcs.engine.behavior;
  */
 
 /**
- * ShutdownObservers can observer ShutdownObservable objects.
+ * ShutdownObservers can observe ShutdownObservable objects.
  * The CacheManager is the primary observable that this is intended for.
  * <p>
  * Most shutdown operations will occur outside this framework for now.  The initial
  * goal is to allow background threads that are not reachable through any reference
- * that the cahe manager maintains to be killed on shutdown.
+ * that the cache manager maintains to be killed on shutdown.
  * <p>
  * Perhaps the composite cache itself should be the observable object.
  * It doesn't make much of a difference.  There are some problems with
- * region by region shutdown.  Some auxiliaries are glocal.  They will
+ * region by region shutdown.  Some auxiliaries are local.  They will
  * need to track when every region has shutdown before doing things like
  * closing the socket with a lateral.
  * <p>

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObserver.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObserver.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObserver.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/behavior/IShutdownObserver.java Sat Jan 26 18:49:14 2013
@@ -26,18 +26,16 @@ package org.apache.jcs.engine.behavior;
  * <p>
  * Most shutdown operations will occur outside this framework for now.  The initial
  * goal is to allow background threads that are not reachable through any reference
- * that the cahe manager maintains to be killed on shutdown.
+ * that the cache manager maintains to be killed on shutdown.
  *
  * @author Aaron Smuts
  *
  */
 public interface IShutdownObserver
 {
-
     /**
      * Tells the observer that the observable has received a shutdown command.
      *
      */
-    abstract void shutdown();
-
+    void shutdown();
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java Sat Jan 26 18:49:14 2013
@@ -320,9 +320,9 @@ public class CompositeCache<K extends Se
                 // cache region restrictions
                 if ( log.isDebugEnabled() )
                 {
-                    log.debug( "lateralcache in aux list: cattr " + cacheAttr.getUseLateral() );
+                    log.debug( "lateralcache in aux list: cattr " + cacheAttr.isUseLateral() );
                 }
-                if ( cacheAttr.getUseLateral() && cacheElement.getElementAttributes().getIsLateral() && !localOnly )
+                if ( cacheAttr.isUseLateral() && cacheElement.getElementAttributes().getIsLateral() && !localOnly )
                 {
                     // DISTRIBUTE LATERALLY
                     // Currently always multicast even if the value is
@@ -339,9 +339,9 @@ public class CompositeCache<K extends Se
             {
                 if ( log.isDebugEnabled() )
                 {
-                    log.debug( "diskcache in aux list: cattr " + cacheAttr.getUseDisk() );
+                    log.debug( "diskcache in aux list: cattr " + cacheAttr.isUseDisk() );
                 }
-                if ( cacheAttr.getUseDisk()
+                if ( cacheAttr.isUseDisk()
                     && ( cacheAttr.getDiskUsagePattern() == DiskUsagePattern.UPDATE )
                     && cacheElement.getElementAttributes().getIsSpool() )
                 {

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java Sat Jan 26 18:49:14 2013
@@ -38,6 +38,7 @@ import org.apache.jcs.engine.behavior.IC
 import org.apache.jcs.engine.behavior.ICompositeCacheAttributes;
 import org.apache.jcs.engine.behavior.IElementAttributes;
 import org.apache.jcs.engine.behavior.IElementSerializer;
+import org.apache.jcs.engine.behavior.IRequireScheduler;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 import org.apache.jcs.engine.match.KeyMatcherPatternImpl;
 import org.apache.jcs.engine.match.behavior.IKeyMatcher;
@@ -322,18 +323,21 @@ public class CompositeCacheConfigurator
     {
         // First, create or get the cache and element attributes, and create
         // the cache.
-
-        if ( cca == null )
-        {
-            cca = parseCompositeCacheAttributes( props, regName, regionPrefix );
-        }
-
         IElementAttributes ea = parseElementAttributes( props, regName, regionPrefix );
 
-        CompositeCache<K, V> cache = new CompositeCache<K, V>( regName, cca, ea );
+        CompositeCache<K, V> cache = ( cca == null )
+            ? new CompositeCache<K, V>( regName, parseCompositeCacheAttributes( props, regName, regionPrefix ), ea )
+            : new CompositeCache<K, V>( regName, cca, ea );
 
         if (value != null)
         {
+            // Inject scheduler service
+            if (cache.getMemoryCache() instanceof IRequireScheduler)
+            {
+                ((IRequireScheduler)cache.getMemoryCache()).setScheduledExecutorService(
+                        compositeCacheManager.getScheduledExecutorService());
+            }
+
             // Next, create the auxiliaries for the new cache
             List<AuxiliaryCache<K, V>> auxList = new ArrayList<AuxiliaryCache<K, V>>();
 
@@ -368,10 +372,16 @@ public class CompositeCacheConfigurator
                 }
                 log.debug( "Parsing auxiliary named \"" + auxName + "\"." );
 
-                auxCache = parseAuxiliary( cache, props, auxName, regName );
+                auxCache = parseAuxiliary( props, auxName, regName );
 
                 if ( auxCache != null )
                 {
+                    if (auxCache instanceof IRequireScheduler)
+                    {
+                        ((IRequireScheduler)auxCache).setScheduledExecutorService(
+                                compositeCacheManager.getScheduledExecutorService());
+                    }
+
                     auxList.add( auxCache );
                 }
             }
@@ -496,21 +506,18 @@ public class CompositeCacheConfigurator
     /**
      * Get an aux cache for the listed aux for a region.
      *<p>
-     * @param cache the cache manager
      * @param props the configuration properties
      * @param auxName the name of the auxiliary cache
      * @param regName the name of the region.
      * @return AuxiliaryCache
      */
-    protected <K extends Serializable, V extends Serializable> AuxiliaryCache<K, V> parseAuxiliary( CompositeCache<K, V> cache, Properties props, String auxName, String regName )
+    protected <K extends Serializable, V extends Serializable> AuxiliaryCache<K, V> parseAuxiliary( Properties props, String auxName, String regName )
     {
         AuxiliaryCache<K, V> auxCache;
 
         if ( log.isDebugEnabled() )
         {
-            // cache isn't used.
-            // TODO change method signature if is isn't needed.
-            log.debug( "parseAuxiliary, Cache = " + cache );
+            log.debug( "parseAuxiliary " + auxName );
         }
 
         // GET FACTORY

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java Sat Jan 26 18:49:14 2013
@@ -29,6 +29,9 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Properties;
 import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -44,6 +47,7 @@ import org.apache.jcs.engine.behavior.IC
 import org.apache.jcs.engine.behavior.ICompositeCacheAttributes;
 import org.apache.jcs.engine.behavior.ICompositeCacheManager;
 import org.apache.jcs.engine.behavior.IElementAttributes;
+import org.apache.jcs.engine.behavior.IProvideScheduler;
 import org.apache.jcs.engine.behavior.IShutdownObservable;
 import org.apache.jcs.engine.behavior.IShutdownObserver;
 import org.apache.jcs.engine.stats.CacheStats;
@@ -61,7 +65,7 @@ import org.apache.jcs.utils.threadpool.T
  * It is recommended that you use the JCS convenience class for all cache access.
  */
 public class CompositeCacheManager
-    implements IRemoteCacheConstants, Serializable, ICompositeCacheManager, IShutdownObservable
+    implements IRemoteCacheConstants, Serializable, ICompositeCacheManager, IShutdownObservable, IProvideScheduler
 {
     /** Don't change */
     private static final long serialVersionUID = 7598584393134401756L;
@@ -115,6 +119,9 @@ public class CompositeCacheManager
     /** Those waiting for notification of a shutdown. */
     private final Set<IShutdownObserver> shutdownObservers = new HashSet<IShutdownObserver>();
 
+    /** The central background scheduler. */
+    private ScheduledExecutorService scheduledExecutor;
+
     /** Indicates whether shutdown has been called. */
     private boolean isShutdown = false;
 
@@ -205,7 +212,7 @@ public class CompositeCacheManager
         return new CompositeCacheManager();
     }
 
-    /** Creates a shutdown hook */
+    /** Creates a shutdown hook and starts the scheduler service */
     protected CompositeCacheManager()
     {
         ShutdownHook shutdownHook = new ShutdownHook();
@@ -217,6 +224,29 @@ public class CompositeCacheManager
         {
             log.error( "Could not register shutdown hook.", e );
         }
+
+        this.scheduledExecutor = Executors.newScheduledThreadPool(4, new ThreadFactory()
+        {
+            public Thread newThread(Runnable runner)
+            {
+                Thread t = new Thread( runner );
+                String oldName = t.getName();
+                t.setName( "JCS-Scheduler-" + oldName );
+                t.setDaemon( true );
+                t.setPriority( Thread.MIN_PRIORITY );
+                return t;
+            }
+        });
+    }
+
+    /**
+     * Get the scheduler service
+     *
+     * @return the scheduledExecutor
+     */
+    public ScheduledExecutorService getScheduledExecutorService()
+    {
+        return scheduledExecutor;
     }
 
     /**
@@ -569,6 +599,9 @@ public class CompositeCacheManager
     {
         isShutdown = true;
 
+        // shutdown all scheduled jobs
+        this.scheduledExecutor.shutdownNow();
+
         // notify any observers
         synchronized ( shutdownObservers )
         {

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java Sat Jan 26 18:49:14 2013
@@ -26,9 +26,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
@@ -37,6 +35,7 @@ import org.apache.jcs.engine.CacheStatus
 import org.apache.jcs.engine.behavior.ICacheElement;
 import org.apache.jcs.engine.behavior.ICompositeCacheAttributes;
 import org.apache.jcs.engine.behavior.IElementAttributes;
+import org.apache.jcs.engine.behavior.IRequireScheduler;
 import org.apache.jcs.engine.control.CompositeCache;
 import org.apache.jcs.engine.control.group.GroupAttrName;
 import org.apache.jcs.engine.control.group.GroupId;
@@ -53,7 +52,7 @@ import org.apache.jcs.engine.stats.behav
  * use the shrinker, the clock daemon will be setup to run the shrinker on this region.
  */
 public abstract class AbstractMemoryCache<K extends Serializable, V extends Serializable>
-    implements IMemoryCache<K, V>, Serializable
+    implements IMemoryCache<K, V>, Serializable, IRequireScheduler
 {
     /** Don't change. */
     private static final long serialVersionUID = -4494626991630099575L;
@@ -82,10 +81,6 @@ public abstract class AbstractMemoryCach
     /** How many to spool at a time. */
     protected int chunkSize;
 
-    /** The background memory shrinker, one for all regions. */
-    // TODO fix for multi-instance JCS
-    private static ScheduledExecutorService shrinkerDaemon;
-
     /**
      * For post reflection creation initialization
      * <p>
@@ -100,15 +95,18 @@ public abstract class AbstractMemoryCach
 
         chunkSize = cacheAttributes.getSpoolChunkSize();
         status = CacheStatus.ALIVE;
+    }
 
-        if ( cacheAttributes.getUseMemoryShrinker() )
+    /**
+     * @see org.apache.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        if ( cacheAttributes.isUseMemoryShrinker() )
         {
-            if ( shrinkerDaemon == null )
-            {
-                shrinkerDaemon = Executors.newScheduledThreadPool(1, new MyThreadFactory());
-            }
-
-            shrinkerDaemon.scheduleAtFixedRate(new ShrinkerThread<K, V>(this), 0, cacheAttributes.getShrinkerIntervalSeconds(), TimeUnit.SECONDS);
+            scheduledExecutor.scheduleAtFixedRate(
+                    new ShrinkerThread<K, V>(this), 0, cacheAttributes.getShrinkerIntervalSeconds(),
+                    TimeUnit.SECONDS);
         }
     }
 
@@ -235,11 +233,7 @@ public abstract class AbstractMemoryCach
     public void dispose()
         throws IOException
     {
-        log.info( "Memory Cache dispose called.  Shutting down shrinker thread if it is running." );
-        if ( shrinkerDaemon != null )
-        {
-            shrinkerDaemon.shutdownNow();
-        }
+        log.info( "Memory Cache dispose called." );
     }
 
     /**
@@ -396,25 +390,4 @@ public abstract class AbstractMemoryCach
         }
         return names;
     }
-
-    /**
-     * Allows us to set the daemon status on the clockdaemon
-     */
-    protected static class MyThreadFactory
-        implements ThreadFactory
-    {
-        /**
-         * @param runner
-         * @return a new thread for the given Runnable
-         */
-        public Thread newThread( Runnable runner )
-        {
-            Thread t = new Thread( runner );
-            String oldName = t.getName();
-            t.setName( "JCS-AbstractMemoryCache-" + oldName );
-            t.setDaemon( true );
-            t.setPriority( Thread.MIN_PRIORITY );
-            return t;
-        }
-    }
 }

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryManager.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryManager.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryManager.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryManager.java Sat Jan 26 18:49:14 2013
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.jcs.engine.behavior.IProvideScheduler;
 import org.apache.jcs.engine.behavior.IShutdownObservable;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 
@@ -100,6 +101,13 @@ public class UDPDiscoveryManager
             {
                 ( (IShutdownObservable) cacheMgr ).registerShutdownObserver( service );
             }
+
+            // inject scheduler
+            if ( cacheMgr instanceof IProvideScheduler)
+            {
+                service.setScheduledExecutorService(((IProvideScheduler)cacheMgr).getScheduledExecutorService());
+            }
+
             services.put( key, service );
         }
 

Modified: commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryService.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryService.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryService.java (original)
+++ commons/proper/jcs/trunk/src/java/org/apache/jcs/utils/discovery/UDPDiscoveryService.java Sat Jan 26 18:49:14 2013
@@ -24,13 +24,12 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.engine.behavior.IRequireScheduler;
 import org.apache.jcs.engine.behavior.IShutdownObserver;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
 import org.apache.jcs.utils.discovery.behavior.IDiscoveryListener;
@@ -46,14 +45,11 @@ import org.apache.jcs.utils.net.HostName
  * @author Aaron Smuts
  */
 public class UDPDiscoveryService
-    implements IShutdownObserver
+    implements IShutdownObserver, IRequireScheduler
 {
     /** The logger */
     private final static Log log = LogFactory.getLog( UDPDiscoveryService.class );
 
-    /** The background broadcaster. */
-    private static volatile ScheduledExecutorService senderDaemon;
-
     /** thread that listens for messages */
     private Thread udpReceiverThread;
 
@@ -63,9 +59,6 @@ public class UDPDiscoveryService
     /** the runnable that sends messages via the clock daemon */
     private UDPDiscoverySenderThread sender = null;
 
-    /** removes things that have been idle for too long */
-    private final UDPCleanupRunner cleanup;
-
     /** attributes */
     private UDPDiscoveryAttributes udpDiscoveryAttributes = null;
 
@@ -116,25 +109,26 @@ public class UDPDiscoveryService
                 + getUdpDiscoveryAttributes().getUdpDiscoveryPort() + "] we won't be able to find any other caches", e );
         }
 
-        if ( senderDaemon == null )
-        {
-            senderDaemon = Executors.newScheduledThreadPool(2, new MyThreadFactory());
-        }
-
         // create a sender thread
         sender = new UDPDiscoverySenderThread( getUdpDiscoveryAttributes(), getCacheNames() );
-        senderDaemon.scheduleAtFixedRate(sender, 0, 15, TimeUnit.SECONDS);
+    }
+
+    /**
+     * @see org.apache.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        if (sender != null)
+        {
+            scheduledExecutor.scheduleAtFixedRate(sender, 0, 15, TimeUnit.SECONDS);
+        }
 
-        // add the cleanup daemon too
-        cleanup = new UDPCleanupRunner( this );
+        /** removes things that have been idle for too long */
+        UDPCleanupRunner cleanup = new UDPCleanupRunner( this );
         // I'm going to use this as both, but it could happen
         // that something could hang around twice the time using this as the
         // delay and the idle time.
-        senderDaemon.scheduleAtFixedRate(cleanup, 0, getUdpDiscoveryAttributes().getMaxIdleTimeSec(), TimeUnit.SECONDS);
-
-        // add shutdown hook that will issue a remove call.
-        DiscoveryShutdownHook shutdownHook = new DiscoveryShutdownHook( this );
-        Runtime.getRuntime().addShutdownHook( shutdownHook );
+        scheduledExecutor.scheduleAtFixedRate(cleanup, 0, getUdpDiscoveryAttributes().getMaxIdleTimeSec(), TimeUnit.SECONDS);
     }
 
     /**
@@ -322,31 +316,6 @@ public class UDPDiscoveryService
     }
 
     /**
-     * Allows us to set the daemon status on the clockdaemon
-     * <p>
-     * @author aaronsm
-     */
-    protected static class MyThreadFactory
-        implements ThreadFactory
-    {
-        /**
-         * Sets the thread to daemon.
-         * <p>
-         * @param runner
-         * @return a daemon thread
-         */
-        public Thread newThread( Runnable runner )
-        {
-            Thread t = new Thread( runner );
-            String oldName = t.getName();
-            t.setName( "JCS-UDPDiscoveryService-" + oldName );
-            t.setDaemon( true );
-            t.setPriority( Thread.MIN_PRIORITY );
-            return t;
-        }
-    }
-
-    /**
      * Shuts down the receiver.
      */
     public void shutdown()
@@ -376,16 +345,6 @@ public class UDPDiscoveryService
                 log.info( "Shutting down UDP discovery service sender." );
             }
 
-            try
-            {
-                // interrupt all the threads.
-                senderDaemon.shutdownNow();
-            }
-            catch ( Exception e )
-            {
-                log.error( "Problem shutting down UDP sender." );
-            }
-
             // also call the shutdown on the sender thread itself, which
             // will result in a remove command.
             try

Modified: commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java (original)
+++ commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java Sat Jan 26 18:49:14 2013
@@ -34,7 +34,7 @@ public class MockRemoteCacheDispatcher
     public RemoteCacheRequest<?, ?> lastRemoteCacheRequest;
 
     /** The response setup */
-    public RemoteCacheResponse<?, ?> setupRemoteCacheResponse;
+    public RemoteCacheResponse<?> setupRemoteCacheResponse;
 
     /** Records the last and returns setupRemoteCacheResponse.
      * <p>
@@ -43,11 +43,11 @@ public class MockRemoteCacheDispatcher
      * @throws IOException
      */
     @SuppressWarnings("unchecked")
-    public <K extends Serializable, V extends Serializable, KK extends Serializable, VV extends Serializable>
-        RemoteCacheResponse<K, V> dispatchRequest( RemoteCacheRequest<KK, VV> remoteCacheRequest )
+    public <K extends Serializable, V extends Serializable, T>
+        RemoteCacheResponse<T> dispatchRequest( RemoteCacheRequest<K, V> remoteCacheRequest )
         throws IOException
     {
         this.lastRemoteCacheRequest = remoteCacheRequest;
-        return (RemoteCacheResponse<K, V>)setupRemoteCacheResponse;
+        return (RemoteCacheResponse<T>)setupRemoteCacheResponse;
     }
 }

Modified: commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java (original)
+++ commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java Sat Jan 26 18:49:14 2013
@@ -21,6 +21,7 @@ package org.apache.jcs.auxiliary.remote.
 
 import java.io.IOException;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -83,8 +84,9 @@ public class RemoteHttpCacheClientUnitTe
         String key = "key";
 
         ICacheElement<String, String> expected = new CacheElement<String, String>( cacheName, key, "value" );
-        RemoteCacheResponse<String, String> remoteHttpCacheResponse = new RemoteCacheResponse<String, String>();
-        remoteHttpCacheResponse.getPayload().put( key, expected );
+        RemoteCacheResponse<ICacheElement<String, String>> remoteHttpCacheResponse =
+            new RemoteCacheResponse<ICacheElement<String,String>>();
+        remoteHttpCacheResponse.setPayload( expected );
 
         mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
 
@@ -116,8 +118,11 @@ public class RemoteHttpCacheClientUnitTe
         String pattern = "key";
 
         ICacheElement<String, String> expected = new CacheElement<String, String>( cacheName, "key", "value" );
-        RemoteCacheResponse<String, String> remoteHttpCacheResponse = new RemoteCacheResponse<String, String>();
-        remoteHttpCacheResponse.getPayload().put( "key", expected );
+        Map<String, ICacheElement<String, String>> expectedMap = new HashMap<String, ICacheElement<String,String>>();
+        expectedMap.put( "key", expected );
+        RemoteCacheResponse<Map<String, ICacheElement<String, String>>> remoteHttpCacheResponse =
+            new RemoteCacheResponse<Map<String,ICacheElement<String,String>>>();
+        remoteHttpCacheResponse.setPayload( expectedMap );
 
         mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
 
@@ -149,8 +154,11 @@ public class RemoteHttpCacheClientUnitTe
         Set<String> keys = Collections.emptySet();
 
         ICacheElement<String, String> expected = new CacheElement<String, String>( cacheName, "key", "value" );
-        RemoteCacheResponse<String, String> remoteHttpCacheResponse = new RemoteCacheResponse<String, String>();
-        remoteHttpCacheResponse.getPayload().put( "key", expected );
+        Map<String, ICacheElement<String, String>> expectedMap = new HashMap<String, ICacheElement<String,String>>();
+        expectedMap.put( "key", expected );
+        RemoteCacheResponse<Map<String, ICacheElement<String, String>>> remoteHttpCacheResponse =
+            new RemoteCacheResponse<Map<String,ICacheElement<String,String>>>();
+        remoteHttpCacheResponse.setPayload( expectedMap );
 
         mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
 

Modified: commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java (original)
+++ commons/proper/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java Sat Jan 26 18:49:14 2013
@@ -46,7 +46,7 @@ public class RemoteCacheServiceAdaptorUn
         RemoteCacheRequest<String, String> request = null;
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<String> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -69,7 +69,7 @@ public class RemoteCacheServiceAdaptorUn
         RemoteCacheRequest<String, String> request = RemoteCacheRequestFactory.createGetRequest( cacheName, key, requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<Object> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -92,7 +92,7 @@ public class RemoteCacheServiceAdaptorUn
                                                                                                   requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<Object> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -115,7 +115,7 @@ public class RemoteCacheServiceAdaptorUn
                                                                                                   requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<Object> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -139,7 +139,7 @@ public class RemoteCacheServiceAdaptorUn
         RemoteCacheRequest<String, String> request = RemoteCacheRequestFactory.createUpdateRequest( element, requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<String> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -161,7 +161,7 @@ public class RemoteCacheServiceAdaptorUn
         RemoteCacheRequest<String, String> request = RemoteCacheRequestFactory.createRemoveRequest( cacheName, key, requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<String> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -182,7 +182,7 @@ public class RemoteCacheServiceAdaptorUn
         RemoteCacheRequest<String, String> request = RemoteCacheRequestFactory.createRemoveAllRequest( cacheName, requesterId );
 
         // DO WORK
-        RemoteCacheResponse<String, String> result = adaptor.processRequest( request );
+        RemoteCacheResponse<String> result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );

Modified: commons/proper/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java?rev=1438943&r1=1438942&r2=1438943&view=diff
==============================================================================
--- commons/proper/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java (original)
+++ commons/proper/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java Sat Jan 26 18:49:14 2013
@@ -4,12 +4,11 @@ import java.util.Properties;
 
 import junit.framework.TestCase;
 
+import org.apache.jcs.auxiliary.AuxiliaryCache;
 import org.apache.jcs.auxiliary.AuxiliaryCacheConfigurator;
 import org.apache.jcs.auxiliary.MockAuxiliaryCache;
 import org.apache.jcs.auxiliary.MockAuxiliaryCacheAttributes;
 import org.apache.jcs.auxiliary.MockAuxiliaryCacheFactory;
-import org.apache.jcs.engine.CompositeCacheAttributes;
-import org.apache.jcs.engine.ElementAttributes;
 import org.apache.jcs.engine.logging.MockCacheEventLogger;
 
 /** Unit tests for the configurator. */
@@ -41,12 +40,9 @@ public class CompositeCacheConfiguratorU
 
         CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( manager );
 
-        CompositeCache<String, String> cache =
-            new CompositeCache<String, String>( regionName, new CompositeCacheAttributes(), new ElementAttributes() );
-
         // DO WORK
-        MockAuxiliaryCache<String, String> result = (MockAuxiliaryCache<String, String>) configurator
-            .parseAuxiliary( cache, props, auxName, regionName );
+        AuxiliaryCache<String, String> aux = configurator.parseAuxiliary( props, auxName, regionName );
+        MockAuxiliaryCache<String, String> result = (MockAuxiliaryCache<String, String>)aux;
 
         // VERIFY
         assertNotNull( "Should have an auxcache.", result );