|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object fulmine.AbstractLifeCycle fulmine.distribution.channel.Channel
public class Channel
The default channel implementation. This is thread safe. This implementation is composed of multiple collaborator objects to handle:
IChannel
for a
description of the possible messages
ISubscriptionManager
objects; a 'transmit' and 'receive' instance. A
channel passes all remote container subscription requests to its remote peer.
The remote channel hands this subscription request to its 'transmit'
subscription manager. This 'transmit' subscription manager handles
registering for TxEvent
s generated by the subscribed container(s);
the events are then sent to the peer channel. It also handles situations
where the container(s) may not exist yet. The local channel hands the
subscription request to its 'receive' subscription manager which handles
adding the subscription listener to the remote container. The 'receive'
subscription manager also handles situations where the remote container does
not exist yet; it listens for RemoteContainerCreatedEvent
.
When a channel connects to another channel, they exchange a sequence of messages to synchronise readiness with each other. A channel registers for the following system events:
When a channel is notified with this event it transmits it to the remote channel (if there is a subscription) and this allows remote containers to be marked asIContainer.DataState.STALE
and then destroyed.
The diagram below illustrates the subscription mechanics.
context local_channel remote_channel | | | | | |<---- subscribe for | | | remote container A | |<--- subscribe -----| | | | | | | | | | | | | container A | | | created -->| | | |-- TxEvent --->| | | container A |----- TxEvent ----->| | | |----> create remote | | | container AWhen a channel is destroyed, it sends a
IChannel.MSG_DESTROY_CONNECTION
to
the other channel so the other channel can destroy the connection. This
allows messages sent by this channel to be processed by the other end and
only after the messages have been processed will the connection be severed.
Field Summary |
---|
Fields inherited from interface fulmine.distribution.channel.IChannel |
---|
DELIMITER, MSG_CONTAINER_DESTROYED, MSG_DATA, MSG_DESTROY_CONNECTION, MSG_INVOKE_RPC, MSG_RETRANSMIT, MSG_RETRANSMIT_ALL, MSG_SUBSCRIBE, MSG_SYN, MSG_SYN_ACK, MSG_UNSUBSCRIBE |
Constructor Summary | |
---|---|
protected |
Channel(IChannelState state)
Internally chained constructor with the state to use |
|
Channel(IConnection connection,
IFrameworkContext context)
Construct the channel |
Method Summary | |
---|---|
boolean |
addListener(ISubscriptionParameters parameters,
IEventListener listener)
Add the listener to the IEventListener instances associated with
the ISubscription represented by the parameters. |
protected void |
doChannelDestroyedOperation(IEventSource eventSource,
boolean last)
Perform the operation required on the remote IEventSource that
originated from the remote context this channel connects to, when the
channel is destroyed. |
protected void |
doDestroy()
Overridden in subclasses to perform custom logic on destruction. |
protected void |
doStart()
Overridden in subclasses to perform custom logic on activation. |
protected void |
doSubscribeOperation(ISubscriptionParameters parameters)
Perform any operation required when a subscription occurs. |
protected void |
doUnsubscribeOperation(ISubscriptionParameters parameters)
Perform any operation required when an unsubscription occurs. |
void |
eventSourceCreated(IAddressable identity)
Method to invoke when a new IEventSource is created. |
void |
eventSourceDestroyed(IAddressable identity)
Method to invoke when an IEventSource is destroyed. |
IConnection |
getConnection()
Get the channel's connection |
byte[] |
getContainerDestroyedMessage(ContainerDestroyedEvent event)
Get the byte[] to represent the container destroyed event |
List<IEventListener> |
getListeners(ISubscriptionParameters parameters)
Get a copy of the IEventListener instances that have been
added to the subscription identified by the parameters. |
protected AsyncLog |
getLog()
Get the log to use for the object hierarchy |
String |
getRemoteContextIdentity()
Get the identity of the remote context this channel connects to |
Collection<IEventSource> |
getSubscribedSources()
Get a copy of the Collection of all the event sources that
are currently subscribed for. |
Collection<IEventSource> |
getSubscribedSources(ISubscriptionParameters parameters)
Get a copy of the Collection of the currently subscribed
event sources that are matched by the subscription parameters. |
boolean |
includes(IAddressable parameters)
Determine if there is at least one ISubscription instance whose
subscription parameters include the parameters passed in. |
void |
invokeRpc(String remoteContextIdentity,
byte[] rpcData)
Send the RPC invocation to the remote context. |
boolean |
isConnectionSyn()
Find out if the connection to the peer channel synchronized |
boolean |
isSubscribed(IEventSource source)
Determine if there is at least one ISubscription that has a match
reference for the event source. |
boolean |
removeListener(ISubscriptionParameters parameters,
IEventListener listener)
Remove the listener from the IEventListener instances associated
with the ISubscription represented by the parameters. |
void |
requestRetransmit(String identityRegularExpression,
IType type,
IDomain domain)
Send a request to the connected remote context to retransmit the complete state of the subscribed IContainer instances with matching type
and identity. |
void |
requestRetransmitAll()
Send a request to the connected remote context to retransmit the complete state of all the IContainer instances subscribed for by the local
context. |
void |
retransmit(String identityRegularExpression,
IType type,
IDomain domain)
Retransmit the complete state of the IContainer instances with
matching type and identity to the connected remote context. |
void |
retransmitAll()
Retransmit the complete state of all the IContainer instances
that the connected remote context has subscribed for. |
void |
send(byte[] bytes)
Send a message to the connected channel. |
void |
setConnectionSyn()
Mark the connection to the peer channel as synchronized. |
boolean |
subscribe(ISubscriptionParameters parameters)
Create an ISubscription for the event source(s) represented in
the subscription parameters. |
String |
toString()
|
boolean |
unsubscribe(ISubscriptionParameters parameters)
Remove the subscription represented by the parameters. |
Methods inherited from class fulmine.AbstractLifeCycle |
---|
checkActive, destroy, finalize, isActive, start |
Methods inherited from class java.lang.Object |
---|
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface fulmine.ILifeCycle |
---|
isActive, start |
Methods inherited from interface fulmine.IDestroyable |
---|
destroy |
Constructor Detail |
---|
public Channel(IConnection connection, IFrameworkContext context)
connection
- the connection to the remote contextcontext
- the local context for the channelprotected Channel(IChannelState state)
state
- the state for the channelMethod Detail |
---|
public final boolean subscribe(ISubscriptionParameters parameters)
ISubscriptionManager
ISubscription
for the event source(s) represented in
the subscription parameters. The created subscription is keyed against
the parameters argument.
This is an idempotent operation.
subscribe
in interface ISubscriptionManager
parameters
- the subscription parameters identifying the subscription
true
if the subscription was created,
false
if it already existedISubscriptionManager.getSubscribedSources(ISubscriptionParameters)
,
ISubscriptionManager.unsubscribe(ISubscriptionParameters)
protected void doSubscribeOperation(ISubscriptionParameters parameters)
parameters
- the parameters identifying the subscriptionpublic final boolean unsubscribe(ISubscriptionParameters parameters)
ISubscriptionManager
This unregisters the listener(s) associated with the subscription from
the event source(s) that the subscription matched and destroys the
associated ISubscription
instance.
This is an idempotent operation.
unsubscribe
in interface ISubscriptionManager
parameters
- the subscription parameters identifying the subscription
true
if a subscription was found, false
otherwiseISubscriptionManager.getSubscribedSources(ISubscriptionParameters)
,
ISubscriptionManager.subscribe(ISubscriptionParameters)
protected void doUnsubscribeOperation(ISubscriptionParameters parameters)
parameters
- the parameters identifying subscriptionpublic final void send(byte[] bytes)
IChannelOperations
send
in interface IChannelOperations
bytes
- the byte[] encapsulating the message to sendprotected AsyncLog getLog()
AbstractLifeCycle
getLog
in class AbstractLifeCycle
protected void doStart()
AbstractLifeCycle
RuntimeException
or subclass
thereof. When this method is called, the AbstractLifeCycle.isActive()
method will
return true
.
doStart
in class AbstractLifeCycle
protected final void doDestroy()
AbstractLifeCycle
RuntimeException
or subclass
thereof.
doDestroy
in class AbstractLifeCycle
protected void doChannelDestroyedOperation(IEventSource eventSource, boolean last)
IEventSource
that
originated from the remote context this channel connects to, when the
channel is destroyed.
eventSource
- a remote event source that is associated with the remote
context this channel connects tolast
- signals if this is the last event sourcepublic final String getRemoteContextIdentity()
IChannel
getRemoteContextIdentity
in interface IChannel
IFrameworkContext
public final String toString()
toString
in class AbstractLifeCycle
public final boolean isConnectionSyn()
IChannelOperations
isConnectionSyn
in interface IChannelOperations
true
if the connection to the peer channel is
synchronized.public final void setConnectionSyn()
IChannelOperations
setConnectionSyn
in interface IChannelOperations
public final void requestRetransmit(String identityRegularExpression, IType type, IDomain domain)
IRetransmitter
IContainer
instances with matching type
and identity.
Wildcards are not supported with this operation.
requestRetransmit
in interface IRetransmitter
identityRegularExpression
- the identity regular expression to match against containers
currently subscribed for by the local contexttype
- the type of the containerdomain
- the domain of the containerpublic final void requestRetransmitAll()
IRetransmitter
IContainer
instances subscribed for by the local
context.
requestRetransmitAll
in interface IRetransmitter
public final void retransmitAll()
IRetransmitter
IContainer
instances
that the connected remote context has subscribed for.
retransmitAll
in interface IRetransmitter
public final void retransmit(String identityRegularExpression, IType type, IDomain domain)
IRetransmitter
IContainer
instances with
matching type and identity to the connected remote context. The container
must also currently be subscribed for by the remote context.
Wildcards are not supported with this operation.
retransmit
in interface IRetransmitter
identityRegularExpression
- the identity regular expression to match against containers
currently subscribed for by the remote contexttype
- the type of the containerdomain
- the domain of the containerpublic final IConnection getConnection()
IChannel
getConnection
in interface IChannel
IConnection
used by the channelpublic final boolean addListener(ISubscriptionParameters parameters, IEventListener listener)
ISubscriptionManager
IEventListener
instances associated with
the ISubscription
represented by the parameters. The subscription
is found using the same lookup semantics as
#getSubscription(ISubscriptionParameters)
.
On adding, the subscription will register the listener with any currently
matched IEventSource
instances.
This is an idempotent operation.
addListener
in interface ISubscriptionManager
parameters
- the subscription parameters identifying the subscriptionlistener
- the listener to add to the subscription's list of listeners
true
if the listener was added, false
if it already existedpublic final void eventSourceCreated(IAddressable identity)
ISubscriptionManager
IEventSource
is created. This
provides the manager with the mechanism to be notified when event sources
are created and go through existing subscriptions to identify if the new
event source should be subscribed for.
eventSourceCreated
in interface ISubscriptionManager
identity
- identifies the attributes of the created event sourcepublic final void eventSourceDestroyed(IAddressable identity)
ISubscriptionManager
IEventSource
is destroyed. Complimentary
to ISubscriptionManager.eventSourceCreated(IAddressable)
.
eventSourceDestroyed
in interface ISubscriptionManager
identity
- identifies the attributes of the destroyed event sourcepublic final Collection<IEventSource> getSubscribedSources()
ISubscriptionManager
Collection
of all the event sources that
are currently subscribed for.
getSubscribedSources
in interface ISubscriptionManager
Collection
of all the event source
instances that are currently subscribed forpublic final Collection<IEventSource> getSubscribedSources(ISubscriptionParameters parameters)
ISubscriptionManager
Collection
of the currently subscribed
event sources that are matched by the subscription parameters.
This does a matching operation to find any other ISubscription
s
that would include
these parameters and then adds the IEventSource
s to the
collection to return.
This is not a key lookup operation.
getSubscribedSources
in interface ISubscriptionManager
parameters
- the subscription parameters to match against event sources
currently subscribed for
Collection
of the event sources currently
subscribed for and that are matched by the subscription
parameters argumentpublic final boolean isSubscribed(IEventSource source)
ISubscriptionManager
ISubscription
that has a match
reference for the event source.
This checks if the event source is already subscribed. To find out if
this source would be subscribed, use
#includes(ISubscriptionParameters)
.
isSubscribed
in interface ISubscriptionManager
source
- the event source to check for at least one subscription within
this manager
true
if the source is found in at least one
subscription within this managerpublic final boolean removeListener(ISubscriptionParameters parameters, IEventListener listener)
ISubscriptionManager
IEventListener
instances associated
with the ISubscription
represented by the parameters. The
subscription is found using the same lookup semantics as
#getSubscription(ISubscriptionParameters)
.
On removal, the subscription will unregister the listener from any
currently matched IEventSource
instances.
This is an idempotent operation.
removeListener
in interface ISubscriptionManager
parameters
- the subscription parameters identifying the subscriptionlistener
- the listener to remove from the subscription's list of
listeners
true
if the listener was removed, false
if it was not foundpublic final boolean includes(IAddressable parameters)
ISubscriptionManager
ISubscription
instance whose
subscription parameters include the parameters passed in.
This operation is not a key lookup and will search through all subscriptions until one is found that would include the parameters.
includes
in interface ISubscriptionManager
parameters
- the parameters to check
true
if there is at least one subscription instance
that includes the parametersISubscriptionParameters.includes(IAddressable)
public List<IEventListener> getListeners(ISubscriptionParameters parameters)
ISubscriptionManager
IEventListener
instances that have been
added to the subscription identified by the parameters. The subscription
is found using a key lookup operation; the subscription is found by
association with the parameters.
This operation performs no semantic matching with wildcards, it is a key lookup operation.
getListeners
in interface ISubscriptionManager
parameters
- the subscription parameters identifying the subscription
IEventListener
instances for the identified
subscription or Collections.emptyList()
public final byte[] getContainerDestroyedMessage(ContainerDestroyedEvent event)
IChannelOperations
getContainerDestroyedMessage
in interface IChannelOperations
event
- the container destroyed event to convert into byte[] form
public void invokeRpc(String remoteContextIdentity, byte[] rpcData)
IRpcTransmissionManager
invokeRpc
in interface IRpcTransmissionManager
remoteContextIdentity
- the identity of the remote context that the RPC should be sent
torpcData
- the RPC in its byte[] formIRpcManager
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |