[prev in list] [next in list] [prev in thread] [next in thread] 

List:       turbine-jcs-dev
Subject:    svn commit: r726149 [3/3] - in /jakarta/jcs/trunk: ./ src/conf/
From:       asmuts () apache ! org
Date:       2008-12-12 23:37:23
Message-ID: 20081212233725.400CD23888EB () eris ! apache ! org
[Download RAW message or body]

Added: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java \
                (added)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,250 @@
+package org.apache.jcs.auxiliary.remote.http.client;
+
+/*
+ * 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.
+ */
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jcs.engine.CacheConstants;
+
+/**
+ * Used to monitor and repair any failed connection for the remote cache service. By \
default the + * monitor operates in a failure driven mode. That is, it goes into a \
wait state until there is an + * error. TODO consider moving this into an active \
monitoring mode. Upon the notification of a + * connection error, the monitor changes \
to operate in a time driven mode. That is, it attempts to + * recover the connections \
on a periodic basis. When all failed connections are restored, it changes + * back to \
the failure driven mode. + * <p>
+ * This simply pings the service until it works.
+ */
+public class RemoteHttpCacheMonitor
+    implements Runnable
+{
+    /** The logger */
+    private final static Log log = LogFactory.getLog( RemoteHttpCacheMonitor.class \
); +
+    /** The remote cache that we are monitoring */
+    private static RemoteHttpCacheMonitor instance;
+
+    /** Time between checks */
+    private static long idlePeriod = 3 * 1000;
+
+    /** Set of remote caches to monitor. This are added on error, if not before. */
+    private Set remoteHttpCaches = new HashSet();
+
+    /**
+     * Must make sure RemoteCacheMonitor is started before any remote error can be \
detected! +     */
+    private boolean alright = true;
+
+    /** Time driven mode */
+    final static int TIME = 0;
+
+    /** Error driven mode -- only check on health if there is an error */
+    final static int ERROR = 1;
+
+    /** The mode to use */
+    static int mode = ERROR;
+
+    /**
+     * Configures the idle period between repairs.
+     * <p>
+     * @param idlePeriod The new idlePeriod value
+     */
+    public static void setIdlePeriod( long idlePeriod )
+    {
+        if ( idlePeriod > RemoteHttpCacheMonitor.idlePeriod )
+        {
+            RemoteHttpCacheMonitor.idlePeriod = idlePeriod;
+        }
+    }
+
+    /** Constructor for the RemoteCacheMonitor object */
+    private RemoteHttpCacheMonitor()
+    {
+        super();
+    }
+
+    /**
+     * Returns the singleton instance.
+     * <p>
+     * @return The instance value
+     */
+    static RemoteHttpCacheMonitor getInstance()
+    {
+        synchronized ( RemoteHttpCacheMonitor.class )
+        {
+            if ( instance == null )
+            {
+                return instance = new RemoteHttpCacheMonitor();
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * Notifies the cache monitor that an error occurred, and kicks off the error \
recovery process. +     * <p>
+     * @param remoteCache
+     */
+    public void notifyError( RemoteHttpCache remoteCache )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Notified of an error. " + remoteCache );
+        }
+        bad();
+        synchronized ( this )
+        {
+            remoteHttpCaches.add( remoteCache );
+            notify();
+        }
+    }
+
+    // Run forever.
+
+    // Avoid the use of any synchronization in the process of monitoring for
+    // performance reason.
+    // If exception is thrown owing to synchronization,
+    // just skip the monitoring until the next round.
+    /** Main processing method for the RemoteCacheMonitor object */
+    public void run()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Monitoring daemon started" );
+        }
+        do
+        {
+            if ( mode == ERROR )
+            {
+                synchronized ( this )
+                {
+                    if ( alright )
+                    {
+                        // make this configurable, comment out wait to enter
+                        // time driven mode
+                        // Failure driven mode.
+                        try
+                        {
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "FAILURE DRIVEN MODE: cache monitor \
waiting for error" ); +                            }
+                            wait();
+                            // wake up only if there is an error.
+                        }
+                        catch ( InterruptedException ignore )
+                        {
+                            // swallow
+                        }
+                    }
+                }
+            }
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "TIME DRIVEN MODE: cache monitor sleeping for " + \
idlePeriod ); +                }
+                // Time driven mode: sleep between each round of recovery
+                // attempt.
+                // will need to test not just check status
+            }
+
+            try
+            {
+                Thread.sleep( idlePeriod );
+            }
+            catch ( InterruptedException ex )
+            {
+                // ignore;
+            }
+
+            // The "alright" flag must be false here.
+            // Simply presume we can fix all the errors until proven otherwise.
+            synchronized ( this )
+            {
+                alright = true;
+            }
+
+            // Make a copy
+            Set remoteCachesToExamine = new HashSet();
+            synchronized ( this )
+            {
+                remoteCachesToExamine.addAll( this.remoteHttpCaches );
+            }
+            // If any cache is in error, it strongly suggests all caches
+            // managed by the
+            // same RmicCacheManager instance are in error. So we fix
+            // them once and for all.
+            Iterator itr2 = remoteCachesToExamine.iterator();
+            while ( itr2.hasNext() )
+            {
+                try
+                {
+                    RemoteHttpCache remoteCache = (RemoteHttpCache) itr2.next();
+
+                    if ( remoteCache.getStatus() == CacheConstants.STATUS_ERROR )
+                    {
+                        RemoteHttpCacheAttributes attributes = \
remoteCache.getRemoteHttpCacheAttributes(); +
+                        RemoteHttpCacheClient remoteService = \
RemoteHttpCacheManager.getInstance() +                            \
.createRemoteHttpCacheClientForAttributes( attributes ); +
+                        if ( log.isInfoEnabled() )
+                        {
+                            log.info( "Performing Alive check on service " + \
remoteService ); +                        }
+                        // If we can't fix them, just skip and re-try in
+                        // the next round.
+                        if ( remoteService.isAlive() )
+                        {
+                            remoteCache.fixCache( remoteService );
+                        }
+                        else
+                        {
+                            bad();
+                        }
+                        break;
+                    }
+                }
+                catch ( Exception ex )
+                {
+                    bad();
+                    // Problem encountered in fixing the caches managed by a
+                    // RemoteCacheManager instance.
+                    // Soldier on to the next RemoteHttpCache.
+                    log.error( ex );
+                }
+            }
+        }
+        while ( true );
+    }
+
+    /** Sets the "aright" flag to false in a critical section. */
+    private synchronized void bad()
+    {
+        alright = false;
+    }
+}

Added: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java \
                (added)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,30 @@
+package org.apache.jcs.auxiliary.remote.http.client;
+
+import org.apache.jcs.auxiliary.remote.AbsractRemoteCacheListener;
+import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.jcs.engine.behavior.ICompositeCacheManager;
+
+/** Does nothing */
+public class RemoteHttpClientListener
+    extends AbsractRemoteCacheListener
+{
+    /**
+     * Only need one since it does work for all regions, just reference by multiple \
region names. +     * <p>
+     * The constructor exports this object, making it available to receive incoming \
calls. The +     * callback port is anonymous unless a local port value was specified \
in the configuration. +     * <p>
+     * @param irca
+     * @param cacheMgr
+     */
+    public RemoteHttpClientListener( IRemoteCacheAttributes irca, \
ICompositeCacheManager cacheMgr ) +    {
+        super( irca, cacheMgr );
+    }
+
+    /** Nothing */
+    public void dispose()
+    {
+        // noop
+    }
+}

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/ \
remote/http/server/RemoteCacheServiceAdaptor.java?rev=726149&r1=726148&r2=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java \
                (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java \
Fri Dec 12 15:37:22 2008 @@ -5,9 +5,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheService;
-import org.apache.jcs.auxiliary.remote.http.behavior.IRemoteHttpCacheConstants;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheRequest;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheResponse;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
 import org.apache.jcs.engine.behavior.ICacheElement;
 import org.apache.jcs.engine.control.CompositeCacheManager;
 
@@ -24,13 +23,13 @@
 
     /** The service that does the work. */
     private IRemoteCacheService remoteCacheService;
-    
+
     /** This is for testing without the factory. */
     protected RemoteCacheServiceAdaptor()
     {
         // for testing.
     }
-    
+
     /**
      * Create a process with a cache manager.
      * <p>
@@ -47,9 +46,9 @@
      * @param request
      * @return RemoteHttpCacheResponse, never null
      */
-    public RemoteHttpCacheResponse processRequest( RemoteHttpCacheRequest request )
+    public RemoteCacheResponse processRequest( RemoteCacheRequest request )
     {
-        RemoteHttpCacheResponse response = new RemoteHttpCacheResponse();
+        RemoteCacheResponse response = new RemoteCacheResponse();
 
         if ( request == null )
         {
@@ -64,43 +63,45 @@
             {
                 switch ( request.getRequestType() )
                 {
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_GET:
-                        ICacheElement element = getRemoteCacheService().get( \
                request.getCacheName(),
-                                                                                 \
                request.getKey(),
-                                                                                 \
request.getRequesterId() ); +                    case \
RemoteCacheRequest.REQUEST_TYPE_GET: +                        ICacheElement element = \
getRemoteCacheService().get( request.getCacheName(), request.getKey(), +              \
request.getRequesterId() );  if ( element != null )
                         {
                             response.getPayload().put( element.getKey(), element );
                         }
                         break;
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MULTIPLE:
+                    case RemoteCacheRequest.REQUEST_TYPE_GET_MULTIPLE:
                         Map elementMap = getRemoteCacheService().getMultiple( \
                request.getCacheName(),
-                                                                                  \
                request.getKeySet(),
-                                                                                  \
request.getRequesterId() ); +                                                         \
request.getKeySet(), +                                                                \
request.getRequesterId() );  if ( elementMap != null )
                         {
                             response.getPayload().putAll( elementMap );
                         }
                         break;
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MATCHING:
+                    case RemoteCacheRequest.REQUEST_TYPE_GET_MATCHING:
                         Map elementMapMatching = \
                getRemoteCacheService().getMatching( request.getCacheName(),
-                                                                                     \
                request.getPattern(),
-                                                                                     \
request.getRequesterId() ); +                                                         \
request.getPattern(), +                                                               \
request.getRequesterId() );  if ( elementMapMatching != null )
                         {
                             response.getPayload().putAll( elementMapMatching );
                         }
                         break;
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE:
+                    case RemoteCacheRequest.REQUEST_TYPE_REMOVE:
                         getRemoteCacheService().remove( request.getCacheName(), \
                request.getKey(),
-                                                            request.getRequesterId() \
); +                                                        request.getRequesterId() \
);  break;
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE_ALL:
+                    case RemoteCacheRequest.REQUEST_TYPE_REMOVE_ALL:
                         getRemoteCacheService().removeAll( request.getCacheName(), \
request.getRequesterId() );  break;
-                    case IRemoteHttpCacheConstants.REQUEST_TYPE_UPDATE:
+                    case RemoteCacheRequest.REQUEST_TYPE_UPDATE:
                         getRemoteCacheService().update( request.getCacheElement(), \
request.getRequesterId() );  break;
+                    case RemoteCacheRequest.REQUEST_TYPE_ALIVE_CHECK:
+                        response.setSuccess( true );
+                        break;
                     default:
                         String message = "Unknown event type.  Cannot process " + \
request;  log.warn( message );

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/ \
remote/http/server/RemoteHttpCacheServlet.java?rev=726149&r1=726148&r2=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java \
                (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java \
Fri Dec 12 15:37:22 2008 @@ -20,8 +20,9 @@
  */
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
@@ -31,9 +32,10 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheRequest;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheResponse;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
 import org.apache.jcs.engine.control.CompositeCacheManager;
+import org.apache.jcs.utils.serialization.StandardSerializer;
 
 /**
  * This servlet simply reads and writes objects. The requests are packaged in a \
general wrapper. The @@ -54,6 +56,9 @@
     /** Processes requests */
     private RemoteCacheServiceAdaptor remoteHttpCacheServiceAdaptor;
 
+    /** This needs to be standard, since the other side is standard */
+    private StandardSerializer serializer = new StandardSerializer();
+
     /**
      * Initializes the cache.
      * <p>
@@ -88,9 +93,9 @@
             log.debug( "Servicing a request." );
         }
 
-        RemoteHttpCacheRequest remoteRequest = readRequest( request );
+        RemoteCacheRequest remoteRequest = readRequest( request );
 
-        RemoteHttpCacheResponse cacheResponse = \
getRemoteHttpCacheServiceAdaptor().processRequest( remoteRequest ); +        \
RemoteCacheResponse cacheResponse = \
getRemoteHttpCacheServiceAdaptor().processRequest( remoteRequest );  
         writeResponse( response, cacheResponse );
     }
@@ -101,20 +106,18 @@
      * @param request
      * @return RemoteHttpCacheRequest
      */
-    protected RemoteHttpCacheRequest readRequest( HttpServletRequest request )
+    protected RemoteCacheRequest readRequest( HttpServletRequest request )
     {
-        RemoteHttpCacheRequest remoteRequest = null;
+        RemoteCacheRequest remoteRequest = null;
         try
         {
-            ObjectInputStream ois = new ObjectInputStream( request.getInputStream() \
                );
-
+            InputStream inputStream = request.getInputStream();
             if ( log.isDebugEnabled() )
             {
                 log.debug( "after getting input stream and before reading it" );
             }
 
-            remoteRequest = (RemoteHttpCacheRequest) ois.readObject();
-            ois.close();
+            remoteRequest = readRequestFromStream( inputStream );
         }
         catch ( Exception e )
         {
@@ -124,28 +127,48 @@
     }
 
     /**
+     * Reads the response from the stream and then closes it.
+     * <p>
+     * @param inputStream
+     * @return RemoteHttpCacheRequest
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    protected RemoteCacheRequest readRequestFromStream( InputStream inputStream )
+        throws IOException, ClassNotFoundException
+    {
+        RemoteCacheRequest remoteRequest;
+        ObjectInputStream ois = new ObjectInputStream( inputStream );
+
+        remoteRequest = (RemoteCacheRequest) ois.readObject();
+        ois.close();
+        return remoteRequest;
+    }
+
+    /**
      * Write the response to the output stream.
      * <p>
      * @param response
      * @param cacheResponse
      */
-    protected void writeResponse( HttpServletResponse response, \
RemoteHttpCacheResponse cacheResponse ) +    protected void writeResponse( \
HttpServletResponse response, RemoteCacheResponse cacheResponse )  {
         try
         {
             response.setContentType( "application/octet-stream" );
 
-            ObjectOutputStream oos = new ObjectOutputStream( \
response.getOutputStream() ); +            byte[] responseAsByteAray = \
serializer.serialize( cacheResponse ); +            response.setContentLength( \
responseAsByteAray.length );  
+            OutputStream outputStream = response.getOutputStream();
             if ( log.isDebugEnabled() )
             {
-                log.debug( "Opened output stream." );
+                log.debug( "Opened output stream.  Response size: " + \
responseAsByteAray.length );  }
-
             // WRITE
-            oos.writeObject( cacheResponse );
-            oos.flush();
-            oos.close();
+            outputStream.write( responseAsByteAray );
+            outputStream.flush();
+            outputStream.close();
         }
         catch ( Exception e )
         {

Copied: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java \
(from r724518, jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactory.java)
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/ \
remote/util/RemoteCacheRequestFactory.java?p2=jakarta/jcs/trunk/src/java/org/apache/jc \
s/auxiliary/remote/util/RemoteCacheRequestFactory.java&p1=jakarta/jcs/trunk/src/java/o \
rg/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactory.java&r1=724518&r2=726149&rev=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactory.java \
                (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java \
Fri Dec 12 15:37:22 2008 @@ -1,22 +1,21 @@
-package org.apache.jcs.auxiliary.remote.http.client;
+package org.apache.jcs.auxiliary.remote.util;
 
 import java.io.Serializable;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.jcs.auxiliary.remote.http.behavior.IRemoteHttpCacheConstants;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
 import org.apache.jcs.engine.behavior.ICacheElement;
 
 /**
  * This creates request objects. You could write your own client and use the objects \
                from this
  * factory.
  */
-public class RemoteHttpClientRequestFactory
+public class RemoteCacheRequestFactory
 {
     /** The Logger. */
-    private final static Log log = LogFactory.getLog( \
RemoteHttpClientRequestFactory.class ); +    private final static Log log = \
LogFactory.getLog( RemoteCacheRequestFactory.class );  
     /**
      * Creates a get Request.
@@ -26,13 +25,13 @@
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createGetRequest( String cacheName, \
Serializable key, long requesterId ) +    public static RemoteCacheRequest \
createGetRequest( String cacheName, Serializable key, long requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         request.setCacheName( cacheName );
         request.setKey( key );
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_GET );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_GET );
 
         if ( log.isDebugEnabled() )
         {
@@ -41,7 +40,7 @@
 
         return request;
     }
-    
+
     /**
      * Creates a getMatching Request.
      * <p>
@@ -50,13 +49,13 @@
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createGetMatchingRequest( String cacheName, \
String pattern, long requesterId ) +    public static RemoteCacheRequest \
createGetMatchingRequest( String cacheName, String pattern, long requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         request.setCacheName( cacheName );
         request.setPattern( pattern );
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MATCHING \
); +        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_GET_MATCHING );
 
         if ( log.isDebugEnabled() )
         {
@@ -65,7 +64,7 @@
 
         return request;
     }
-    
+
     /**
      * Creates a getMultiple Request.
      * <p>
@@ -74,13 +73,13 @@
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createGetMultipleRequest( String cacheName, \
Set keys, long requesterId ) +    public static RemoteCacheRequest \
createGetMultipleRequest( String cacheName, Set keys, long requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         request.setCacheName( cacheName );
         request.setKeySet( keys );
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MULTIPLE \
); +        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_GET_MULTIPLE );
 
         if ( log.isDebugEnabled() )
         {
@@ -89,7 +88,7 @@
 
         return request;
     }
-    
+
     /**
      * Creates a remove Request.
      * <p>
@@ -98,13 +97,13 @@
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createRemoveRequest( String cacheName, \
Serializable key, long requesterId ) +    public static RemoteCacheRequest \
createRemoveRequest( String cacheName, Serializable key, long requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         request.setCacheName( cacheName );
         request.setKey( key );
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_REMOVE );
 
         if ( log.isDebugEnabled() )
         {
@@ -115,18 +114,64 @@
     }
     
     /**
+     * Creates a GetGroupKeys Request.
+     * <p>
+     * @param cacheName
+     * @param groupName
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static RemoteCacheRequest createGetGroupKeysRequest( String cacheName, \
String groupName, long requesterId ) +    {
+        RemoteCacheRequest request = new RemoteCacheRequest();
+        request.setCacheName( cacheName );
+        request.setKey( groupName );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_GET_GROUP_KEYS );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
      * Creates a removeAll Request.
      * <p>
      * @param cacheName
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createRemoveAllRequest( String cacheName, \
long requesterId ) +    public static RemoteCacheRequest createRemoveAllRequest( \
String cacheName, long requesterId ) +    {
+        RemoteCacheRequest request = new RemoteCacheRequest();
+        request.setCacheName( cacheName );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_REMOVE_ALL );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a dispose Request.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static RemoteCacheRequest createDisposeRequest( String cacheName, long \
requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         request.setCacheName( cacheName );
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE_ALL );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_DIPOSE );
 
         if ( log.isDebugEnabled() )
         {
@@ -143,9 +188,9 @@
      * @param requesterId
      * @return RemoteHttpCacheRequest
      */
-    public static RemoteHttpCacheRequest createUpdateRequest( ICacheElement \
cacheElement, long requesterId ) +    public static RemoteCacheRequest \
createUpdateRequest( ICacheElement cacheElement, long requesterId )  {
-        RemoteHttpCacheRequest request = new RemoteHttpCacheRequest();
+        RemoteCacheRequest request = new RemoteCacheRequest();
         if ( cacheElement != null )
         {
             request.setCacheName( cacheElement.getCacheName() );
@@ -157,7 +202,27 @@
             log.error( "Can't create a proper update request for a null cache \
element." );  }
         request.setRequesterId( requesterId );
-        request.setRequestType( IRemoteHttpCacheConstants.REQUEST_TYPE_UPDATE );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_UPDATE );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+    
+    /**
+     * Creates an alive check Request.
+     * <p>
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static RemoteCacheRequest createAliveCheckRequest( long requesterId )
+    {
+        RemoteCacheRequest request = new RemoteCacheRequest();
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteCacheRequest.REQUEST_TYPE_ALIVE_CHECK );
 
         if ( log.isDebugEnabled() )
         {

Propchange: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java
                
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestUtil.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestUtil.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestUtil.java \
                (added)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestUtil.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,38 @@
+package org.apache.jcs.auxiliary.remote.util;
+
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+
+/** Utilities for the request object */
+public class RemoteCacheRequestUtil
+{
+    /**
+     * @param type
+     * @return name for the type
+     */
+    public static String getRequestTypeName( byte type )
+    {
+        switch ( type )
+        {
+            case RemoteCacheRequest.REQUEST_TYPE_ALIVE_CHECK:
+                return "AliveCheck";
+            case RemoteCacheRequest.REQUEST_TYPE_GET:
+                return "Get";
+            case RemoteCacheRequest.REQUEST_TYPE_GET_MULTIPLE:
+                return "GetMultiple";
+            case RemoteCacheRequest.REQUEST_TYPE_GET_MATCHING:
+                return "GetMatching";
+            case RemoteCacheRequest.REQUEST_TYPE_REMOVE:
+                return "Remove";
+            case RemoteCacheRequest.REQUEST_TYPE_REMOVE_ALL:
+                return "RemoveAll";
+            case RemoteCacheRequest.REQUEST_TYPE_UPDATE:
+                return "Update";
+            case RemoteCacheRequest.REQUEST_TYPE_GET_GROUP_KEYS:
+                return "GetGroupKeys";
+            case RemoteCacheRequest.REQUEST_TYPE_DIPOSE:
+                return "Dispose";
+            default:
+                return "Unknown";
+        }
+    }
+}

Copied: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheRequest.java \
(from r724518, jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/value/RemoteHttpCacheRequest.java)
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/ \
remote/value/RemoteCacheRequest.java?p2=jakarta/jcs/trunk/src/java/org/apache/jcs/auxi \
liary/remote/value/RemoteCacheRequest.java&p1=jakarta/jcs/trunk/src/java/org/apache/jc \
s/auxiliary/remote/http/value/RemoteHttpCacheRequest.java&r1=724518&r2=726149&rev=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/value/RemoteHttpCacheRequest.java \
                (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheRequest.java \
Fri Dec 12 15:37:22 2008 @@ -1,4 +1,4 @@
-package org.apache.jcs.auxiliary.remote.http.value;
+package org.apache.jcs.auxiliary.remote.value;
 
 import java.io.Serializable;
 import java.util.Set;
@@ -11,12 +11,39 @@
  * Rather than creating sub object types, I created on object thsat has values for \
                all types of
  * requests.
  */
-public class RemoteHttpCacheRequest
+public class RemoteCacheRequest
     implements Serializable
 {
     /** Don't change. */
     private static final long serialVersionUID = -8858447417390442569L;
 
+    /** Alive check request type. */
+    public static final byte REQUEST_TYPE_ALIVE_CHECK = 0;
+
+    /** Get request type. */
+    public static final byte REQUEST_TYPE_GET = 1;
+
+    /** Get Multiple request type. */
+    public static final byte REQUEST_TYPE_GET_MULTIPLE = 2;
+
+    /** Get Matching request type. */
+    public static final byte REQUEST_TYPE_GET_MATCHING = 3;
+
+    /** Update request type. */
+    public static final byte REQUEST_TYPE_UPDATE = 4;
+
+    /** Remove request type. */
+    public static final byte REQUEST_TYPE_REMOVE = 5;
+
+    /** Remove All request type. */
+    public static final byte REQUEST_TYPE_REMOVE_ALL = 6;
+
+    /** Remove All request type. */
+    public static final byte REQUEST_TYPE_GET_GROUP_KEYS = 7;
+
+    /** Remove All request type. */
+    public static final byte REQUEST_TYPE_DIPOSE = 8;
+
     /** The request type specifies the type of request: get, put, remove, . . */
     private byte requestType = -1;
 

Propchange: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheRequest.java
                
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java \
(from r724518, jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/value/RemoteHttpCacheResponse.java)
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/ \
remote/value/RemoteCacheResponse.java?p2=jakarta/jcs/trunk/src/java/org/apache/jcs/aux \
iliary/remote/value/RemoteCacheResponse.java&p1=jakarta/jcs/trunk/src/java/org/apache/ \
jcs/auxiliary/remote/http/value/RemoteHttpCacheResponse.java&r1=724518&r2=726149&rev=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/http/value/RemoteHttpCacheResponse.java \
                (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java \
Fri Dec 12 15:37:22 2008 @@ -1,4 +1,4 @@
-package org.apache.jcs.auxiliary.remote.http.value;
+package org.apache.jcs.auxiliary.remote.value;
 
 import java.io.Serializable;
 import java.util.HashMap;
@@ -8,7 +8,7 @@
  * This is the response wrapper. The servlet wraps all different type of responses \
                in one of these
  * objects.
  */
-public class RemoteHttpCacheResponse
+public class RemoteCacheResponse
     implements Serializable
 {
     /** Don't change. */

Propchange: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/value/RemoteCacheResponse.java
                
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: jakarta/jcs/trunk/src/test-conf/TestRemoteHttpCache.ccf
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test-conf/TestRemoteHttpCache.ccf?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/test-conf/TestRemoteHttpCache.ccf (added)
+++ jakarta/jcs/trunk/src/test-conf/TestRemoteHttpCache.ccf Fri Dec 12 15:37:22 2008
@@ -0,0 +1,39 @@
+# 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.
+# #############################################################
+# ################# DEFAULT CACHE REGION  #####################
+# sets the default aux value for any non configured caches
+jcs.default=RC
+jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
+jcs.default.cacheattributes.MaxObjects=0
+jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
 +jcs.default.cacheattributes.UseMemoryShrinker=true
+jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
+jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
+jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
+jcs.default.elementattributes.IsEternal=false
+jcs.default.elementattributes.MaxLifeSeconds=700
+jcs.default.elementattributes.IdleTime=1800
+jcs.default.elementattributes.IsSpool=true
+jcs.default.elementattributes.IsRemote=true
+jcs.default.elementattributes.IsLateral=true
+
+
+## The Http Remote Cache Client
+jcs.auxiliary.RC=org.apache.jcs.auxiliary.remote.http.client.RemoteHttpCacheFactory
+jcs.auxiliary.RC.attributes=org.apache.jcs.auxiliary.remote.http.client.RemoteHttpCacheAttributes
 +jcs.auxiliary.RC.attributes.url=http://localhost:8000/jcs-app/RemoteCache

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheClientTester.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheClientTester.java?rev=726149&r1=726148&r2=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheClientTester.java \
                (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheClientTester.java \
Fri Dec 12 15:37:22 2008 @@ -24,6 +24,7 @@
 import java.net.MalformedURLException;
 import java.rmi.Naming;
 import java.rmi.NotBoundException;
+import java.rmi.Remote;
 import java.rmi.registry.Registry;
 import java.rmi.server.ExportException;
 import java.rmi.server.UnicastRemoteObject;
@@ -41,7 +42,7 @@
  * Manual tester.
  */
 public class RemoteCacheClientTester
-    implements IRemoteCacheListener, IRemoteCacheConstants
+    implements IRemoteCacheListener, IRemoteCacheConstants, Remote
 {
     /** the observer */
     protected ICacheObserver watch;

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java \
                (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/MockRemoteCacheDispatcher.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,30 @@
+package org.apache.jcs.auxiliary.remote.http.client;
+
+import java.io.IOException;
+
+import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheDispatcher;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
+
+/** For testing the service. */
+public class MockRemoteCacheDispatcher
+    implements IRemoteCacheDispatcher
+{
+    /** The last request passes to dispatch */
+    public RemoteCacheRequest lastRemoteCacheRequest;
+    
+    /** The response setup */
+    public RemoteCacheResponse setupRemoteCacheResponse;
+    
+    /** Records the last and returns setupRemoteCacheResponse. 
+     * <p>
+     * @param remoteCacheRequest 
+     * @return RemoteCacheResponse
+     * @throws IOException */
+    public RemoteCacheResponse dispatchRequest( RemoteCacheRequest \
remoteCacheRequest ) +        throws IOException
+    {
+        this.lastRemoteCacheRequest = remoteCacheRequest;
+        return setupRemoteCacheResponse;
+    }
+}

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java \
                (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheClientUnitTest.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,249 @@
+package org.apache.jcs.auxiliary.remote.http.client;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
+import org.apache.jcs.engine.CacheElement;
+import org.apache.jcs.engine.behavior.ICacheElement;
+
+/** Unit tests for the client. */
+public class RemoteHttpCacheClientUnitTest
+    extends TestCase
+{
+    /**
+     * Verify get functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testGet_nullFromDispatcher()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+        String key = "key";
+
+        mockDispatcher.setupRemoteCacheResponse = null;
+
+        // DO WORK
+        ICacheElement result = client.get( cacheName, key );
+
+        // VERIFY
+        assertNull( "Wrong result.", result );
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_GET, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+
+    /**
+     * Verify get functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testGet_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+        String key = "key";
+
+        ICacheElement expected = new CacheElement( cacheName, key, "value" );
+        RemoteCacheResponse remoteHttpCacheResponse = new RemoteCacheResponse();
+        remoteHttpCacheResponse.getPayload().put( key, expected );
+
+        mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
+
+        // DO WORK
+        ICacheElement result = client.get( cacheName, key );
+
+        // VERIFY
+        assertEquals( "Wrong result.", expected, result );
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_GET, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+
+    /**
+     * Verify get functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testGetMatching_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+        String pattern = "key";
+
+        ICacheElement expected = new CacheElement( cacheName, "key", "value" );
+        RemoteCacheResponse remoteHttpCacheResponse = new RemoteCacheResponse();
+        remoteHttpCacheResponse.getPayload().put( "key", expected );
+
+        mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
+
+        // DO WORK
+        Map result = client.getMatching( cacheName, pattern );
+
+        // VERIFY
+        assertEquals( "Wrong result.", expected, result.get( "key" ) );
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_GET_MATCHING,
+                      mockDispatcher.lastRemoteCacheRequest.getRequestType() );
+    }
+
+    /**
+     * Verify get functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testGetMultiple_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+        Set keys = Collections.EMPTY_SET;
+
+        ICacheElement expected = new CacheElement( cacheName, "key", "value" );
+        RemoteCacheResponse remoteHttpCacheResponse = new RemoteCacheResponse();
+        remoteHttpCacheResponse.getPayload().put( "key", expected );
+
+        mockDispatcher.setupRemoteCacheResponse = remoteHttpCacheResponse;
+
+        // DO WORK
+        Map result = client.getMultiple( cacheName, keys );
+
+        // VERIFY
+        assertEquals( "Wrong result.", expected, result.get( "key" ) );
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_GET_MULTIPLE,
+                      mockDispatcher.lastRemoteCacheRequest.getRequestType() );
+    }
+
+    /**
+     * Verify remove functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testRemove_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+        String key = "key";
+
+        // DO WORK
+        client.remove( cacheName, key );
+
+        // VERIFY
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_REMOVE, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+
+    /**
+     * Verify removeall functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testRemoveAll_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+
+        // DO WORK
+        client.removeAll( cacheName );
+
+        // VERIFY
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_REMOVE_ALL, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+
+    /**
+     * Verify update functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testUpdate_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+
+        ICacheElement element = new CacheElement( cacheName, "key", "value" );
+
+        // DO WORK
+        client.update( element );
+
+        // VERIFY
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_UPDATE, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+
+    /**
+     * Verify dispose functionality
+     * <p>
+     * @throws IOException
+     */
+    public void testDispose_normal()
+        throws IOException
+    {
+        // SETUP
+        RemoteHttpCacheAttributes attributes = new RemoteHttpCacheAttributes();
+        RemoteHttpCacheClient client = new RemoteHttpCacheClient( attributes );
+
+        MockRemoteCacheDispatcher mockDispatcher = new MockRemoteCacheDispatcher();
+        client.setRemoteDispatcher( mockDispatcher );
+
+        String cacheName = "test";
+
+        // DO WORK
+        client.dispose( cacheName );
+
+        // VERIFY
+        assertEquals( "Wrong type.", RemoteCacheRequest.REQUEST_TYPE_DIPOSE, \
mockDispatcher.lastRemoteCacheRequest +            .getRequestType() );
+    }
+}

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java?rev=726149&view=auto
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java \
                (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java \
Fri Dec 12 15:37:22 2008 @@ -0,0 +1,55 @@
+package org.apache.jcs.auxiliary.remote.http.client;
+
+import junit.framework.TestCase;
+
+import org.apache.jcs.JCS;
+
+/** Manual tester for a JCS instance configured to use the http client. */
+public class RemoteHttpCacheManualTester
+    extends TestCase
+{
+    /** number to use for the test */
+    private static int items = 100;
+
+    /**
+     * Test setup
+     */
+    public void setUp()
+    {
+        JCS.setConfigFilename( "/TestRemoteHttpCache.ccf" );
+    }
+
+    /**
+     * A unit test for JUnit
+     * @exception Exception Description of the Exception
+     */
+    public void testSimpleLoad()
+        throws Exception
+    {
+        JCS jcs = JCS.getInstance( "testCache1" );
+
+        jcs.put( "TestKey", "TestValue" );
+
+        System.out.println( jcs.getStats() );
+
+        for ( int i = 1; i <= items; i++ )
+        {
+            jcs.put( i + ":key", "data" + i );
+        }
+
+        for ( int i = items; i > 0; i-- )
+        {
+            String res = (String) jcs.get( i + ":key" );
+            if ( res == null )
+            {
+                //assertNotNull( "[" + i + ":key] should not be null", res );
+            }
+        }
+
+        // test removal
+        jcs.remove( "300:key" );
+        assertNull( jcs.get( "TestKey" ) );
+
+        System.out.println( jcs.getStats() );
+    }
+}

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/ \
remote/http/server/RemoteCacheServiceAdaptorUnitTest.java?rev=726149&r1=726148&r2=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java \
                (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptorUnitTest.java \
Fri Dec 12 15:37:22 2008 @@ -7,9 +7,9 @@
 import junit.framework.TestCase;
 
 import org.apache.jcs.auxiliary.remote.MockRemoteCacheService;
-import org.apache.jcs.auxiliary.remote.http.client.RemoteHttpClientRequestFactory;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheRequest;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheResponse;
+import org.apache.jcs.auxiliary.remote.util.RemoteCacheRequestFactory;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheResponse;
 import org.apache.jcs.engine.CacheElement;
 
 /** Unit tests for the adaptor. */
@@ -28,10 +28,10 @@
         String cacheName = "test";
         Serializable key = "key";
         long requesterId = 2;
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createGetRequest( cacheName, key, requesterId ); +     \
RemoteCacheRequest request = RemoteCacheRequestFactory.createGetRequest( cacheName, \
key, requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -50,11 +50,11 @@
         String cacheName = "test";
         String pattern = "pattern";
         long requesterId = 2;
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createGetMatchingRequest( cacheName, pattern, +        \
RemoteCacheRequest request = RemoteCacheRequestFactory.createGetMatchingRequest( \
                cacheName, pattern,
                                                                                      \
requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -73,11 +73,11 @@
         String cacheName = "test";
         Set keys = Collections.EMPTY_SET;
         long requesterId = 2;
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createGetMultipleRequest( cacheName, keys, +        \
RemoteCacheRequest request = RemoteCacheRequestFactory.createGetMultipleRequest( \
                cacheName, keys,
                                                                                      \
requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -98,10 +98,10 @@
         Serializable key = "key";
         long requesterId = 2;
         CacheElement element = new CacheElement( cacheName, key, null );
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createUpdateRequest( element, requesterId ); +        \
RemoteCacheRequest request = RemoteCacheRequestFactory.createUpdateRequest( element, \
requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -120,10 +120,10 @@
         String cacheName = "test";
         Serializable key = "key";
         long requesterId = 2;
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createRemoveRequest( cacheName, key, requesterId ); +  \
RemoteCacheRequest request = RemoteCacheRequestFactory.createRemoveRequest( \
cacheName, key, requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );
@@ -141,10 +141,10 @@
 
         String cacheName = "testRemoveALl";
         long requesterId = 2;
-        RemoteHttpCacheRequest request = \
RemoteHttpClientRequestFactory.createRemoveAllRequest( cacheName, requesterId ); +    \
RemoteCacheRequest request = RemoteCacheRequestFactory.createRemoveAllRequest( \
cacheName, requesterId );  
         // DO WORK
-        RemoteHttpCacheResponse result = adaptor.processRequest( request );
+        RemoteCacheResponse result = adaptor.processRequest( request );
 
         // VERIFY
         assertNotNull( "Should have a result.", result );

Copied: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactoryUnitTest.java \
(from r724518, jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactoryUnitTest.java)
                
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/ \
remote/util/RemoteCacheRequestFactoryUnitTest.java?p2=jakarta/jcs/trunk/src/test/org/a \
pache/jcs/auxiliary/remote/util/RemoteCacheRequestFactoryUnitTest.java&p1=jakarta/jcs/ \
trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactoryUnitTest.java&r1=724518&r2=726149&rev=726149&view=diff
 ==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/http/client/RemoteHttpClientRequestFactoryUnitTest.java \
                (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactoryUnitTest.java \
Fri Dec 12 15:37:22 2008 @@ -1,17 +1,17 @@
-package org.apache.jcs.auxiliary.remote.http.client;
+package org.apache.jcs.auxiliary.remote.util;
 
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Set;
 
-import org.apache.jcs.auxiliary.remote.http.behavior.IRemoteHttpCacheConstants;
-import org.apache.jcs.auxiliary.remote.http.value.RemoteHttpCacheRequest;
-import org.apache.jcs.engine.CacheElement;
-
 import junit.framework.TestCase;
 
+import org.apache.jcs.auxiliary.remote.util.RemoteCacheRequestFactory;
+import org.apache.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.jcs.engine.CacheElement;
+
 /** Unit tests for the request creator. */
-public class RemoteHttpClientRequestFactoryUnitTest
+public class RemoteCacheRequestFactoryUnitTest
     extends TestCase
 {
     /** Simple test */
@@ -21,16 +21,16 @@
         String cacheName = "test";
         Serializable key = "key";
         long requesterId = 2;
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
                RemoteHttpClientRequestFactory.createGetRequest( cacheName, key, \
                requesterId );
-        
+        RemoteCacheRequest result = RemoteCacheRequestFactory.createGetRequest( \
cacheName, key, requesterId ); +
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", IRemoteHttpCacheConstants.REQUEST_TYPE_GET, \
result.getRequestType() ); +        assertEquals( "Wrong type", \
RemoteCacheRequest.REQUEST_TYPE_GET, result.getRequestType() );  }
-    
+
     /** Simple test */
     public void testCreateGetMatchingRequest_Normal()
     {
@@ -38,16 +38,17 @@
         String cacheName = "test";
         String pattern = "pattern";
         long requesterId = 2;
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
RemoteHttpClientRequestFactory.createGetMatchingRequest( cacheName, pattern, \
                requesterId );
-        
+        RemoteCacheRequest result = \
RemoteCacheRequestFactory.createGetMatchingRequest( cacheName, pattern, +             \
requesterId ); +
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", \
IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MATCHING, result.getRequestType() ); +     \
assertEquals( "Wrong type", RemoteCacheRequest.REQUEST_TYPE_GET_MATCHING, \
result.getRequestType() );  }
-    
+
     /** Simple test */
     public void testCreateGetMultipleRequest_Normal()
     {
@@ -55,17 +56,17 @@
         String cacheName = "test";
         Set keys = Collections.EMPTY_SET;
         long requesterId = 2;
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
RemoteHttpClientRequestFactory.createGetMultipleRequest( cacheName, keys, requesterId \
                );
-        
+        RemoteCacheRequest result = \
RemoteCacheRequestFactory.createGetMultipleRequest( cacheName, keys, +                \
requesterId ); +
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", \
IRemoteHttpCacheConstants.REQUEST_TYPE_GET_MULTIPLE, result.getRequestType() ); +     \
assertEquals( "Wrong type", RemoteCacheRequest.REQUEST_TYPE_GET_MULTIPLE, \
result.getRequestType() );  }
-    
-    
+
     /** Simple test */
     public void testCreateRemoveRequest_Normal()
     {
@@ -73,33 +74,33 @@
         String cacheName = "test";
         Serializable key = "key";
         long requesterId = 2;
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
                RemoteHttpClientRequestFactory.createRemoveRequest( cacheName, key, \
                requesterId );
-        
+        RemoteCacheRequest result = RemoteCacheRequestFactory
+            .createRemoveRequest( cacheName, key, requesterId );
+
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE, \
result.getRequestType() ); +        assertEquals( "Wrong type", \
RemoteCacheRequest.REQUEST_TYPE_REMOVE, result.getRequestType() );  }
-    
-    
+
     /** Simple test */
     public void testCreateRemoveAllRequest_Normal()
     {
         // SETUP
         String cacheName = "test";
         long requesterId = 2;
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
                RemoteHttpClientRequestFactory.createRemoveAllRequest( cacheName, \
                requesterId );
-        
+        RemoteCacheRequest result = \
RemoteCacheRequestFactory.createRemoveAllRequest( cacheName, requesterId ); +
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", \
IRemoteHttpCacheConstants.REQUEST_TYPE_REMOVE_ALL, result.getRequestType() ); +       \
assertEquals( "Wrong type", RemoteCacheRequest.REQUEST_TYPE_REMOVE_ALL, \
result.getRequestType() );  }
-    
+
     /** Simple test */
     public void testCreateUpdateRequest_Normal()
     {
@@ -107,15 +108,15 @@
         String cacheName = "test";
         Serializable key = "key";
         long requesterId = 2;
-        
+
         CacheElement element = new CacheElement( cacheName, key, null );
-        
+
         // DO WORK
-        RemoteHttpCacheRequest result = \
                RemoteHttpClientRequestFactory.createUpdateRequest( element, \
                requesterId );
-        
+        RemoteCacheRequest result = RemoteCacheRequestFactory.createUpdateRequest( \
element, requesterId ); +
         // VERIFY
         assertNotNull( "Should have a result", result );
         assertEquals( "Wrong cacheName", cacheName, result.getCacheName() );
-        assertEquals( "Wrong type", IRemoteHttpCacheConstants.REQUEST_TYPE_UPDATE, \
result.getRequestType() ); +        assertEquals( "Wrong type", \
RemoteCacheRequest.REQUEST_TYPE_UPDATE, result.getRequestType() );  }
 }

Propchange: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/util/RemoteCacheRequestFactoryUnitTest.java
                
------------------------------------------------------------------------------
    svn:mergeinfo = 



---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic