|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object | +--JavaGroups.Channel
A channel represents a group communication endpoint (like BSD datagram sockets). A client joins a group by connecting the channel to a group address and leaves it by disconnecting. Messages sent over the channel are received by all group members that are connected to the same group (that is, all member that have the same group address).
The FSM for a channel is roughly as follows: a channel is created (unconnected). The channel is connected to a group (connected). Messages can now be sent and received. The channel is disconnected from the group (unconnected). The channel could now be connected to a different group again. The channel is closed (closed).
Only a single sender is allowed to be connected to a channel at a time, but there can be more than one channel in an application.
Messages can be sent to the group members using the Send method and messages can be received using Receive (pull approach).
A channel instance is created using either a ChannelFactory or the public
constructor. Each implementation of a channel must provide a subclass of
Channel and an implementation of ChannelFactory.
Various degrees of sophistication in message exchange can be achieved using building blocks on top of channels, e.g. light-weight groups, synchronous message invocation, or remote method calls. Channels are on the same abstraction level as sockets, and should really be simple to use. Higher-level abstractions are all built on top of channels.
java.net.DatagramPacket,
java.net.MulticastSocket| Field Summary | |
static int |
BLOCK
|
static int |
GET_STATE_EVENTS
|
static int |
LOCAL
|
static int |
SUSPECT
|
static int |
VIEW
|
| Method Summary | |
abstract void |
BlockOk()
Called to acknowledge a Block (callback in MembershipListener or
BlockEvent received from call to Receive). |
abstract void |
Close()
Destroys the channel and its associated resources (e.g. |
abstract void |
Connect(java.lang.Object group_address)
Connects the channel to a group. |
abstract void |
Disconnect()
Disconnects the channel from the current group (if connected), leaving the group. |
void |
Down(Event evt)
Access to event mechanism of channels. |
abstract boolean |
GetAllStates(java.util.Vector targets,
long timeout)
Retrieve all states of the group members. |
abstract java.lang.Object |
GetGroupAddress()
Returns the group address of the group of which the channel is a member. |
abstract java.lang.Object |
GetLocalAddress()
Returns the channel's own address. |
abstract java.lang.Object |
GetOpt(int option)
Gets an option. |
abstract boolean |
GetState(java.lang.Object target,
long timeout)
Retrieve the state of the group. |
abstract View |
GetView()
Gets the current view. |
abstract java.lang.Object |
Peek(long timeout)
Returns the next message, view, block, suspect or other event without removing it from the queue. |
abstract java.lang.Object |
Receive(long timeout)
Receives a message, a view change or a block event. |
void |
ReturnState(java.lang.Object state)
Called by the application is response to receiving a GetState object when
calling Receive. |
abstract void |
Send(Message msg)
Sends a message to a destination. |
void |
SetChannelListener(ChannelListener channel_listener)
Allows to be notified when a channel event such as connect, disconnect or close occurs. |
abstract void |
SetOpt(int option,
java.lang.Object value)
Sets an option. |
void |
SetUpHandler(UpHandler up_handler)
When up_handler is set, all events will be passed to it directly. |
| Methods inherited from class java.lang.Object |
equals,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
| Field Detail |
public static final int BLOCK
public static final int VIEW
public static final int SUSPECT
public static final int LOCAL
public static final int GET_STATE_EVENTS
| Method Detail |
public abstract void Connect(java.lang.Object group_address)
throws ChannelClosed
All channels with the same group address form a group, that means all messages sent to the group will be received by all channels connected to the same group address.
The group address is opaque, and can only be interpreted by a channel implementation, i.e. the implementation decides what to do with the object.
Channel.Disconnectpublic abstract void Disconnect()
Channel.Connectpublic abstract void Close()
ChannelClosed exception
(or results in a null operation). It is a null operation if the channel is already closed.
If the channel is connected to a group, Disconnect will be called first.
public abstract void Send(Message msg)
throws ChannelNotConnected,
ChannelClosed
null address sends the message
to all group members.
oneway field which determines whether a response is
expected etc.
msg - The message to be sent. Destination and buffer should be set. A null destination
means to send to all group members.public void Down(Event evt)
public abstract java.lang.Object Receive(long timeout)
throws ChannelNotConnected,
ChannelClosed,
Timeout
SetOpt, the
type of objects to be received can be determined (e.g. not views and blocks, just
messages).
The possible types returned can be:
Message. Normal message
Event. All other events (used by JChannel)
View. A view change.
BlockEvent. A block event indicating an impending view change.
SuspectEvent. A notification of a suspected member.
GetStateEvent. The current state of the application should be
returned using ReturnState.
SetStateEvent. The state of a single/all members as requested previously
by having called instanceof operator can be used to discriminate between different types
returned.timeout - Value in milliseconds. Value <= 0 means wait forever
public abstract java.lang.Object Peek(long timeout)
throws ChannelNotConnected,
ChannelClosed,
Timeout
timeout - Value in milliseconds. Value <= 0 means wait foreverReceivepublic abstract View GetView()
Receive to do so. The view may only be available after a successful
Connect. The result of calling this method on an unconnected channel
is implementation defined (may return null). Calling it on a channel that is not
enabled to receive view events (via SetOpt) returns
null. Calling this method on a closed channel returns a null view.public abstract java.lang.Object GetLocalAddress()
Send operation.public abstract java.lang.Object GetGroupAddress()
Connect. Calling this method on a closed
channel returns null.public void SetUpHandler(UpHandler up_handler)
public void SetChannelListener(ChannelListener channel_listener)
public abstract void SetOpt(int option,
java.lang.Object value)
BLOCK (0). Turn the reception of BLOCK events on/off (value is Boolean).
Default is off. If set to on, receiving VIEW events will be set to on, too.
VIEW (1). Turn the reception of VIEW events on/off (value is Boolean).
Default is on.
SUSPECT (2). Turn the reception of SUSPECT events on/off (value is Boolean).
Default is on.
LOCAL (3). Receive its own broadcast messages to the group
(value is Boolean). Default is on.
GET_STATE_EVENTS (4). Turn the reception of GetState events on/off
(value is Boolean). Default is off, which means that no other members can
ask this member for its state (null will be returned).
public abstract java.lang.Object GetOpt(int option)
null.option - The option to be returned.public abstract void BlockOk()
MembershipListener or
BlockEvent received from call to Receive).
After sending BlockOk, no messages should be sent until a new view has been received.
Calling this method on a closed channel has no effect.
public abstract boolean GetState(java.lang.Object target,
long timeout)
SetStateEvent will have been
added to the channel's queue, causing Receive to return the state in one of
the next invocations. If false, no state will be retrieved by Receive.target - The address of the member from which the state is to be retrieved. If it is
null, the oldest member is contacted.timeout - Milliseconds to wait for the response (0 = wait indefinitely).
public abstract boolean GetAllStates(java.util.Vector targets,
long timeout)
SetStateEvent will have been
added to the channel's queue, causing Receive to return the states in one of
the next invocations. If false, no states will be retrieved by Receive.targets - A list of members which are contacted for states. If the list is null,
all the current members of the group will be contacted.timeout - Milliseconds to wait for the response (0 = wait indefinitely).public void ReturnState(java.lang.Object state)
GetState object when
calling Receive.state - The state of the application as a Serializable or Externaizable
(to send over the network).
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||