org.jgroups
public abstract class Channel extends Object implements Transport
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.
See Also: java.net.DatagramPacket java.net.MulticastSocket
Field Summary | |
---|---|
static int | AUTO_GETSTATE |
static int | AUTO_RECONNECT |
static int | BLOCK |
protected ChannelListener | channel_listener |
protected Set | channel_listeners |
static int | GET_STATE_EVENTS |
static int | LOCAL |
protected Receiver | receiver |
static int | SUSPECT |
protected UpHandler | up_handler |
static int | VIEW |
Method Summary | |
---|---|
void | addChannelListener(ChannelListener listener)
Allows to be notified when a channel event such as connect, disconnect or close occurs.
|
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., the protocol stack). |
abstract void | connect(String channel_name)
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. |
String | dumpQueue() |
abstract Map | dumpStats()
Returns a map of statistics of the various protocols and of the channel itself. |
abstract boolean | getAllStates(Vector targets, long timeout)
Retrieve all states of the group members. |
abstract String | getChannelName()
Returns the group address of the group of which the channel is a member. |
abstract Address | getLocalAddress()
Returns the channel's own address. |
protected abstract Log | getLog() |
int | getNumMessages()
Returns the number of messages that are waiting. |
abstract Object | getOpt(int option)
Gets an option. |
abstract boolean | getState(Address target, long timeout)
Retrieve the state of the group. |
abstract View | getView()
Gets the current view. |
abstract boolean | isConnected()
Determines whether the channel is connected to a group. |
abstract boolean | isOpen()
Determines whether the channel is open;
i.e., the protocol stack has been created (may not be connected though). |
protected void | notifyChannelClosed(Channel c) |
protected void | notifyChannelConnected(Channel c) |
protected void | notifyChannelDisconnected(Channel c) |
protected void | notifyChannelReconnected(Address addr) |
protected void | notifyChannelShunned() |
void | open()
Re-opens a closed channel. |
static String | option2String(int option) |
abstract Object | peek(long timeout) Returns the next message, view, block, suspect or other event without removing
it from the queue. |
abstract Object | receive(long timeout) Receives a message, a view change or a block event. |
void | removeChannelListener(ChannelListener listener) |
abstract void | returnState(byte[] 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 (unicast) destination. |
abstract void | send(Address dst, Address src, Serializable obj)
Helper method. |
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, Object value)
Sets an option. |
void | setReceiver(Receiver r) Sets the receiver, which will handle all messages, view changes etc |
void | setUpHandler(UpHandler up_handler)
When up_handler is set, all events will be passed to it directly. |
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.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, disconnec()t
will be called first.
All channels with the same name form a group, that means all messages sent to the group will be received by all channels connected to the same channel name.
Parameters: channel_name The name of the chanel to connect to.
Throws: ChannelException The protocol stack cannot be started ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first.
See Also: Channel
See Also: connect
Returns: Map
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
.Parameters: 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).
Returns: boolean True if the state was retrieved successfully, otherwise false.
Throws: ChannelNotConnectedException The channel must be connected to receive messages. ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first.
Connect
. Calling this method on a closed
channel returns null
.Returns: The group address
Returns: The channel's address. Generated by the underlying transport, and opaque.
Addresses can be used as destination in the Send
operation.
Returns: The number of messages on the queue, or -1 if the queue/channel is closed/disconnected.
null
.Parameters: option The option to be returned.
Returns: The object associated with an option.
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()
.Parameters: target The address of the member from which the state is to be retrieved. If it is null, the coordinator is contacted. timeout Milliseconds to wait for the response (0 = wait indefinitely).
Returns: boolean True if the state was retrieved successfully, otherwise false.
Throws: ChannelNotConnectedException The channel must be connected to receive messages. ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first.
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.Returns: The current view.
Parameters: timeout Value in milliseconds. Value <= 0 means wait forever
Returns: A Message, View, BlockEvent, SuspectEvent, GetStateEvent or SetStateEvent object, depending on what is on top of the internal queue.
Throws: ChannelNotConnectedException The channel must be connected to receive messages. ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first. TimeoutException Thrown when a timeout has occurred.
See Also: Channel
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 Channel.getState(s).
ExitEvent
. Signals that this member was forced to leave the group
(e.g., caused by the member being suspected.) The member can rejoin the group by calling
open(). If the AUTO_RECONNECT is set (see setOpt()), the reconnect will be done automatically.
instanceof
operator can be used to discriminate between different types
returned.Parameters: timeout Value in milliseconds. Value <= 0 means wait forever
Returns: A Message, View, BlockEvent, SuspectEvent, GetStateEvent, SetStateEvent or ExitEvent, depending on what is on top of the internal queue.
Throws: ChannelNotConnectedException The channel must be connected to receive messages. ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first. TimeoutException Thrown when a timeout has occurred.
getState()
object when calling receive()
.Parameters: state The state of the application as a byte buffer (to send over the network).
null
address sends the message
to all group members.
oneway
field which determines whether a response is
expected etc.
Parameters: msg The message to be sent. Destination and buffer should be set. A null destination means to send to all group members.
Throws: ChannelNotConnectedException The channel must be connected to send messages. ChannelClosedException The channel is closed and therefore cannot be used any longer. A new channel has to be created first.
Parameters: dst Destination address for message. If null, message will be sent to all current group members src Source (sender's) address. If null, it will be set by the protocol's transport layer before being put on the wire. Can usually be set to null. obj Serializable object. Will be serialized into the byte buffer of the Message. If it is not serializable, the byte buffer will be null.
Deprecated: Use addChannelListener() instead
Allows to be notified when a channel event such as connect, disconnect or close occurs. E.g. a PullPushAdapter may choose to stop when the channel is closed, or to start when it is opened.BLOCK
. 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
. Turn the reception of VIEW events on/off (value is Boolean).
Default is on.
SUSPECT
. Turn the reception of SUSPECT events on/off (value is Boolean).
Default is on.
LOCAL
. Receive its own broadcast messages to the group
(value is Boolean). Default is on.
GET_STATE_EVENTS
. 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).
AUTO_RECONNECT
. Turn auto-reconnection on/off. If on, when a member if forced out
of a group (EXIT event), then we will reconnect.
AUTO_GETSTATE
. Turn automatic fetching of state after an auto-reconnect on/off.
This also sets AUTO_RECONNECT to true (if not yet set).