Package org.jgroups.stack
Class ProtocolStack
- java.lang.Object
-
- org.jgroups.stack.Protocol
-
- 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
- Version:
- $Id: ProtocolStack.java,v 1.59.2.9.2.1 2009/03/31 16:34:13 belaban Exp $
- Author:
- Bela Ban
-
-
Constructor Summary
Constructors Constructor Description ProtocolStack()
Only used by Simulator; don't useProtocolStack(JChannel channel, java.lang.String setup_string)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Protocol
createProtocol(java.lang.String prot_spec)
Creates a new protocol given the protocol specification.void
destroy()
This method is called on aChannel.close()
.java.lang.Object
down(Event evt)
An event is to be sent down the stack.java.util.Map<java.lang.String,java.lang.Object>
dumpStats()
java.util.Map<java.lang.String,java.lang.Object>
dumpStats(java.lang.String protocol_name)
java.lang.String
dumpTimerQueue()
Deprecated.UseTP.getTimer()
instead to fetch the timer from the transport and then invoke the method on itProtocol
findProtocol(java.lang.Class<?> clazz)
Protocol
findProtocol(java.lang.String name)
Returns a given protocol or null if not foundvoid
flushEvents()
Deprecated.Channel
getChannel()
java.util.Map<java.lang.Thread,java.util.concurrent.locks.ReentrantLock>
getLocks()
java.lang.String
getName()
java.util.Vector<Protocol>
getProtocols()
Returns all protocols in a list, from top to bottom.static java.util.concurrent.ConcurrentMap<java.lang.String,Tuple<TP,java.lang.Short>>
getSingletonTransports()
ThreadFactory
getThreadFactory()
Deprecated.UseProtocol.getThreadFactory()
insteadstatic ThreadFactory
getTimerThreadFactory()
Deprecated.int
getTimerThreads()
Deprecated.UseTP.getTimer()
to fetch the timer and call getCorePoolSize() directlyTP
getTransport()
Returns the bottom most protocolvoid
insertProtocol(Protocol prot, int position, java.lang.Class<? extends Protocol> neighbor_prot)
void
insertProtocol(Protocol prot, int position, java.lang.String neighbor_prot)
Inserts an already created (and initialized) protocol into the protocol list.void
insertProtocol(Protocol prot, int position, Protocol neighbor_prot)
java.lang.String
printProtocolSpec(boolean include_properties)
Prints the names of the protocols, from the bottom to top.java.lang.String
printProtocolSpecAsPlainString()
java.lang.String
printProtocolSpecAsXML()
java.lang.Object
receive(long timeout)
Protocol
removeProtocol(java.lang.String prot_name)
Removes a protocol from the stack.void
send(Message msg)
void
setThreadFactory(ThreadFactory f)
Deprecated.UseProtocol.getThreadFactory()
insteadstatic void
setTimerThreadFactory(ThreadFactory f)
Deprecated.void
setup()
void
startStack(java.lang.String cluster_name)
Start all layers.void
stopStack(java.lang.String cluster_name)
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 protocoljava.lang.Object
up(Event evt)
An event was received from the layer below.-
Methods inherited from class org.jgroups.stack.Protocol
downThreadEnabled, enableStats, getDownProtocol, getProperties, getProtocolStack, getUpProtocol, init, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setProperties, setPropertiesInternal, setProtocolStack, setUpProtocol, start, statsEnabled, stop, upThreadEnabled
-
-
-
-
Field Detail
-
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() throws ChannelException
Only used by Simulator; don't use- Throws:
ChannelException
-
-
Method Detail
-
getThreadFactory
public ThreadFactory getThreadFactory()
Deprecated.UseProtocol.getThreadFactory()
insteadDescription copied from class:Protocol
Supposed to be overwritten by subclasses. Usually the transport returns a valid non-null thread factory, but thread factories can also be created by individual protocols- Overrides:
getThreadFactory
in classProtocol
- Returns:
-
getTimerThreadFactory
@Deprecated public static ThreadFactory getTimerThreadFactory()
Deprecated.
-
setThreadFactory
public void setThreadFactory(ThreadFactory f)
Deprecated.UseProtocol.getThreadFactory()
instead- Parameters:
f
-
-
setTimerThreadFactory
public static void setTimerThreadFactory(ThreadFactory f)
Deprecated.- Parameters:
f
-
-
getLocks
public java.util.Map<java.lang.Thread,java.util.concurrent.locks.ReentrantLock> getLocks()
-
getChannel
public Channel getChannel()
-
getTimerThreads
public int getTimerThreads()
Deprecated.UseTP.getTimer()
to fetch the timer and call getCorePoolSize() directly- Returns:
-
getProtocols
public java.util.Vector<Protocol> getProtocols()
Returns all protocols in a list, from top to bottom. These are not copies of protocols, so modifications will affect the actual instances !
-
getTransport
public TP getTransport()
Returns the bottom most protocol- Overrides:
getTransport
in classProtocol
-
getSingletonTransports
public static java.util.concurrent.ConcurrentMap<java.lang.String,Tuple<TP,java.lang.Short>> getSingletonTransports()
-
dumpStats
public java.util.Map<java.lang.String,java.lang.Object> dumpStats()
-
dumpStats
public java.util.Map<java.lang.String,java.lang.Object> dumpStats(java.lang.String protocol_name)
-
dumpTimerQueue
public java.lang.String dumpTimerQueue()
Deprecated.UseTP.getTimer()
instead to fetch the timer from the transport and then invoke the method on it- Returns:
-
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()
-
printProtocolSpecAsPlainString
public java.lang.String printProtocolSpecAsPlainString()
-
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.
-
insertProtocol
public void insertProtocol(Protocol prot, int position, java.lang.Class<? extends Protocol> neighbor_prot) throws java.lang.Exception
- Throws:
java.lang.Exception
-
insertProtocol
public void insertProtocol(Protocol prot, int position, Protocol neighbor_prot) throws java.lang.Exception
- Throws:
java.lang.Exception
-
removeProtocol
public Protocol 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
-
findProtocol
public Protocol findProtocol(java.lang.Class<?> clazz)
-
destroy
public void destroy()
Description copied from class:Protocol
This method is called on aChannel.close()
. Does some cleanup; after the call the VM will terminate
-
startStack
public void startStack(java.lang.String cluster_name) throws java.lang.Exception
Start all layers. TheProtocol.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
-
stopStack
public void stopStack(java.lang.String cluster_name)
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
-
flushEvents
public void flushEvents()
Deprecated.Not needed anymore, just left in here for backwards compatibility with JBoss AS
-
send
public void send(Message msg) throws java.lang.Exception
-
receive
public java.lang.Object receive(long timeout) throws java.lang.Exception
-
up
public java.lang.Object 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 usingdown_prot.down()
or c) the event (or another event) is sent up the stack usingup_prot.up()
.
-
down
public java.lang.Object 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 usingdown_prot.down()
. 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 usingup_prot.up()
.
-
-