| 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectfulmine.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 TxEvents 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 A
 
 
 When 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 channel| Method Detail | 
|---|
public final boolean subscribe(ISubscriptionParameters parameters)
ISubscriptionManagerISubscription 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 ISubscriptionManagerparameters - 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 ISubscriptionManagerparameters - 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 IChannelOperationsbytes - the byte[] encapsulating the message to sendprotected AsyncLog getLog()
AbstractLifeCycle
getLog in class AbstractLifeCycleprotected void doStart()
AbstractLifeCycleRuntimeException or subclass
 thereof. When this method is called, the AbstractLifeCycle.isActive() method will
 return true.
doStart in class AbstractLifeCycleprotected final void doDestroy()
AbstractLifeCycleRuntimeException 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 IChannelIFrameworkContextpublic final String toString()
toString in class AbstractLifeCyclepublic final boolean isConnectionSyn()
IChannelOperations
isConnectionSyn in interface IChannelOperationstrue 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)
IRetransmitterIContainer instances with matching type
 and identity.
 Wildcards are not supported with this operation.
requestRetransmit in interface IRetransmitteridentityRegularExpression - 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()
IRetransmitterIContainer instances subscribed for by the local
 context.
requestRetransmitAll in interface IRetransmitterpublic final void retransmitAll()
IRetransmitterIContainer instances
 that the connected remote context has subscribed for.
retransmitAll in interface IRetransmitter
public final void retransmit(String identityRegularExpression,
                             IType type,
                             IDomain domain)
IRetransmitterIContainer 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 IRetransmitteridentityRegularExpression - 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 IChannelIConnection used by the channel
public final boolean addListener(ISubscriptionParameters parameters,
                                 IEventListener listener)
ISubscriptionManagerIEventListener 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 ISubscriptionManagerparameters - 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)
ISubscriptionManagerIEventSource 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 ISubscriptionManageridentity - identifies the attributes of the created event sourcepublic final void eventSourceDestroyed(IAddressable identity)
ISubscriptionManagerIEventSource is destroyed. Complimentary
 to ISubscriptionManager.eventSourceCreated(IAddressable).
eventSourceDestroyed in interface ISubscriptionManageridentity - identifies the attributes of the destroyed event sourcepublic final Collection<IEventSource> getSubscribedSources()
ISubscriptionManagerCollection of all the event sources that
 are currently subscribed for.
getSubscribedSources in interface ISubscriptionManagerCollection of all the event source
         instances that are currently subscribed forpublic final Collection<IEventSource> getSubscribedSources(ISubscriptionParameters parameters)
ISubscriptionManagerCollection of the currently subscribed
 event sources that are matched by the subscription parameters.
 
 This does a matching operation to find any other ISubscriptions
 that would include
 these parameters and then adds the IEventSources to the
 collection to return.
 
This is not a key lookup operation.
getSubscribedSources in interface ISubscriptionManagerparameters - 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)
ISubscriptionManagerISubscription 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 ISubscriptionManagersource - 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 manager
public final boolean removeListener(ISubscriptionParameters parameters,
                                    IEventListener listener)
ISubscriptionManagerIEventListener 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 ISubscriptionManagerparameters - 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)
ISubscriptionManagerISubscription 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 ISubscriptionManagerparameters - 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)
ISubscriptionManagerIEventListener 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 ISubscriptionManagerparameters - 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 IChannelOperationsevent - the container destroyed event to convert into byte[] form
public void invokeRpc(String remoteContextIdentity,
                      byte[] rpcData)
IRpcTransmissionManager
invokeRpc in interface IRpcTransmissionManagerremoteContextIdentity - 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 | |||||||||