All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class JavaGroups.JavaStack.MessageProtocol

java.lang.Object
   |
   +----JavaGroups.JavaStack.Protocol
           |
           +----JavaGroups.JavaStack.MessageProtocol

public abstract class MessageProtocol
extends Protocol
implements RequestHandler
Based on Protocol, but incorporates RequestCorrelator and GroupRequest: the latter can be used to mcast messages to all members and receive their reponses.

A protocol based on this template can send messages to all members and receive all, a single, n, or none responses. Requests directed towards the protocol can be handled by overriding method Handle.

Requests and responses are in the form of Messages, which would typically need to contain information pertaining to the request/response, e.g. in the form of objects contained in the message. To use remote method calls, use RpcProtocol instead.

Typical use of of a MessageProtocol would be when a protocol needs to interact with its peer protocols at each of the members' protocol stacks. A simple protocol like fragmentation, which does not need to interact with other instances of fragmentation, may simply subclass Protocol instead.


Constructor Index

 o MessageProtocol()

Method Index

 o CastMessage(Vector, Message, int, long)
Cast a message to all members, and wait for mode responses.
 o Down(Event)
This message is not originated by this layer, therefore we can just pass it down without having to go through the request correlator.
 o Handle(Message)
Processes a request destined for this layer.
 o SendMessage(Message, int, long)
Sends a message to a single member (destination = msg.dest) and returns the response.
 o Up(Event)
An event was received from the layer below.

Constructors

 o MessageProtocol
 public MessageProtocol()

Methods

 o CastMessage
 public RspList CastMessage(Vector dests,
                            Message msg,
                            int mode,
                            long timeout)
Cast a message to all members, and wait for mode responses. The responses are returned in a response list, where each response is associated with its sender.

Uses GroupRequest.

Parameters:
dests - The members from which responses are expected. If it is null, replies from all members are expected. The request itself is multicast to all members.
msg - The message to be sent to n members
mode - Defined in GroupRequest. The number of responses to wait for:
  1. GET_FIRST: return the first response received.
  2. GET_ALL: wait for all responses (minus the ones from suspected members)
  3. GET_MAJORITY: wait for a majority of all responses (relative to the grp size)
  4. GET_ABS_MAJORITY: wait for majority (absolute, computed once)
  5. GET_N: wait for n responses (may block if n > group size)
  6. GET_NONE: wait for no responses, return immediately (non-blocking)
timeout - If 0: wait forever. Otherwise, wait for mode responses or timeout time.
Returns:
RspList A list of responses. Each response is an Object and associated to its sender.
 o SendMessage
 public Object SendMessage(Message msg,
                           int mode,
                           long timeout) throws Timeout, Suspected
Sends a message to a single member (destination = msg.dest) and returns the response. The message's destination must be non-zero !

 o Handle
 public Object Handle(Message req)
Processes a request destined for this layer. The return value is sent as response.

 o Up
 public final void Up(Event evt)
An event was received from the layer below.

Overrides:
Up in class Protocol
 o Down
 public final void Down(Event evt)
This message is not originated by this layer, therefore we can just pass it down without having to go through the request correlator. We do this ONLY for messages !

Overrides:
Down in class Protocol

All Packages  Class Hierarchy  This Package  Previous  Next  Index