ehcache

net.sf.ehcache.distribution
Class RMICachePeer

java.lang.Object
  extended by java.rmi.server.RemoteObject
      extended by java.rmi.server.RemoteServer
          extended by java.rmi.server.UnicastRemoteObject
              extended by net.sf.ehcache.distribution.RMICachePeer
All Implemented Interfaces:
java.io.Serializable, java.rmi.Remote, CachePeer

public class RMICachePeer
extends java.rmi.server.UnicastRemoteObject
implements CachePeer, java.rmi.Remote

An RMI based implementation of CachePeer.

This class features a customised RMIClientSocketFactory which enables socket timeouts to be configured.

Version:
$Id: RMICachePeer.java 704 2008-07-13 00:17:52Z gregluck $
Author:
Greg Luck
See Also:
Serialized Form

Field Summary
 
Fields inherited from class java.rmi.server.RemoteObject
ref
 
Constructor Summary
RMICachePeer(Ehcache cache, java.lang.String hostName, java.lang.Integer rmiRegistryPort, java.lang.Integer remoteObjectPort, java.lang.Integer socketTimeoutMillis)
          Construct a new remote peer.
 
Method Summary
(package private)  Ehcache getBoundCacheInstance()
          Gets the cache instance that this listener is bound to
 java.util.List getElements(java.util.List keys)
          Gets a list of elements from the cache, for a list of keys, without updating Element statistics.
 java.lang.String getGuid()
          Gets the globally unique id for the underlying Cache instance.
 java.util.List getKeys()
          Returns a list of all elements in the cache, whether or not they are expired.
 java.lang.String getName()
          Gets the cache name
 Element getQuiet(java.io.Serializable key)
          Gets an element from the cache, without updating Element statistics.
 java.lang.String getUrl()
          The URL for the remote replicator to connect.

This implementation gives an URL which has meaning to the RMI remoting system.

 java.lang.String getUrlBase()
          The URL base for the remote replicator to connect.

This implementation gives an URL which has meaning to the RMI remoting system.

 void put(Element element)
          Puts an Element into the underlying cache without notifying listeners or updating statistics.
 boolean remove(java.io.Serializable key)
          Removes an Element from the underlying cache without notifying listeners or updating statistics.
 void removeAll()
          Removes all cached items.
 void send(java.util.List eventMessages)
          Send the cache peer with an ordered list of EventMessages

This enables multiple messages to be delivered in one network invocation.

 java.lang.String toString()
          Returns a String that represents the value of this object.
 
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, unexportObject
 
Methods inherited from class java.rmi.server.RemoteServer
getClientHost, getLog, setLog
 
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toStub
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RMICachePeer

public RMICachePeer(Ehcache cache,
                    java.lang.String hostName,
                    java.lang.Integer rmiRegistryPort,
                    java.lang.Integer remoteObjectPort,
                    java.lang.Integer socketTimeoutMillis)
             throws java.rmi.RemoteException
Construct a new remote peer.

Parameters:
cache - The cache attached to the peer
hostName - The host name the peer is running on.
rmiRegistryPort - The port number on which the RMI Registry listens. Should be an unused port in the range 1025 - 65536
remoteObjectPort - the port number on which the remote objects bound in the registry receive calls. This defaults to a free port if not specified. Should be an unused port in the range 1025 - 65536
socketTimeoutMillis -
Throws:
java.rmi.RemoteException
Method Detail

getUrl

public final java.lang.String getUrl()
The URL for the remote replicator to connect. The value will only have meaning for a specific implementation of replicator and remote peer.

This method is not meant to be used remotely. The replicator already needs to know this. It has to throw RemoteException to comply with RMI requirements

This implementation gives an URL which has meaning to the RMI remoting system.

Specified by:
getUrl in interface CachePeer
Returns:
the URL, without the scheme, as a string e.g. //hostname:port/cacheName

getUrlBase

