You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by as...@apache.org on 2008/09/24 22:35:45 UTC

svn commit: r698720 - in /jakarta/jcs/trunk/src: conf/ java/org/apache/jcs/auxiliary/remote/ java/org/apache/jcs/auxiliary/remote/behavior/ java/org/apache/jcs/auxiliary/remote/server/ java/org/apache/jcs/utils/config/ test/org/apache/jcs/auxiliary/rem...

Author: asmuts
Date: Wed Sep 24 13:35:45 2008
New Revision: 698720

URL: http://svn.apache.org/viewvc?rev=698720&view=rev
Log:
Adding the ability to configure a custom socket factory for just the rmi cache server.  

Added:
    jakarta/jcs/trunk/src/conf/remote.cacheCEL_CSF.ccf
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/MockRMISocketFactory.java
Modified:
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCache.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheManager.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheMonitor.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheRestore.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteUtils.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServer.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
    jakarta/jcs/trunk/src/java/org/apache/jcs/utils/config/OptionConverter.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheListener.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheService.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheListenerUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactoryUnitTest.java
    jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerUnitTest.java

Added: jakarta/jcs/trunk/src/conf/remote.cacheCEL_CSF.ccf
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/conf/remote.cacheCEL_CSF.ccf?rev=698720&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/conf/remote.cacheCEL_CSF.ccf (added)
+++ jakarta/jcs/trunk/src/conf/remote.cacheCEL_CSF.ccf Wed Sep 24 13:35:45 2008
@@ -0,0 +1,69 @@
+# 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.
+# #############################################################
+# ################# REMOTE SERVER CONFIG  #####################
+# Registry used to register and provide the IRmiCacheService service.
+registry.host=localhost
+registry.port=1101
+jcs.remotecache.serverattributes.servicePort=1301
+jcs.remotecache.serverattributes.localClusterConsistency=true
+jcs.remotecache.customrmisocketfactory=org.apache.jcs.auxiliary.remote.server.MockRMISocketFactory
+jcs.remotecache.cacheeventlogger=org.apache.jcs.engine.logging.CacheEventLoggerDebugLogger
+jcs.remotecache.cacheeventlogger.attributes.logCategoryName=test.RCSEventLogCategory
+
+# #############################################################
+# ################# DEFAULT CACHE REGION  #####################
+# sets the default aux value for any non configured caches
+jcs.default=DC,RCluster
+jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
+jcs.default.cacheattributes.MaxObjects=200000
+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=7000
+jcs.default.elementattributes.IdleTime=1800
+jcs.default.elementattributes.IsSpool=true
+jcs.default.elementattributes.IsRemote=true
+jcs.default.elementattributes.IsLateral=true
+
+
+# #############################################################
+# ################# CACHE REGIONS AVAILABLE ###################
+jcs.region.testCache1=DC,RCluster
+jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
+jcs.region.testCache1.cacheattributes.MaxObjects=200002
+
+
+# #############################################################
+# ################# AUXILIARY CACHES AVAILABLE ################
+# server to update for clustering -- remote.cache2.ccf(1102)  and remote.cache3.ccf(1103)
+jcs.auxiliary.RCluster=org.apache.jcs.auxiliary.remote.RemoteCacheFactory
+jcs.auxiliary.RCluster.attributes=org.apache.jcs.auxiliary.remote.RemoteCacheAttributes
+jcs.auxiliary.RCluster.attributes.RemoteTypeName=CLUSTER
+jcs.auxiliary.RCluster.attributes.RemoveUponRemotePut=false
+jcs.auxiliary.RCluster.attributes.ClusterServers=localhost:1102
+jcs.auxiliary.RCluster.attributes.GetOnly=false
+jcs.auxiliary.RCluster.attributes.LocalClusterConsistency=true
+
+
+jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
+jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
+jcs.auxiliary.DC.attributes.DiskPath=@project_home@/raf/remote
+

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCache.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCache.java Wed Sep 24 13:35:45 2008
@@ -134,7 +134,7 @@
             }
         }
 
-        RemoteUtils.configureCustomSocketFactory( irca.getRmiSocketFactoryTimeoutMillis() );
+        RemoteUtils.configureGlobalCustomSocketFactory( irca.getRmiSocketFactoryTimeoutMillis() );
     }
 
     /**
@@ -545,17 +545,17 @@
      * Replaces the current remote cache service handle with the given handle. If the current remote
      * is a Zombie, the propagate teh events that may be queued to the restored service.
      * <p>
-     * @param remote IRemoteCacheService -- the remote server or proxy to the remote server
+     * @param restoredRemote IRemoteCacheService -- the remote server or proxy to the remote server
      */
