Class RMICachePeer

  • All Implemented Interfaces:
    java.io.Serializable, java.rmi.Remote, CachePeer
    Direct Known Subclasses:
    TransactionalRMICachePeer

    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$
    Author:
    Greg Luck
    See Also:
    Serialized Form
    • Field Summary

      • Fields inherited from class java.rmi.server.RemoteObject

        ref
    • Constructor Summary

      Constructors 
      Constructor Description
      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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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.
      java.lang.String getUrlBase()
      The URL base for the remote replicator to connect.
      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
      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, 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 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 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 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
      • toString

        public java.lang.String toString()
        Returns a String that represents the value of this object.
        Overrides:
        toString in class java.rmi.server.RemoteObject