org.jgroups.blocks

Class NotificationBus

Implemented Interfaces:
MembershipListener, MessageListener

public class NotificationBus
extends java.lang.Object
implements MessageListener, MembershipListener

This class provides notification sending and handling capability. Producers can send notifications to all registered consumers. Provides hooks to implement shared group state, which allows an application programmer to maintain a local cache which is replicated by all instances. NotificationBus sits on top of a channel, however it creates its channel itself, so the application programmers do not have to provide their own channel.
Author:
Bela Ban

Nested Class Summary

static interface
NotificationBus.Consumer

Field Summary

protected Log
log

Constructor Summary

NotificationBus()
NotificationBus(String bus_name)
NotificationBus(String bus_name, String properties)

Method Summary

void
block()
Called whenever the member needs to stop sending messages.
Serializable
getCache()
Serializable
getCacheFromCoordinator(long timeout, int max_tries)
Determines the coordinator and asks it for its cache.
Serializable
getCacheFromMember(Address mbr, long timeout, int max_tries)
Determines the coordinator and asks it for its cache.
Channel
getChannel()
Answers the Channel.
Address
getLocalAddress()
Vector
getMembership()
Returns a reference to the real membership: don't modify.
byte[]
getState()
Answers the group state; e.g., when joining.
boolean
isCoordinator()
void
notifyConsumer(Serializable n)
Don't multicast this to all members, just apply it to local consumers.
void
receive(Message msg)
Called when a message is received.
void
sendNotification(Serializable n)
Pack the argument in a Info, serialize that one into the message buffer and send the message
void
setConsumer(NotificationBus.Consumer c)
void
setState(byte[] state)
Sets the group state; e.g., when joining.
void
start()
void
stop()
void
suspect(Address suspected_mbr)
Called whenever a member is suspected of having crashed, but has not yet been excluded.
void
viewAccepted(View new_view)
Called when a change in membership has occurred.

Field Details

log

protected final Log log

Constructor Details

NotificationBus

public NotificationBus()
            throws Exception

NotificationBus

public NotificationBus(String bus_name)
            throws Exception

NotificationBus

public NotificationBus(String bus_name,
                       String properties)
            throws Exception

Method Details

block

public void block()
Called whenever the member needs to stop sending messages. When the next view is received (viewAccepted()), the member can resume sending messages. If a member does not comply, the message(s) sent between a block() and a matching viewAccepted() callback will probably be delivered in the next view. The block() callback is only needed by the Virtual Synchrony suite of protocols (FLUSH protocol)3.2, otherwise it will never be invoked.
Specified by:
block in interface MembershipListener

getCache

public Serializable getCache()

getCacheFromCoordinator

public Serializable getCacheFromCoordinator(long timeout,
                                            int max_tries)
Determines the coordinator and asks it for its cache. If there is no coordinator (because we are first member), null will be returned. Used only internally by NotificationBus.
Parameters:
timeout - Max number of msecs until the call returns
max_tries - Max number of attempts to fetch the cache from the coordinator

getCacheFromMember

public Serializable getCacheFromMember(Address mbr,
                                       long timeout,
                                       int max_tries)
Determines the coordinator and asks it for its cache. If there is no coordinator (because we are first member), null will be returned. Used only internally by NotificationBus.
Parameters:
mbr - The address of the member from which to fetch the state. If null, the current coordinator will be asked for the state
timeout - Max number of msecs until the call returns - if timeout elapses null will be returned
max_tries - Max number of attempts to fetch the cache from the coordinator (will be set to 1 if <321)

getChannel

public Channel getChannel()
Answers the Channel. Used to operate on the underlying channel directly, e.g. perform operations that are not provided using only NotificationBus. Should be used sparingly.
Returns:
underlying Channel

getLocalAddress

public Address getLocalAddress()

getMembership

public Vector getMembership()
Returns a reference to the real membership: don't modify. If you need to modify, make a copy first !
Returns:
Vector of Address objects

getState

public byte[] getState()
Answers the group state; e.g., when joining.
Specified by:
getState in interface MessageListener
Returns:
byte[]

isCoordinator

public boolean isCoordinator()

notifyConsumer

public void notifyConsumer(Serializable n)
Don't multicast this to all members, just apply it to local consumers.

receive

public void receive(Message msg)
Called when a message is received.
Specified by:
receive in interface MessageListener
Parameters:
msg -

sendNotification

public void sendNotification(Serializable n)
Pack the argument in a Info, serialize that one into the message buffer and send the message

setConsumer

public void setConsumer(NotificationBus.Consumer c)

setState

public void setState(byte[] state)
Sets the group state; e.g., when joining.
Specified by:
setState in interface MessageListener
Parameters:
state -

start

public void start()
            throws Exception

stop

public void stop()

suspect

public void suspect(Address suspected_mbr)
Called whenever a member is suspected of having crashed, but has not yet been excluded.
Specified by:
suspect in interface MembershipListener

viewAccepted

public void viewAccepted(View new_view)
Called when a change in membership has occurred. No long running actions should be done in this callback. If some long running action needs to be performed, it should be done in a separate thread.
Specified by:
viewAccepted in interface MembershipListener

Copyright B) 1998-2005 Bela Ban. All Rights Reserved.