org.jgroups.blocks
Class DistributedQueue

java.lang.Object
  extended byorg.jgroups.blocks.DistributedQueue
All Implemented Interfaces:
java.lang.Cloneable, MembershipListener, MessageListener

public class DistributedQueue
extends java.lang.Object
implements MessageListener, MembershipListener, java.lang.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  java.lang.String groupname
           
protected  java.util.LinkedList internalQueue
           
protected  java.util.Vector members
           
protected  java.lang.Object mutex
           
protected  java.util.Vector notifs
           
protected  boolean stopped
           
 
Constructor Summary
DistributedQueue(JChannel channel)
           
DistributedQueue(PullPushAdapter adapter, java.io.Serializable id)
          Uses a user-provided PullPushAdapter to create the dispatcher rather than a Channel.
DistributedQueue(java.lang.String groupname, ChannelFactory factory, java.lang.String properties, long state_timeout)
          Creates a DistributedQueue
 
Method Summary
 void _add(java.lang.Object value)
           
 void _addAll(java.util.Collection c)
           
 void _addAtHead(java.lang.Object value)
           
protected  void _private_reset()
           
 java.lang.Object _remove()
           
 void _reset()
           
 void add(java.lang.Object value)
          Add the speficied element at the bottom of the queue
 void addAll(java.util.Collection values)
          Add the speficied collection to the top of the queue.
 void addAtHead(java.lang.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, java.lang.Object retval)
           
 Channel getChannel()
           
 java.util.Vector getContents()
           
 Address getLocalAddress()
           
 byte[] getState()
           
protected  void init()
           
static void main(java.lang.String[] args)
           
 java.lang.Object peek()
          returns the first object on the queue, without removing it.
 void receive(Message msg)
           
 java.lang.Object remove()
          Try to return the first objet in the queue.It does not wait for an object.
 java.lang.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
 java.lang.String toString()
           
 void viewAccepted(View new_view)
          Called by JGroups to notify the target object of a change of membership.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

mutex

protected java.lang.Object mutex

stopped

protected transient boolean stopped

internalQueue

protected java.util.LinkedList internalQueue

channel

protected transient Channel channel

disp

protected transient RpcDispatcher disp

groupname

protected transient java.lang.String groupname

notifs

protected transient java.util.Vector notifs

members

protected transient java.util.Vector members
Constructor Detail

DistributedQueue

public DistributedQueue(java.lang.String groupname,
                        ChannelFactory factory,
                        java.lang.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,
                        java.io.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 Detail

init

protected void init()

start

public void start(long state_timeout)
           throws ChannelClosedException,
                  ChannelNotConnectedException
Throws:
ChannelClosedException
ChannelNotConnectedException

getLocalAddress

public Address getLocalAddress()

getChannel

public Channel getChannel()

addNotifier

public void addNotifier(DistributedQueue.Notification n)

removeNotifier

public void removeNotifier(DistributedQueue.Notification n)

stop

public void stop()

add

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

Parameters:
value -

addAtHead

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

Parameters:
value -

addAll

public void addAll(java.util.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 -

getContents

public java.util.Vector getContents()

size

public int size()

peek

public java.lang.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

reset

public void reset()

checkResult

protected void checkResult(RspList rsp,
                           java.lang.Object retval)

remove

public java.lang.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 java.lang.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

toString

public java.lang.String toString()

_add

public void _add(java.lang.Object value)

_addAtHead

public void _addAtHead(java.lang.Object value)

_reset

public void _reset()

_private_reset

protected void _private_reset()

_remove

public java.lang.Object _remove()

_addAll

public void _addAll(java.util.Collection c)

receive

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

getState

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

setState

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

viewAccepted

public void viewAccepted(View new_view)
Description copied from interface: MembershipListener
Called by JGroups to notify the target object of a change of membership. No long running actions should be done in this callback in the case of Ensemble, as this would block Ensemble. If some long running action needs to be performed, it should be done in a separate thread (cf. ../Tests/QuoteServer.java).

Specified by:
viewAccepted in interface MembershipListener

suspect

public void suspect(Address suspected_mbr)
Called when a member is suspected

Specified by:
suspect in interface MembershipListener

block

public void block()
Block sending and receiving of messages until ViewAccepted is called

Specified by:
block in interface MembershipListener

main

public static void main(java.lang.String[] args)


Copyright ? 2001,2002 www.jgroups.com . All Rights Reserved.