-    public void fixCache( IRemoteCacheService remote )
+    public void fixCache( IRemoteCacheService restoredRemote )
     {
         if ( this.remote != null && this.remote instanceof ZombieRemoteCacheService )
         {
             ZombieRemoteCacheService zombie = (ZombieRemoteCacheService) this.remote;
-            this.remote = remote;
+            this.remote = restoredRemote;
             try
             {
-                zombie.propagateEvents( remote );
+                zombie.propagateEvents( restoredRemote );
             }
             catch ( Exception e )
             {
@@ -572,7 +572,7 @@
         }
         else
         {
-            this.remote = remote;
+            this.remote = restoredRemote;
         }
         return;
     }
@@ -670,17 +670,20 @@
      */
     public long getListenerId()
     {
-        try
+        if ( listener != null )
         {
-            if ( log.isDebugEnabled() )
+            try
             {
-                log.debug( "get listenerId = " + listener.getListenerId() );
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "get listenerId = " + listener.getListenerId() );
+                }
+                return listener.getListenerId();
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem getting listenerId", e );
             }
-            return listener.getListenerId();
-        }
-        catch ( Exception e )
-        {
-            log.error( "Problem setting listenerId", e );
         }
         return -1;
     }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheManager.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheManager.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheManager.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheManager.java Wed Sep 24 13:35:45 2008
@@ -604,4 +604,18 @@
         release();
     }
 
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
 }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheMonitor.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheMonitor.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheMonitor.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheMonitor.java Wed Sep 24 13:35:45 2008
@@ -21,20 +21,17 @@
 
 import java.util.Iterator;
 
-import org.apache.jcs.engine.CacheConstants;
-
 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.
- *
+ * 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.
  */
 public class RemoteCacheMonitor
     implements Runnable
@@ -51,8 +48,9 @@
     // minimum 30 seconds.
     //private static long idlePeriod = 3*1000; // for debugging.
 
-    /** Must make sure RemoteCacheMonitor is started before any remote error can
-    * be detected! */
+    /**
+     * Must make sure RemoteCacheMonitor is started before any remote error can be detected!
+     */
     private boolean alright = true;
 
     /** Time driven mode */
@@ -66,9 +64,7 @@
 
     /**
      * Configures the idle period between repairs.
-     *
-     * @param idlePeriod
-     *            The new idlePeriod value
+     * @param idlePeriod The new idlePeriod value
      */
     public static void setIdlePeriod( long idlePeriod )
     {
@@ -86,7 +82,6 @@
 
     /**
      * Returns the singleton instance;
-     *
      * @return The instance value
      */
     static RemoteCacheMonitor getInstance()
@@ -102,8 +97,7 @@
     }
 
     /**
-     * Notifies the cache monitor that an error occurred, and kicks off the
-     * error recovery process.
+     * Notifies the cache monitor that an error occurred, and kicks off the error recovery process.
      */
     public void notifyError()
     {

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheRestore.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheRestore.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheRestore.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheRestore.java Wed Sep 24 13:35:45 2008
@@ -110,6 +110,7 @@
         if ( log.isInfoEnabled() )
         {
             String msg = "Remote connection to " + "//" + remoteCacheManager.host + ":" + remoteCacheManager.port + "/" + remoteCacheManager.service + " resumed.";
+            remoteCacheManager.logApplicationEvent( "RemoteCacheRestore", "fix", msg );
             log.info( msg );
         }
     }

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteUtils.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteUtils.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteUtils.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteUtils.java Wed Sep 24 13:35:45 2008
@@ -36,8 +36,7 @@
 import org.apache.commons.logging.LogFactory;
 
 /**
- * This class provides some basic utilities for doing things such as starting
- * the registry properly.
+ * This class provides some basic utilities for doing things such as starting the registry properly.
  */
 public class RemoteUtils
 {
@@ -136,13 +135,14 @@
         }
         return props;
     }
-    
+
     /**
-     * Configure a custom socket factory to set the timeout value.
+     * Configure a custom socket factory to set the timeout value. This sets the global socket
+     * factory. It's used only if a custom factory is not configured for the specific object.
      * <p>
      * @param timeoutMillis
      */
