org.jgroups.stack
Class ProtocolStack

java.lang.Object
  extended by org.jgroups.stack.Protocol
      extended by org.jgroups.stack.ProtocolStack
All Implemented Interfaces:
Transport

public class ProtocolStack
extends Protocol
implements Transport

A ProtocolStack manages a number of protocols layered above each other. It creates all protocol classes, initializes them and, when ready, starts all of them, beginning with the bottom most protocol. It also dispatches messages received from the stack to registered objects (e.g. channel, GMP) and sends messages sent by those objects down the stack.

The ProtocolStack makes use of the Configurator to setup and initialize stacks, and to destroy them again when not needed anymore

Author:
Bela Ban

Field Summary
static int ABOVE
           
static int BELOW
           
 TimeScheduler timer
           
 
Fields inherited from class org.jgroups.stack.Protocol
down_handler, down_prot, down_queue, down_thread, down_thread_prio, log, observer, props, stack, stats, trace, up_handler, up_prot, up_queue, up_thread, up_thread_prio, warn
 
Constructor Summary
ProtocolStack()
          Only used by Simulator; don't use
ProtocolStack(JChannel channel, java.lang.String setup_string)
           
 
Method Summary
 Protocol createProtocol(java.lang.String prot_spec)
          Creates a new protocol given the protocol specification.
 void destroy()
          This method is called on a Channel.close().
 void down(Event evt)
          An event is to be sent down the stack.
 java.util.Map dumpStats()
           
 java.lang.String dumpTimerQueue()
           
 Protocol findProtocol(java.lang.String name)
          Returns a given protocol or null if not found
 void flushEvents()
          Deprecated.  
 Channel getChannel()
           
 java.lang.String getName()
           
 java.util.Vector getProtocols()
          Returns all protocols in a list, from top to bottom.
 void insertProtocol(Protocol prot, int position, java.lang.String neighbor_prot)
          Inserts an already created (and initialized) protocol into the protocol list.
 java.lang.String printProtocolSpec(boolean include_properties)
          Prints the names of the protocols, from the bottom to top.
 java.lang.String printProtocolSpecAsXML()
           
 java.lang.Object receive(long timeout)
           
protected  void receiveUpEvent(Event evt)
          Internal method, should not be called by clients.
 void removeProtocol(java.lang.String prot_name)
          Removes a protocol from the stack.
 void send(Message msg)
           
 void setup()
           
 void startDownHandler()
          Used internally.
 void startStack()
          Start all layers.
 void startUpHandler()
          Used internally.
 void startWork()
          Override with null functionality: we don't need any threads to be started !
 void stopInternal()
          Used internally.
 void stopStack()
          Iterates through all the protocols from top to bottom and does the following: Waits until all messages in the down queue have been flushed (ie., size is 0) Calls stop() on the protocol
 void stopWork()
          Override with null functionality: we don't need any threads to be started !
 void up(Event evt)
          An event was received from the layer below.
 
Methods inherited from class org.jgroups.stack.Protocol
downThreadEnabled, enableStats, getDownProtocol, getDownQueue, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, init, isTrace, isWarn, passDown, passUp, printStats, providedDownServices, providedUpServices, receiveDownEvent, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setObserver, setProperties, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, start, statsEnabled, stop, upThreadEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

timer

public final TimeScheduler timer

ABOVE

public static final int ABOVE
See Also:
Constant Field Values

BELOW

public static final int BELOW
See Also:
Constant Field Values
Constructor Detail

ProtocolStack

public ProtocolStack(JChannel channel,
                     java.lang.String setup_string)
              throws ChannelException
Throws:
ChannelException

ProtocolStack

public ProtocolStack()
Only used by Simulator; don't use

Method Detail

getChannel

public Channel getChannel()

getProtocols

public java.util.Vector getProtocols()
Returns all protocols in a list, from top to bottom. These are not copies of protocols, so modifications will affect the actual instances !


dumpStats

public java.util.Map dumpStats()
Overrides:
dumpStats in class Protocol
Returns:
Map>

dumpTimerQueue

public java.lang.String dumpTimerQueue()

printProtocolSpec

public java.lang.String printProtocolSpec(boolean include_properties)
Prints the names of the protocols, from the bottom to top. If include_properties is true, the properties for each protocol will also be printed.


printProtocolSpecAsXML

public java.lang.String printProtocolSpecAsXML()

setup

public void setup()
           throws java.lang.Exception
Throws:
java.lang.Exception

createProtocol

public Protocol createProtocol(java.lang.String prot_spec)
                        throws java.lang.Exception
Creates a new protocol given the protocol specification.

