org.jgroups.blocks

Class DistributedQueue

Implemented Interfaces:
Cloneable, MembershipListener, MessageListener

public class DistributedQueue
extends java.lang.Object
implements MessageListener, MembershipListener, Cloneable

Provides the abstraction of a java.util.LinkedList that is replicated at several locations. Any change to the list (reset, add, remove etc) will transparently be propagated to all replicas in the group. All read-only methods will always access the local replica.

Both keys and values added to the list must be serializable, the reason being that they will be sent across the network to all replicas of the group. An instance of this class will contact an existing member of the group to fetch its initial state. Beware to use a total protocol on initialization or elements would not be in same order on all replicas.

Author:
Romuald du Song

Nested Class Summary

static interface
DistributedQueue.Notification

Field Summary

protected Channel
channel
protected RpcDispatcher
disp
protected String
groupname
protected LinkedList
internalQueue
protected Vector
members
protected Object
mutex
protected Vector
notifs
protected boolean
stopped

Constructor Summary

DistributedQueue(String groupname, ChannelFactory factory, String properties, long state_timeout)
Creates a DistributedQueue
DistributedQueue(JChannel channel)
DistributedQueue(PullPushAdapter adapter, Serializable id)
Uses a user-provided PullPushAdapter to create the dispatcher rather than a Channel.

Method Summary

void
_add(Object value)
void
_addAll(Collection c)
void
_addAtHead(Object value)
protected void
_private_reset()
Object
_remove()
void
_reset()
void
add(Object value)
Add the speficied element at the bottom of the queue
void
addAll(Collection values)
Add the speficied collection to the top of the queue.
void
addAtHead(Object value)
Add the speficied element at the top of the queue
void
addNotifier(DistributedQueue.Notification n)
void
block()
Block sending and receiving of messages until ViewAccepted is called
protected void
checkResult(RspList rsp, Object retval)
Channel
getChannel()
Vector
getContents()
Address
getLocalAddress()
byte[]
getState()
protected void
init()
static void
main(String[] args)
Object
peek()
returns the first object on the queue, without removing it.
void
receive(Message msg)
Object
remove()
Try to return the first objet in the queue.It does not wait for an object.
Object
remove(long timeout)
void
removeNotifier(DistributedQueue.Notification n)
void
reset()
void
setState(byte[] new_state)
int
size()
void
start(long state_timeout)
void
stop()
void
suspect(Address suspected_mbr)
Called when a member is suspected
String
toString()
void
viewAccepted(View new_view)

Field Details

channel

protected Channel channel


disp

protected RpcDispatcher disp


groupname

protected String groupname


internalQueue

protected LinkedList internalQueue


members

protected Vector members


mutex

protected Object mutex


notifs

protected Vector notifs


stopped

protected boolean stopped

Constructor Details

DistributedQueue

public DistributedQueue(String groupname,
                        ChannelFactory factory,
                        String properties,
                        long state_timeout)
            throws ChannelException
Creates a DistributedQueue

Parameters:
groupname - The name of the group to join
factory - The ChannelFactory which will be used to create a channel
properties - The property string to be used to define the channel
state_timeout - The time to wait until state is retrieved in milliseconds. A value of 0 means wait forever.


DistributedQueue

public DistributedQueue(JChannel channel)


DistributedQueue

public DistributedQueue(PullPushAdapter adapter,
                        Serializable id)
Uses a user-provided PullPushAdapter to create the dispatcher rather than a Channel. If id is non-null, it will be used to register under that id. This is typically used when another building block is already using PullPushAdapter, and we want to add this building block in addition. The id is the used to discriminate between messages for the various blocks on top of PullPushAdapter. If null, we will assume we are the first block created on PullPushAdapter. The caller needs to call start(), before using the this block. It gives the opportunity for the caller to register as a lessoner for Notifications events.

Parameters:
adapter - The PullPushAdapter which to use as underlying transport
id - A serializable object (e.g. an Integer) used to discriminate (multiplex/demultiplex) between requests/responses for different building blocks on top of PullPushAdapter.

Method Details

_add

public void _add(Object value)


_addAll

public void _addAll(Collection c)


_addAtHead

public void _addAtHead(Object value)


_private_reset

protected void _private_reset()


_remove

public Object _remove()


_reset

public void _reset()


add

public void add(Object value)
Add the speficied element at the bottom of the queue

Parameters:
value -


addAll

public void addAll(Collection values)
Add the speficied collection to the top of the queue. Elements are added in the order that they are returned by the specified collection's iterator.

Parameters:
values -


addAtHead

public void addAtHead(Object value)
Add the speficied element at the top of the queue

Parameters:
value -


addNotifier

public void addNotifier(DistributedQueue.Notification n)


block

public void block()
Block sending and receiving of messages until ViewAccepted is called
Specified by:
block in interface MembershipListener


checkResult

protected void checkResult(RspList rsp,
                           Object retval)


getChannel

public Channel getChannel()


getContents

public Vector getContents()


getLocalAddress

public Address getLocalAddress()


getState

public byte[] getState()
Specified by:
getState in interface MessageListener


init

protected void init()


main

public static void main(String[] args)


peek

public Object peek()
returns the first object on the queue, without removing it. If the queue is empty this object blocks until the first queue object has been added

Returns:
the first object on the queue


receive

public void receive(Message msg)
Specified by:
receive in interface MessageListener


remove

public Object remove()
Try to return the first objet in the queue.It does not wait for an object.

Returns:
the first object in the queue or null if none were found.


remove

public Object remove(long timeout)

Parameters:
timeout - The time to wait until an entry is retrieved in milliseconds. A value of 0 means wait forever.

Returns:
the first object in the queue or null if none were found


removeNotifier

public void removeNotifier(DistributedQueue.Notification n)


reset

public void reset()


setState

public void setState(byte[] new_state)
Specified by:
setState in interface MessageListener


size

public int size()


start

public void start(long state_timeout)
            throws ChannelClosedException,
                   ChannelNotConnectedException


stop

public void stop()


suspect

public void suspect(Address suspected_mbr)
Called when a member is suspected
Specified by:
suspect in interface MembershipListener


toString

public String toString()


viewAccepted

public void viewAccepted(View new_view)
Specified by:
viewAccepted in interface MembershipListener


Copyright B) 2001,2002 www.jgroups.com . All Rights Reserved.