public final java.lang.String getUrlBase()
The URL base for the remote replicator to connect. The value will have meaning only to a specific implementation of replicator and remote peer.

This implementation gives an URL which has meaning to the RMI remoting system.

Specified by:
getUrlBase in interface CachePeer
Returns:
the URL, without the scheme, as a string e.g. //hostname:port

getKeys

public java.util.List getKeys()
                       throws java.rmi.RemoteException
Returns a list of all elements in the cache, whether or not they are expired.

The returned keys are unique and can be considered a set.

The List returned is not live. It is a copy.

The time taken is O(n). On a single cpu 1.8Ghz P4, approximately 8ms is required for each 1000 entries.

Specified by:
getKeys in interface CachePeer
Returns:
a list of Object keys
Throws:
java.rmi.RemoteException

getQuiet

public Element getQuiet(java.io.Serializable key)
                 throws java.rmi.RemoteException
Gets an element from the cache, without updating Element statistics. Cache statistics are still updated.

Specified by:
getQuiet in interface CachePeer
Parameters:
key - a serializable value
Returns:
the element, or null, if it does not exist.
Throws:
java.rmi.RemoteException

getElements

public java.util.List getElements(java.util.List keys)
                           throws java.rmi.RemoteException
Gets a list of elements from the cache, for a list of keys, without updating Element statistics. Time to idle lifetimes are therefore not affected.

Cache statistics are still updated.

Callers should ideally first call this method with a small list of keys to gauge the size of a typical Element. Then a calculation can be made of the right number to request each time so as to optimise network performance and not cause an OutOfMemory error on this Cache.

Specified by:
getElements in interface CachePeer
Parameters:
keys - a list of serializable values which represent keys
Returns:
a list of Elements. If an element was not found or null, it will not be in the list.
Throws:
java.rmi.RemoteException

put

public void put(Element element)
         throws java.rmi.RemoteException,
                java.lang.IllegalArgumentException,
                java.lang.IllegalStateException
Puts an Element into the underlying cache without notifying listeners or updating statistics.

Specified by:
put in interface CachePeer
Parameters:
element -
Throws:
java.rmi.RemoteException
java.lang.IllegalArgumentException
java.lang.IllegalStateException

remove

public final boolean remove(java.io.Serializable key)
                     throws java.rmi.RemoteException,
                            java.lang.IllegalStateException
Removes an Element from the underlying cache without notifying listeners or updating statistics.

Specified by:
remove in interface CachePeer
Parameters:
key -
Returns:
true if the element was removed, false if it was not found in the cache
Throws:
java.rmi.RemoteException
java.lang.IllegalStateException

removeAll

public final void removeAll()
                     throws java.rmi.RemoteException,
                            java.lang.IllegalStateException
Removes all cached items.

Specified by:
removeAll in interface CachePeer
Throws:
java.lang.IllegalStateException - if the cache is not Status.STATUS_ALIVE
java.rmi.RemoteException

send

public final void send(java.util.List eventMessages)
                throws java.rmi.RemoteException
Send the cache peer with an ordered list of EventMessages

This enables multiple messages to be delivered in one network invocation.

Specified by:
send in interface CachePeer
Parameters:
eventMessages - a list of type EventMessage
Throws:
java.rmi.RemoteException

getName

public final java.lang.String getName()
                               throws java.rmi.RemoteException
Gets the cache name

Specified by:
getName in interface CachePeer
Throws:
java.rmi.RemoteException

getGuid

public final java.lang.String getGuid()
                               throws java.rmi.RemoteException
Gets the globally unique id for the underlying Cache instance.

Specified by:
getGuid in interface CachePeer
Returns:
a String representation of the GUID
Throws:
java.rmi.RemoteException

getBoundCacheInstance

final Ehcache getBoundCacheInstance()
Gets the cache instance that this listener is bound to


toString

public java.lang.String toString()
Returns a String that represents the value of this object.

Overrides:
toString in class java.rmi.server.RemoteObject

ehcache