Class RemoteServer

All Implemented Interfaces:
Closable, Closable.CloseAutomaton, ClosedAccessor, Component, ConnectableComponent, ConnectableComponent.ConnectableAutomaton, ConnectionComponent<DatagramTransceiver<Serializable>>, ConnectionComponent.ConnectionAutomaton<DatagramTransceiver<Serializable>>, ConnectionOpenable<DatagramTransceiver<Serializable>>, ConnectionOpenable.ConnectionOpenAutomaton<DatagramTransceiver<Serializable>>, ConnectionStatusAccessor, Destroyable, OpenedAccessor, BusyAccessor, Clearable, EmptyAccessor, Remote, Containable

public class RemoteServer extends AbstractConnectableAutomaton
A RemoteServer promotes subjects to be operated on by RemoteClient instances.
  • Constructor Details

  • Method Details

    • clear

      public void clear()
    • close

      public void close() throws IOException
      Specified by:
      close in interface Closable
      Throws:
      IOException
    • isBusy

      public boolean isBusy()
    • hasSubject

      public boolean hasSubject(Object aSubject)
      Returns true if the provided subject is contained inside this RemoteServer.
      Parameters:
      aSubject - The subject to be tested if it is contained inside the RemoteServer.
      Returns:
      True if the given subject is contained inside the RemoteServer.
    • subjects

      public Iterator<Object> subjects()
      Returns an (immutable) iterator containing all the proxy objects previously being published. Use the signOffSubject(Object) method in order to remove a published subject.
      Returns:
      An iterator containing the published proxy objects.
    • isEmpty

      public boolean isEmpty()
    • publishSubject

      public boolean publishSubject(Object aSubject) throws IOException
      Publishes an object to any RemoteClient connected to the RemoteServer.
      Parameters:
      aSubject - A subject being published for inter-process communication such as remote procedure calls or remote method invocations.
      Returns:
      True is returned if the subject could be published, else false is returned
      Throws:
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • signOffSubject

      public boolean signOffSubject(Object aSubject) throws IOException, VetoException
      Tries to sign off the (previously published) subject, this can be vetoed in case the subject is still in use by a RemoteClient.
      Parameters:
      aSubject - Description is currently not available!
      Returns:
      True if the removal of the subject has been successful. If the subject has not been found then false is returned. If a RemoteClient threw a VetoException then the sign-off is aborted.
      Throws:
      VetoException - the veto exception
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • signOffSubject

      public boolean signOffSubject(Object aSubject, int aTimeoutMillis) throws IOException
      Signs off the (previously published) subject, this be vetoed even in case the subject is still in use by a RemoteClient, but the veto will only delay the sign off by the given timeout.
      Parameters:
      aSubject - The subject to be signed off.
      aTimeoutMillis - The timeout to be granted in case the sign-off has been vetoed, nevertheless the subject will be signed off after the timeout elapsed.
      Returns:
      True if the removal of the subject has been successful. If the subject has not been found then false is returned. If a RemoteClient threw a VetoException then the sign-off is aborted.
      Throws:
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • size

      public int size()
    • destroy

      public void destroy()
      Specified by:
      destroy in interface Destroyable
    • doSendJob

      protected void doSendJob(Message aJob) throws IOException
      For testing purposes, any job can be manually pushed into the job process to the receiver.
      Parameters:
      aJob - The job to be pushed to the receiver.
      Throws:
      IOException - Thrown in case the operation failed due to an I/O malfunction such as the input- or output-connection (of an input- and output-connection pair) is not available or being disconnected.
    • digest

      public void digest(Message aJob) throws DigestException
      This method is invoked in order to trigger processing of the provided Message, e.g. start execution depending on the Message instance being provided from the outside. A RemoteClient digests such a Message different than a RemoteServer. This method is inspired by the Digester.digest(Object) method.
      Parameters:
      aJob - The Message to be digested.
      Throws:
      DigestException - Thrown in case digesting (processing) a job by a Digester.digest(Object) caused problems; the aCause is usually wrapped by this Exception.
      See Also:
    • close

      protected void close(org.refcodes.remoting.CloseConnectionMessage aJob)
      Closes the Remote upon a received CloseConnectionMessage. Some client ID might be considered in order to determine whether to close all or just one of many connections. This default implementation calls Closable.close() (setting the ConnectionStatus to be ConnectionStatus.CLOSED); advanced implementations just closing dedicated connections may keep the Remote itself open (and skip calling Closable.close() and close only a dedicated connection identified by the Meta-Data of the CloseConnectionMessage.
      Parameters:
      aJob - The CloseConnectionMessage being received for closing the connection.
    • onSubjectPublished

      protected void onSubjectPublished(Object aSubject)
      Hook when a subject has been published.
      Parameters:
      aSubject - The subject being published.
    • onSubjectSignedOff

      protected void onSubjectSignedOff(Object aSubject)
      Hook when a subject has been signed-off.
      Parameters:
      aSubject - The subject which has been signed-off.
    • isOpenable

      public boolean isOpenable(DatagramTransceiver<Serializable> aConnection)
      Specified by:
      isOpenable in interface ConnectionOpenable.ConnectionOpenAutomaton<DatagramTransceiver<Serializable>>
    • open

      public void open(DatagramTransceiver<Serializable> aTransceiver) throws IOException
      Specified by:
      open in interface ConnectionOpenable<DatagramTransceiver<Serializable>>
      Throws:
      IOException
    • toReceiver

      protected void toReceiver(Message aJob) throws IOException
      Forwards an Message from this sender to another receiver. A sub-class invokes this method when it sends an Message to the receiver counterpart. The communication path is to be implemented by the sub-class.
      Parameters:
      aJob - the Message to be forwarded to this receiver from the sender counterpart.
      Throws:
      IOException - Thrown in case opening or accessing an open line (connection, junction, link) caused problems.
    • fromSender

      protected void fromSender(Message aJob)
      Provides an Message from another sender to this receiver. A sub-class invokes this method when it receives an Message from a sender counterpart. The communication path is to be implemented by the sub-class.
      Parameters:
      aJob - the Message to be forwarded to this receiver from the sender counterpart.
    • getExecutorService

      protected ExecutorService getExecutorService()
      Hook method for retrieving the ExecutorService.
      Returns:
      The ExecutorService as used by this implementation.
    • isDestroyed

      protected boolean isDestroyed()
      Hook to support the Destroyable interface, determines the destroyed status property; set to true when Destroyable.destroy() is called.
      Returns:
      The destroyed status property.
    • onOpened

      protected void onOpened()
      Hook when the connection has been opened.
    • onClosed

      protected void onClosed()
      Hook when the connection has been closed.