java.lang.Object
org.refcodes.component.AbstractConnectableAutomaton
org.refcodes.remoting.RemoteServerImpl
- All Implemented Interfaces:
org.refcodes.component.Closable,org.refcodes.component.Closable.CloseAutomaton,org.refcodes.component.ClosedAccessor,org.refcodes.component.Component,org.refcodes.component.ConnectableComponent,org.refcodes.component.ConnectableComponent.ConnectableAutomaton,org.refcodes.component.ConnectionComponent<org.refcodes.io.DatagramTransceiver<Serializable>>,org.refcodes.component.ConnectionComponent.ConnectionAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>,org.refcodes.component.ConnectionOpenable<org.refcodes.io.DatagramTransceiver<Serializable>>,org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>,org.refcodes.component.ConnectionStatusAccessor,org.refcodes.component.Destroyable,org.refcodes.component.OpenedAccessor,org.refcodes.mixin.BusyAccessor,org.refcodes.mixin.Clearable,Remote,RemoteServer,org.refcodes.struct.Containable
public class RemoteServerImpl extends org.refcodes.component.AbstractConnectableAutomaton implements RemoteServer
Abstract implementation of the
RemoteServer's base functionality.-
Nested Class Summary
Nested classes/interfaces inherited from interface org.refcodes.mixin.BusyAccessor
org.refcodes.mixin.BusyAccessor.BusyMutator, org.refcodes.mixin.BusyAccessor.BusyPropertyNested classes/interfaces inherited from interface org.refcodes.component.Closable
org.refcodes.component.Closable.CloseAutomaton, org.refcodes.component.Closable.CloseBuilder<B extends org.refcodes.component.Closable.CloseBuilder<B>>Nested classes/interfaces inherited from interface org.refcodes.component.ClosedAccessor
org.refcodes.component.ClosedAccessor.ClosedMutator, org.refcodes.component.ClosedAccessor.ClosedPropertyNested classes/interfaces inherited from interface org.refcodes.component.ConnectableComponent
org.refcodes.component.ConnectableComponent.ConnectableAutomatonNested classes/interfaces inherited from interface org.refcodes.component.ConnectionComponent
org.refcodes.component.ConnectionComponent.ConnectionAutomaton<CON extends Object>, org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON extends Object,B extends org.refcodes.component.ConnectionComponent.ConnectionComponentBuilder<CON,B>>Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionOpenable
org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<CON extends Object>, org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON extends Object,B extends org.refcodes.component.ConnectionOpenable.ConnectionOpenBuilder<CON,B>>Nested classes/interfaces inherited from interface org.refcodes.component.ConnectionStatusAccessor
org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusMutator, org.refcodes.component.ConnectionStatusAccessor.ConnectionStatusPropertyNested classes/interfaces inherited from interface org.refcodes.component.Destroyable
org.refcodes.component.Destroyable.DestroyAutomatonNested classes/interfaces inherited from interface org.refcodes.component.OpenedAccessor
org.refcodes.component.OpenedAccessor.OpenedMutator, org.refcodes.component.OpenedAccessor.OpenedProperty -
Constructor Summary
Constructors Constructor Description RemoteServerImpl()Instantiates a new remote server impl.RemoteServerImpl(ExecutorService aExecutorService)Instantiates a new remote server impl. -
Method Summary
Modifier and Type Method Description voidclear()voidclose()protected voidclose(CloseConnectionMessage aJob)Closes theRemoteupon a receivedCloseConnectionMessage.voiddestroy()voiddigest(Message aJob)Thedigest(Message)method is invoked in order to trigger processing of the providedMessage, e.g. start execution depending on theMessageinstance being provided from the outside.protected voiddoSendJob(Message aJob)For testing purposes, any job can be manually pushed into the job process to the receiver.protected voidfromSender(Message aJob)Provides anMessagefrom another sender to this receiver.protected ExecutorServicegetExecutorService()Hook method for retrieving theExecutorService.booleanhasSubject(Object obj)Returns true if the provided subject is contained inside thisRemoteServer.booleanisBusy()protected booleanisDestroyed()Hook to support theDestroyableinterface, determines the destroyed status property; set to true whenDestroyable.destroy()is called.booleanisEmpty()booleanisOpenable(org.refcodes.io.DatagramTransceiver<Serializable> aConnection)protected voidonClosed()Hook when the connection has been closed.protected voidonOpened()Hook when the connection has been opened.protected voidonSubjectPublished(Object aSubject)Hook when a subject has been published.protected voidonSubjectSignedOff(Object aSubject)Hook when a subject has been signed-off.voidopen(org.refcodes.io.DatagramTransceiver<Serializable> aTransceiver)booleanpublishSubject(Object aSubject)Publishes an object to anyRemoteClientconnected to theRemoteServer.booleansignOffSubject(Object aSubject)Tries to sign off the (previously published) subject, this can be vetoed in case the subject is still in use by aRemoteClient.booleansignOffSubject(Object aSubject, int aTimeoutInMs)Signs off the (previously published) subject, this be vetoed even in case the subject is still in use by aRemoteClient, but the veto will only delay the sign off by the given timeout.intsize()Iterator<Object>subjects()Returns an (immutable) iterator containing all the proxy objects previously being published.protected voidtoReceiver(Message aJob)Forwards anMessagefrom this sender to another receiver.Methods inherited from class org.refcodes.component.AbstractConnectableAutomaton
getConnectionStatus, isClosable, isClosed, isOpenable, isOpened, open, setConnectionStatusMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.refcodes.component.Closable
closeIn, closeQuietly, closeUncheckedMethods inherited from interface org.refcodes.component.Closable.CloseAutomaton
isClosableMethods inherited from interface org.refcodes.component.ClosedAccessor
isClosedMethods inherited from interface org.refcodes.component.ConnectionOpenable
open, openUncheckedMethods inherited from interface org.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton
isOpenableMethods inherited from interface org.refcodes.component.ConnectionStatusAccessor
getConnectionStatus, isOpened
-
Constructor Details
-
RemoteServerImpl
public RemoteServerImpl()Instantiates a new remote server impl. -
RemoteServerImpl
Instantiates a new remote server impl.- Parameters:
aExecutorService- the executor service
-
-
Method Details
-
clear
public void clear()- Specified by:
clearin interfaceorg.refcodes.mixin.Clearable
-
close
- Specified by:
closein interfaceorg.refcodes.component.Closable- Throws:
IOException
-
isBusy
public boolean isBusy()- Specified by:
isBusyin interfaceorg.refcodes.mixin.BusyAccessor
-
hasSubject
Returns true if the provided subject is contained inside thisRemoteServer.- Specified by:
hasSubjectin interfaceRemoteServer- Parameters:
obj- The subject to be tested if it is contained inside theRemoteServer.- Returns:
- True if the given subject is contained inside the
RemoteServer.
-
subjects
Returns an (immutable) iterator containing all the proxy objects previously being published. Use theRemoteServer.signOffSubject(Object)method in order to remove a published subject.- Specified by:
subjectsin interfaceRemoteServer- Returns:
- An iterator containing the published proxy objects.
-
isEmpty
public boolean isEmpty()- Specified by:
isEmptyin interfaceorg.refcodes.struct.Containable
-
publishSubject
Publishes an object to anyRemoteClientconnected to theRemoteServer.- Specified by:
publishSubjectin interfaceRemoteServer- 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, org.refcodes.exception.VetoExceptionTries to sign off the (previously published) subject, this can be vetoed in case the subject is still in use by aRemoteClient.- Specified by:
signOffSubjectin interfaceRemoteServer- 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
RemoteClientthrew aVetoExceptionthen the sign-off is aborted. - Throws:
IOException- Thrown in case opening or accessing an open line (connection, junction, link) caused problems.org.refcodes.exception.VetoException- the veto exception
-
signOffSubject
Signs off the (previously published) subject, this be vetoed even in case the subject is still in use by aRemoteClient, but the veto will only delay the sign off by the given timeout.- Specified by:
signOffSubjectin interfaceRemoteServer- Parameters:
aSubject- The subject to be signed off.aTimeoutInMs- 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
RemoteClientthrew aVetoExceptionthen 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()- Specified by:
sizein interfaceorg.refcodes.struct.Containable
-
destroy
public void destroy()- Specified by:
destroyin interfaceorg.refcodes.component.Destroyable
-
doSendJob
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
Thedigest(Message)method is invoked in order to trigger processing of the providedMessage, e.g. start execution depending on theMessageinstance being provided from the outside. ARemoteClientdigests such aMessagedifferent than aRemoteServer. This method is inspired by theDigester.digest(Object)method. -
close
Closes theRemoteupon a receivedCloseConnectionMessage. Some client TID might be considered in order to determine whether to close all or just one of many connections. This default implementation callsClosable.close()(setting theConnectionStatusto beConnectionStatus.CLOSED); advanced implementations just closing dedicated connections may keep theRemoteitself open (and skip callingClosable.close()and close only a dedicated connection identified by the Meta-Data of theCloseConnectionMessage.- Parameters:
aJob- TheCloseConnectionMessagebeing received for closing the connection.
-
onSubjectPublished
Hook when a subject has been published.- Parameters:
aSubject- The subject being published.
-
onSubjectSignedOff
Hook when a subject has been signed-off.- Parameters:
aSubject- The subject which has been signed-off.
-
isOpenable
- Specified by:
isOpenablein interfaceorg.refcodes.component.ConnectionOpenable.ConnectionOpenAutomaton<org.refcodes.io.DatagramTransceiver<Serializable>>
-
open
public void open(org.refcodes.io.DatagramTransceiver<Serializable> aTransceiver) throws IOException- Specified by:
openin interfaceorg.refcodes.component.ConnectionOpenable<org.refcodes.io.DatagramTransceiver<Serializable>>- Throws:
IOException
-
toReceiver
Forwards anMessagefrom this sender to another receiver. A sub-class invokes this method when it sends anMessageto the receiver counterpart. The communication path is to be implemented by the sub-class.- Parameters:
aJob- theMessageto 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
Provides anMessagefrom another sender to this receiver. A sub-class invokes this method when it receives anMessagefrom a sender counterpart. The communication path is to be implemented by the sub-class.- Parameters:
aJob- theMessageto be forwarded to this receiver from the sender counterpart.
-
getExecutorService
Hook method for retrieving theExecutorService.- Returns:
- The
ExecutorServiceas used by this implementation.
-
isDestroyed
protected boolean isDestroyed()Hook to support theDestroyableinterface, determines the destroyed status property; set to true whenDestroyable.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.
-