-    public static void configureCustomSocketFactory( final int timeoutMillis )
+    public static void configureGlobalCustomSocketFactory( final int timeoutMillis )
     {
         try
         {

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java Wed Sep 24 13:35:45 2008
@@ -27,14 +27,22 @@
     /** Mapping to props file value */
     public final static String REMOTE_CACHE_SERVICE_VAL = IRemoteCacheService.class.getName();
 
+    /** The prefix for cache server config. */
+    public final static String CACHE_SERVER_PREFIX = "jcs.remotecache";
+
     /**
      * I'm trying to migrate everything to use this prefix. All those below will be replaced. Any of
      * the RemoteCacheServerAttributes can be configured this way.
      */
-    public final static String CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX = "jcs.remotecache.serverattributes";
+    public final static String CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX = CACHE_SERVER_PREFIX + ".serverattributes";
+
+    /**
+     * This is the name of the class that will be used for an object specific socket factory.
+     */
+    public final static String CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX = CACHE_SERVER_PREFIX + ".customrmisocketfactory";
 
     /** Property prefix, should be jcs.remote but this would break existing config. */
-    public final static String PROPERTY_PREFIX = "remote";
+    public final static String PROPERTY_PREFIX = "remote";    
 
     /** Mapping to props file value */
     public final static String SOCKET_TIMEOUT_MILLIS = PROPERTY_PREFIX + ".cache.rmiSocketFactoryTimeoutMillis";

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServer.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServer.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServer.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServer.java Wed Sep 24 13:35:45 2008
@@ -19,6 +19,7 @@
 import java.io.Serializable;
 import java.rmi.RemoteException;
 import java.rmi.registry.Registry;
+import java.rmi.server.RMISocketFactory;
 import java.rmi.server.UnicastRemoteObject;
 import java.rmi.server.Unreferenced;
 import java.util.Collections;
@@ -103,7 +104,7 @@
     private int logInterval = 100;
 
     /** An optional event logger */
-    private ICacheEventLogger cacheEventLogger;
+    private transient ICacheEventLogger cacheEventLogger;
 
     /** If there is no event logger, we will return this event for all create calls. */
     private static final ICacheEvent EMPTY_ICACHE_EVENT = new CacheEvent();
@@ -122,6 +123,22 @@
         this.remoteCacheServerAttributes = rcsa;
         init( rcsa.getConfigFileName() );
     }
+    
+    /**
+     * Constructor for the RemoteCacheServer object. This initializes the server with the values
+     * from the config file.
+     * <p>
+     * @param rcsa
+     * @param customRMISocketFactory 
+     * @throws RemoteException
+     */
+    RemoteCacheServer( IRemoteCacheServerAttributes rcsa,  RMISocketFactory customRMISocketFactory )
+        throws RemoteException
+    {
+        super( rcsa.getServicePort(), customRMISocketFactory, customRMISocketFactory );
+        this.remoteCacheServerAttributes = rcsa;
+        init( rcsa.getConfigFileName() );
+    }
 
     /**
      * Initialize the RMI Cache Server from a properties file.
@@ -1193,18 +1210,22 @@
                     id = listenerIdB;
 
                     // in case it needs synchronization
+                    String message = "adding vm listener under new id = [" + listenerIdB + "], listenerAddress ["
+                    + listenerAddress + "]";
+                    logApplicationEvent( "RemoteCacheServer", "addCacheListener", message );
                     if ( log.isInfoEnabled() )
                     {
-                        log.info( "adding vm listener under new id = [" + listenerIdB + "], listenerAddress ["
-                            + listenerAddress + "]" );
+                        log.info( message );
                     }
                 }
                 else
                 {
+                    String message = "adding listener under existing id = [" + id + "], listenerAddress ["
+                    + listenerAddress + "]";
+                    logApplicationEvent( "RemoteCacheServer", "addCacheListener", message );
                     if ( log.isInfoEnabled() )
                     {
-                        log.info( "adding listener under existing id = [" + id + "], listenerAddress ["
-                            + listenerAddress + "]" );
+                        log.info( message );
                     }
                     // should confirm the the host is the same as we have on
                     // record, just in case a client has made a mistake.
@@ -1286,9 +1307,11 @@
      */
     public void removeCacheListener( String cacheName, long listenerId )
     {
+        String message = "Removing listener for cache region = [" + cacheName + "] and listenerId [" + listenerId + "]";
+        logApplicationEvent( "RemoteCacheServer", "removeCacheListener", message );
         if ( log.isInfoEnabled() )
         {
-            log.info( "Removing listener for cache region = [" + cacheName + "] and listenerId [" + listenerId + "]" );
+            log.info( message );
         }
 
         Integer remoteTypeL = (Integer) idTypeMap.get( new Long( listenerId ) );
@@ -1486,6 +1509,21 @@
         String ipAddress = getIPAddressForRequesterId( requesterId );
         return cacheEventLogger.createICacheEvent( "RemoteCacheServer", cacheName, eventName, ipAddress, key );
     }
+    
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
 
     /**
      * Logs an event if an event logger is configured.

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java Wed Sep 24 13:35:45 2008
@@ -36,7 +36,7 @@
     /** The remote host. */
     private String remoteHost;
 
-    /** The remote port. */
+    /** The registry remote port. */
     private int remotePort;
 
     /**
@@ -46,7 +46,7 @@
      */
     private String clusterServers = "";
 
-    /** port the rmi server will listen to */
+    /** port the server will listen to */
     private int servicePort = 0;
 
     /** Cluster or local */

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java Wed Sep 24 13:35:45 2008
@@ -26,6 +26,8 @@
 import java.rmi.RemoteException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMISocketFactory;
 import java.util.Properties;
 
 import org.apache.commons.logging.Log;
@@ -35,6 +37,7 @@
 import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
 import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheServiceAdmin;
 import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.jcs.utils.config.OptionConverter;
 import org.apache.jcs.utils.config.PropertySetter;
 
 import EDU.oswego.cs.dl.util.concurrent.ClockDaemon;
@@ -123,14 +126,24 @@
 
             setServiceName( rcsa.getRemoteServiceName() );
 
-            RemoteUtils.configureCustomSocketFactory( rcsa.getRmiSocketFactoryTimeoutMillis() );
+            RMISocketFactory customRMISocketFactory = configureObjectSpecificCustomFactory( props );
+
+            RemoteUtils.configureGlobalCustomSocketFactory( rcsa.getRmiSocketFactoryTimeoutMillis() );
 
             // CONFIGURE THE EVENT LOGGER
-            ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator
-                .parseCacheEventLogger( props, IRemoteCacheConstants.PROPERTY_PREFIX );
+            ICacheEventLogger cacheEventLogger;
+
+            cacheEventLogger = configureCacheEventLogger( props );
 
             // CREATE SERVER
-            remoteCacheServer = new RemoteCacheServer( rcsa );
+            if ( customRMISocketFactory != null )
+            {
+                remoteCacheServer = new RemoteCacheServer( rcsa, customRMISocketFactory );
+            }
+            else
+            {
+                remoteCacheServer = new RemoteCacheServer( rcsa );
+            }
             remoteCacheServer.setCacheEventLogger( cacheEventLogger );
 
             // START THE REGISTRY
@@ -155,6 +168,57 @@
     }
 
     /**
+     * Tries to get the event logger by new and old config styles.
+     * <p>
+     * @param props
+     * @return ICacheEventLogger
+     */
+    protected static ICacheEventLogger configureCacheEventLogger( Properties props )
+    {
+        ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator
+            .parseCacheEventLogger( props, IRemoteCacheConstants.CACHE_SERVER_PREFIX );
+
+        // try the old way
+        if ( cacheEventLogger == null )
+        {
+            cacheEventLogger = AuxiliaryCacheConfigurator.parseCacheEventLogger( props,
+                                                                                 IRemoteCacheConstants.PROPERTY_PREFIX );
+        }
+        return cacheEventLogger;
+    }
+
+    /**
+     * This configures an object specific custom factory. This will be configured for just this
+     * object in the registry. This can be null.
+     * <p>
+     * @param props
+     * @return RMISocketFactory
+     */
+    protected static RMISocketFactory configureObjectSpecificCustomFactory( Properties props )
+    {
+        RMISocketFactory customRMISocketFactory = (RMISocketFactory) OptionConverter
+            .instantiateByKey( props, CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX, RMIClientSocketFactory.class, null );
+
+        if ( customRMISocketFactory != null )
+        {
+            PropertySetter.setProperties( customRMISocketFactory, props, CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX
+                + "." );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Will use server specific custom socket factory. " + customRMISocketFactory );
+            }
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "No server specific custom socket factory defined." );
+            }
+        }
+        return customRMISocketFactory;
+    }
+
+    /**
      * Starts the registry if needed
      * <p>
      * @param registryPort
@@ -252,8 +316,8 @@
         return rcsa;
     }
 
-    /** 
-     * This looks for the old config values.  
+    /**
+     * This looks for the old config values.
      * <p>
      * @param prop
      * @param rcsa

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/utils/config/OptionConverter.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/utils/config/OptionConverter.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/utils/config/OptionConverter.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/utils/config/OptionConverter.java Wed Sep 24 13:35:45 2008
@@ -155,6 +155,7 @@
 
     /**
      * Creates an object for the className value of the key.
+     * <p>
      * @param props
      * @param key
      * @param superClass

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheListener.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheListener.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheListener.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheListener.java Wed Sep 24 13:35:45 2008
@@ -57,6 +57,9 @@
     /** The type of remote listener */
     public int remoteType = IRemoteCacheAttributes.LOCAL;
 
+    /**
+     * @throws IOException
+     */
     public void dispose()
         throws IOException
     {
@@ -65,8 +68,8 @@
 
     /**
      * returns the listener id, which can be setup.
-     * @return 
-     * @throws IOException 
+     * @return listenerId
+     * @throws IOException
      */
     public long getListenerId()
         throws IOException
@@ -74,6 +77,10 @@
         return listenerId;
     }
 
+    /**
+     * @return localAddress
+     * @throws IOException
+     */
     public String getLocalHostAddress()
         throws IOException
     {
@@ -82,8 +89,8 @@
 
     /**
      * Return the setup remoteType.
-     * @return 
-     * @throws IOException 
+     * @return remoteType
+     * @throws IOException
      */
     public int getRemoteType()
         throws IOException
@@ -93,6 +100,9 @@
 
     /**
      * Allows you to setup the listener id.
+     * <p>
+     * @param id
+     * @throws IOException
      */
     public void setListenerId( long id )
         throws IOException
@@ -100,6 +110,10 @@
         listenerId = id;
     }
 
+    /**
+     * @param cacheName
+     * @throws IOException
+     */
     public void handleDispose( String cacheName )
         throws IOException
     {
@@ -109,6 +123,9 @@
 
     /**
      * This increments the put count and adds the item to the putItem list.
+     * <p>
+     * @param item
+     * @throws IOException
      */
     public void handlePut( ICacheElement item )
         throws IOException
@@ -119,6 +136,10 @@
 
     /**
      * Increments the remove count and adds the key to the removedKeys list.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
      */
     public void handleRemove( String cacheName, Serializable key )
         throws IOException
@@ -127,11 +148,13 @@
         removedKeys.add( key );
     }
 
+    /**
+     * @param cacheName
+     * @throws IOException
+     */
     public void handleRemoveAll( String cacheName )
         throws IOException
     {
         // TODO Auto-generated method stub
-
     }
-
 }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheService.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheService.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheService.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/MockRemoteCacheService.java Wed Sep 24 13:35:45 2008
@@ -21,8 +21,10 @@
 
 import java.io.IOException;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -31,8 +33,6 @@
 
 /**
  * This is a mock impl of the remote cache service.
- * <p>
- * @author admin
  */
 public class MockRemoteCacheService
     implements IRemoteCacheService
@@ -40,6 +40,12 @@
     /** The object that was last passed to update. */
     public Object lastUpdate;
 
+    /** List of updates. */
+    public List updateRequestList = new ArrayList();
+
+    /** List of request ids. */
+    public List updateRequestIdList = new ArrayList();
+
     /** The key that was last passed to remove. */
     public Object lastRemoveKey;
 
@@ -47,9 +53,9 @@
     public String lastRemoveAllCacheName;
 
     /**
-     * @param cacheName 
-     * @param key 
-     * @param requesterId 
+     * @param cacheName
+     * @param key
+     * @param requesterId
      * @return null
      */
     public ICacheElement get( String cacheName, Serializable key, long requesterId )
@@ -58,9 +64,9 @@
     }
 
     /**
-     * @param cacheName 
-     * @param groupName 
-     * @return empty set 
+     * @param cacheName
+     * @param groupName
+     * @return empty set
      */
     public Set getGroupKeys( String cacheName, String groupName )
     {
@@ -70,9 +76,9 @@
     /**
      * Set the last remove key.
      * <p>
-     * @param cacheName 
-     * @param key 
-     * @param requesterId 
+     * @param cacheName
+     * @param key
+     * @param requesterId
      */
     public void remove( String cacheName, Serializable key, long requesterId )
     {
@@ -95,18 +101,20 @@
     /**
      * Set the last update item.
      * <p>
-     * @param item 
-     * @param requesterId 
+     * @param item
+     * @param requesterId
      */
     public void update( ICacheElement item, long requesterId )
     {
         lastUpdate = item;
+        updateRequestList.add( item );
+        updateRequestIdList.add( new Long( requesterId ) );
     }
 
     /**
      * Do nothing.
      * <p>
-     * @param cacheName 
+     * @param cacheName
      */
     public void dispose( String cacheName )
     {
@@ -114,8 +122,8 @@
     }
 
     /**
-     * @param cacheName 
-     * @param key 
+     * @param cacheName
+     * @param key
      * @return null
      */
     public ICacheElement get( String cacheName, Serializable key )
@@ -134,8 +142,8 @@
     /**
      * Set the last remove key.
      * <p>
-     * @param cacheName 
-     * @param key 
+     * @param cacheName
+     * @param key
      */
     public void remove( String cacheName, Serializable key )
     {
@@ -145,7 +153,7 @@
     /**
      * Set the last remove all cache name.
      * <p>
-     * @param cacheName 
+     * @param cacheName
      */
     public void removeAll( String cacheName )
     {
@@ -155,7 +163,7 @@
     /**
      * Set the last update item.
      * <p>
-     * @param item 
+     * @param item
      */
     public void update( ICacheElement item )
     {
@@ -163,9 +171,9 @@
     }
 
     /**
-     * @param cacheName 
-     * @param keys 
-     * @param requesterId 
+     * @param cacheName
+     * @param keys
+     * @param requesterId
      * @return empty map
      */
     public Map getMultiple( String cacheName, Set keys, long requesterId )
@@ -174,13 +182,12 @@
     }
 
     /**
-     * @param cacheName 
-     * @param keys 
+     * @param cacheName
+     * @param keys
      * @return empty map
      */
     public Map getMultiple( String cacheName, Set keys )
     {
         return new HashMap();
     }
-
 }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheListenerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheListenerUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheListenerUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheListenerUnitTest.java Wed Sep 24 13:35:45 2008
@@ -36,7 +36,6 @@
  * Tests for the remote cache listener.
  * <p>
  * @author Aaron Smuts
- *
  */
 public class RemoteCacheListenerUnitTest
     extends TestCase
@@ -45,12 +44,13 @@
      * Create a RemoteCacheListener with a mock cache manager.  Set remove on put to false.
      * Create a serialized element.  Call put on the listener.
      * Verify that the deserialized element is in the cache.
-     *
+     * <p>
      * @throws Exception
      */
-    public void testUpdate()
+    public void testUpdate_PutOnPut()
         throws Exception
     {
+        // SETUP
         IRemoteCacheAttributes irca = new RemoteCacheAttributes();
         irca.setRemoveUponRemotePut( false );
         ICompositeCacheManager cacheMgr = new MockCompositeCacheManager();
@@ -66,8 +66,11 @@
 
         ICacheElementSerialized element = new CacheElementSerialized( cacheName, key, elementSerializer
             .serialize( value ), attr );
+        
+        // DO WORK
         listener.handlePut( element );
 
+        // VERIFY
         ICacheElement after = cacheMgr.getCache( cacheName ).get( key );
 
         assertNotNull( "Should have a deserialized object.", after );
@@ -79,15 +82,16 @@
     }
 
     /**
-     * Create a RemoteCacheListener with a mock cache manager.  Set remove on put to false.
+     * Create a RemoteCacheListener with a mock cache manager.  Set remove on put to true.
      * Create a serialized element.  Call put on the listener.
-     * Verify that the deserialized element is in the cache.
-     *
+     * Verify that the deserialized element is not in the cache.
+     * <p>
      * @throws Exception
      */
     public void testUpdate_RemoveOnPut()
         throws Exception
     {
+        // SETUP
         IRemoteCacheAttributes irca = new RemoteCacheAttributes();
         irca.setRemoveUponRemotePut( true );
         ICompositeCacheManager cacheMgr = new MockCompositeCacheManager();
@@ -103,11 +107,13 @@
 
         ICacheElementSerialized element = new CacheElementSerialized( cacheName, key, elementSerializer
             .serialize( value ), attr );
+        
+        // DO WORK
         listener.handlePut( element );
 
+        // VERIFY
         ICacheElement after = cacheMgr.getCache( cacheName ).get( key );
 
         assertNull( "Should not have a deserialized object since remove on put is true.", after );
     }
-
 }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheNoWaitUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheNoWaitUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheNoWaitUnitTest.java Wed Sep 24 13:35:45 2008
@@ -57,9 +57,9 @@
         // DO WORK
         noWait.update( element );
 
+        // VERIFY
         SleepUtil.sleepAtLeast( 10 );
 
-        // VERIFY
         assertEquals( "Wrong number updated.", 1, client.updateList.size() );
         assertEquals( "Wrong element", element, client.updateList.get( 0 ) );
     }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/RemoteCacheUnitTest.java Wed Sep 24 13:35:45 2008
@@ -46,9 +46,11 @@
         throws Exception
     {
         // SETUP
+        long listenerId = 123;
         IRemoteCacheAttributes cattr = new RemoteCacheAttributes();
         MockRemoteCacheService service = new MockRemoteCacheService();
         MockRemoteCacheListener listener = new MockRemoteCacheListener();
+        listener.setListenerId( listenerId );
 
         RemoteCache remoteCache = new RemoteCache( cattr, service, listener );
 
@@ -65,6 +67,7 @@
             .getDeSerializedCacheElement( (ICacheElementSerialized) service.lastUpdate, remoteCache
                 .getElementSerializer() );
         assertEquals( "Wrong element updated.", element.getVal(), result.getVal() );
+        assertEquals( "Wrong listener id.", new Long( listenerId ), service.updateRequestIdList.get( 0 ) );
     }
 
     /**

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java Wed Sep 24 13:35:45 2008
@@ -116,7 +116,9 @@
         attributes.setLocalPort( 1202 );
         attributes.setRemotePort( remotePort );
 
-        RemoteCacheManager remoteCacheManager = RemoteCacheManager.getInstance( attributes, compositeCacheManager, new MockCacheEventLogger(), null );
+        MockCacheEventLogger cacheEventLogger = new MockCacheEventLogger();
+        
+        RemoteCacheManager remoteCacheManager = RemoteCacheManager.getInstance( attributes, compositeCacheManager, cacheEventLogger, null );
         String regionName = "testPutRemove";
         AuxiliaryCache cache = remoteCacheManager.getCache( regionName );
 

Added: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/MockRMISocketFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/MockRMISocketFactory.java?rev=698720&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/MockRMISocketFactory.java (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/MockRMISocketFactory.java Wed Sep 24 13:35:45 2008
@@ -0,0 +1,67 @@
+package org.apache.jcs.auxiliary.remote.server;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.rmi.server.RMISocketFactory;
+
+/** For testing the custom socket factory configuration */
+public class MockRMISocketFactory
+    extends RMISocketFactory
+    implements Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = 1056199478581218676L;
+
+    /** for testing automatic property configuration. */
+    private String testStringProperty;
+
+    /**
+     * @param host
+     * @param port
+     * @return Socket
+     * @throws IOException
+     */
+    public Socket createSocket( String host, int port )
+        throws IOException
+    {
+        System.out.println( "Creating socket" );
+        
+        Socket socket = new Socket();
+        socket.setSoTimeout( 1000 );
+        socket.setSoLinger( false, 0 );
+        socket.connect( new InetSocketAddress( host, port ), 1000 );
+        return socket;
+    }
+
+    /**
+     * @param port
+     * @return ServerSocket
+     * @throws IOException
+     */
+    public ServerSocket createServerSocket( int port )
+        throws IOException
+    {
+        System.out.println( "Creating server socket" );
+
+        return new ServerSocket( port );
+    }
+
+    /**
+     * @param testStringProperty the testStringProperty to set
+     */
+    public void setTestStringProperty( String testStringProperty )
+    {
+        this.testStringProperty = testStringProperty;
+    }
+
+    /**
+     * @return the testStringProperty
+     */
+    public String getTestStringProperty()
+    {
+        return testStringProperty;
+    }
+}

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactoryUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactoryUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactoryUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerFactoryUnitTest.java Wed Sep 24 13:35:45 2008
@@ -1,5 +1,6 @@
 package org.apache.jcs.auxiliary.remote.server;
 
+import java.rmi.server.RMISocketFactory;
 import java.util.Properties;
 
 import org.apache.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
@@ -127,4 +128,21 @@
         // VERIFY
         assertEquals( "Wrong localClusterConsistency", localClusterConsistency, result.isLocalClusterConsistency() );
     }
+    
+    /** verify that we get the timeout value */
+    public void testConfigureObjectSpecificCustomFactory_withProperty()
+    {
+        // SETUP
+        String testValue = "123245";
+        Properties props = new Properties();
+        props.put( IRemoteCacheConstants.CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX, MockRMISocketFactory.class.getName() );        
+        props.put( IRemoteCacheConstants.CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX + ".testStringProperty", testValue );        
+                
+        // DO WORK
+        RMISocketFactory result = RemoteCacheServerFactory.configureObjectSpecificCustomFactory( props );
+        
+        // VERIFY
+        assertNotNull( "Should have a custom socket factory.", result );
+        assertEquals( "Wrong testValue", testValue, ((MockRMISocketFactory)result).getTestStringProperty() );
+    }
 }

Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerUnitTest.java?rev=698720&r1=698719&r2=698720&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerUnitTest.java Wed Sep 24 13:35:45 2008
@@ -47,7 +47,7 @@
      * <p>
      * @throws Exception
      */