Parameters:
prot_spec - The specification of the protocol. Same convention as for specifying a protocol stack. An exception will be thrown if the class cannot be created. Example:
"VERIFY_SUSPECT(timeout=1500)"
Note that no colons (:) have to be specified
Returns:
Protocol The newly created protocol
Throws:
java.lang.Exception - Will be thrown when the new protocol cannot be created

insertProtocol

public void insertProtocol(Protocol prot,
                           int position,
                           java.lang.String neighbor_prot)
                    throws java.lang.Exception
Inserts an already created (and initialized) protocol into the protocol list. Sets the links to the protocols above and below correctly and adjusts the linked list of protocols accordingly. Note that this method may change the value of top_prot or bottom_prot.

Parameters:
prot - The protocol to be inserted. Before insertion, a sanity check will ensure that none of the existing protocols have the same name as the new protocol.
position - Where to place the protocol with respect to the neighbor_prot (ABOVE, BELOW)
neighbor_prot - The name of the neighbor protocol. An exception will be thrown if this name is not found
Throws:
java.lang.Exception - Will be thrown when the new protocol cannot be created, or inserted.

removeProtocol

public void removeProtocol(java.lang.String prot_name)
                    throws java.lang.Exception
Removes a protocol from the stack. Stops the protocol and readjusts the linked lists of protocols.

Parameters:
prot_name - The name of the protocol. Since all protocol names in a stack have to be unique (otherwise the stack won't be created), the name refers to just 1 protocol.
Throws:
java.lang.Exception - Thrown if the protocol cannot be stopped correctly.

findProtocol

public Protocol findProtocol(java.lang.String name)
Returns a given protocol or null if not found


destroy

public void destroy()
Description copied from class: Protocol
This method is called on a Channel.close(). Does some cleanup; after the call the VM will terminate

Overrides:
destroy in class Protocol

startStack

public void startStack()
                throws java.lang.Exception
Start all layers. The Protocol.start() method is called in each protocol, from top to bottom. Each layer can perform some initialization, e.g. create a multicast socket

Throws:
java.lang.Exception

startUpHandler

public void startUpHandler()
Description copied from class: Protocol
Used internally. If overridden, call this method first. Only creates the up_handler thread if down_thread is true

Overrides:
startUpHandler in class Protocol

startDownHandler

public void startDownHandler()
Description copied from class: Protocol
Used internally. If overridden, call this method first. Only creates the down_handler thread if down_thread is true

Overrides:
startDownHandler in class Protocol

stopStack

public void stopStack()
Iterates through all the protocols from top to bottom and does the following:
  1. Waits until all messages in the down queue have been flushed (ie., size is 0)
  2. Calls stop() on the protocol


flushEvents

public void flushEvents()
Deprecated. 

Not needed anymore, just left in here for backwards compatibility with JBoss AS


stopInternal

public void stopInternal()
Description copied from class: Protocol
Used internally. If overridden, call parent's method first

Overrides:
stopInternal in class Protocol

send

public void send(Message msg)
          throws java.lang.Exception
Specified by:
send in interface Transport
Throws:
java.lang.Exception

receive

public java.lang.Object receive(long timeout)
                         throws java.lang.Exception
Specified by:
receive in interface Transport
Throws:
java.lang.Exception

getName

public java.lang.String getName()
Specified by:
getName in class Protocol

up

public void up(Event evt)
Description copied from class: Protocol
An event was received from the layer below. Usually the current layer will want to examine the event type and - depending on its type - perform some computation (e.g. removing headers from a MSG event type, or updating the internal membership list when receiving a VIEW_CHANGE event). Finally the event is either a) discarded, or b) an event is sent down the stack using passDown() or c) the event (or another event) is sent up the stack using passUp().

Overrides:
up in class Protocol

down

public void down(Event evt)
Description copied from class: Protocol
An event is to be sent down the stack. The layer may want to examine its type and perform some action on it, depending on the event's type. If the event is a message MSG, then the layer may need to add a header to it (or do nothing at all) before sending it down the stack using passDown(). In case of a GET_ADDRESS event (which tries to retrieve the stack's address from one of the bottom layers), the layer may need to send a new response event back up the stack using passUp().

Overrides:
down in class Protocol

receiveUpEvent

protected void receiveUpEvent(Event evt)
Description copied from class: Protocol
Internal method, should not be called by clients. Used by ProtocolStack. I would have used the 'friends' modifier, but this is available only in C++ ... If the up_handler thread is not available (down_thread == false), then directly call the up() method: we will run on the caller's thread (e.g. the protocol layer below us).

Overrides:
receiveUpEvent in class Protocol

startWork

public void startWork()
Override with null functionality: we don't need any threads to be started !


stopWork

public void stopWork()
Override with null functionality: we don't need any threads to be started !



Copyright ? 1998-2005 Bela Ban. All Rights Reserved.