-    public void testAddListenerToCache()
+    public void testAddListenerToCache_LOCALtype()
         throws Exception
     {
         // SETUP
@@ -59,8 +59,10 @@
         RemoteCacheServer server = new RemoteCacheServer( rcsa );
 
         MockRemoteCacheListener mockListener1 = new MockRemoteCacheListener();
+        mockListener1.remoteType = IRemoteCacheAttributes.LOCAL;
         mockListener1.localAddress = expectedIp1;
         MockRemoteCacheListener mockListener2 = new MockRemoteCacheListener();
+        mockListener1.remoteType = IRemoteCacheAttributes.LOCAL;
         mockListener2.localAddress = expectedIp2;
 
         String cacheName = "testAddListener";
@@ -77,21 +79,63 @@
     }
 
     /**
-     * Add a listner. Pass the id of 0, verify that the server sets a new listener id. Do another
+     * Add a listener. Pass the id of 0, verify that the server sets a new listener id. Do another
+     * and verify that the second gets an id of 2.
+     * <p>
+     * @throws Exception
+     */
+    public void testAddListenerToCache_CLUSTERtype()
+        throws Exception
+    {
+        // SETUP
+        String expectedIp1 = "adfasdf";
+        String expectedIp2 = "adsfadsafaf";
+
+        IRemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
+        rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
+        RemoteCacheServer server = new RemoteCacheServer( rcsa );
+
+        MockRemoteCacheListener mockListener1 = new MockRemoteCacheListener();
+        mockListener1.remoteType = IRemoteCacheAttributes.CLUSTER;
+        mockListener1.localAddress = expectedIp1;
+        MockRemoteCacheListener mockListener2 = new MockRemoteCacheListener();
+        mockListener1.remoteType = IRemoteCacheAttributes.CLUSTER;
+        mockListener2.localAddress = expectedIp2;
+
+        String cacheName = "testAddListener";
+
+        // DO WORK
+        server.addCacheListener( cacheName, mockListener1 );
+        server.addCacheListener( cacheName, mockListener2 );
+
+        // VERIFY
+        assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
+        assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
+        assertEquals( "Wrong ip.", expectedIp1, server.getIPAddressForRequesterId( 1 ) );
+        assertEquals( "Wrong ip.", expectedIp2, server.getIPAddressForRequesterId( 2 ) );
+    }
+    
+    /**
+     * Add a listener. Pass the id of 0, verify that the server sets a new listener id. Do another
      * and verify that the second gets an id of 2.
      * <p>
      * @throws Exception
      */
-    public void testAddListenerToAll()
+    public void testAddListener_ToAll()
         throws Exception
     {
         // SETUP
+        String expectedIp1 = "adfasdf";
+        String expectedIp2 = "adsfadsafaf";
+        
         IRemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
         rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
         RemoteCacheServer server = new RemoteCacheServer( rcsa );
 
         MockRemoteCacheListener mockListener1 = new MockRemoteCacheListener();
+        mockListener1.localAddress = expectedIp1;
         MockRemoteCacheListener mockListener2 = new MockRemoteCacheListener();
+        mockListener2.localAddress = expectedIp2;
 
         // DO WORK
         // don't specify the cache name
@@ -101,6 +145,8 @@
         // VERIFY
         assertEquals( "Wrong listener id.", 1, mockListener1.getListenerId() );
         assertEquals( "Wrong listener id.", 2, mockListener2.getListenerId() );
+        assertEquals( "Wrong ip.", expectedIp1, server.getIPAddressForRequesterId( 1 ) );
+        assertEquals( "Wrong ip.", expectedIp2, server.getIPAddressForRequesterId( 2 ) );        
     }
 
     /**
@@ -110,7 +156,7 @@
      * <p>
      * @throws Exception
      */
-    public void testAddListenerToAllThenRemove()
+    public void testAddListener_ToAllThenRemove()
         throws Exception
     {
         // SETUP
@@ -138,13 +184,13 @@
     }
 
     /**
-     * Add a listner. Pass the id of 0, verify that the server sets a new listener id. Do another
+     * Add a listener. Pass the id of 0, verify that the server sets a new listener id. Do another
      * and verify that the second gets an id of 2. Call remove Listener and verify that it is
      * removed.
      * <p>
      * @throws Exception
      */
-    public void testAddListenerToAllThenRemove_clusterType()
+    public void testAddListener_ToAllThenRemove_clusterType()
         throws Exception
     {
         // SETUP
@@ -232,7 +278,7 @@
         rcsa.setConfigFileName( "/TestRemoteCacheServer.ccf" );
         RemoteCacheServer server = new RemoteCacheServer( rcsa );
 
-        // this is to get the listenr id for inserts.
+        // this is to get the listener id for inserts.
         MockRemoteCacheListener clusterListener = new MockRemoteCacheListener();
         clusterListener.remoteType = IRemoteCacheAttributes.CLUSTER;
 
@@ -422,7 +468,7 @@
         server.setCacheEventLogger( cacheEventLogger );
 
         // DO WORK
-        server.remove( "region", "key" );
+        server.removeAll( "region" );
 
         // VERIFY
         assertEquals( "Start should have been called.", 1, cacheEventLogger.startICacheEventCalls );



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