Provides the abstraction of a java.util.Hashtable that is replicated at several
locations. Any change to the hashtable (clear, put, 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 hashtable
must be serializable, the reason
being that they will be sent across the network to all replicas of the group. Having said
this, it is now for example possible to add RMI remote objects to the hashtable as they
are derived from
java.rmi.server.RemoteObject
which in turn is serializable.
This allows to lookup shared distributed objects by their name and invoke methods on them,
regardless of one's onw location. A
ReplicatedHashtable
thus allows to
implement a distributed naming service in just a couple of lines.
An instance of this class will contact an existing member of the group to fetch its
initial state.
Contrary to DistributedHashtable, this class does not make use of RpcDispatcher (and RequestCorrelator)
but uses plain asynchronous messages instead.
ReplicatedHashtable
public ReplicatedHashtable(String groupname,
ChannelFactory factory,
String properties,
long state_timeout)
ReplicatedHashtable
public ReplicatedHashtable(String groupname,
ChannelFactory factory,
ReplicatedHashtable.StateTransferListener l,
String properties,
long state_timeout)
Creates a ReplicatedHashtable
groupname
- The name of the group to joinfactory
- The ChannelFactory which will be used to create a channelproperties
- The property string to be used to define the channelstate_timeout
- The time to wait until state is retrieved in milliseconds. A value of 0 means wait forever.
_putAll
public void _putAll(Map m)
java.util.Map.putAll(java.util.Map)
block
public void block()
Block sending and receiving of messages until ViewAccepted is called
- block in interface MembershipListener
clear
public void clear()
Clears this hashtable so that it contains no keys
getChannel
public Channel getChannel()
getLocalAddress
public Address getLocalAddress()
getState
public byte[] getState()
Answers the group state; e.g., when joining.
- getState in interface MessageListener
put
public Object put(Object key,
Object value)
Maps the specified key to the specified value in the hashtable. Neither of both parameters can be null
key
- - the hashtable keyvalue
- - the value
- the previous value of the specified key in this hashtable, or null if it did not have one
putAll
public void putAll(Map m)
Copies all of the mappings from the specified Map to this Hashtable These mappings will replace any mappings that this Hashtable had for any of the keys currently in the specified Map.
m
- - Mappings to be stored in this map
remove
public Object remove(Object key)
Removes the key (and its corresponding value) from the Hashtable.
key
- - the key to be removed.
- the value to which the key had been mapped in this hashtable, or null if the key did not have a mapping.
setState
public void setState(byte[] new_state)
Sets the group state; e.g., when joining.
- setState in interface MessageListener
stateTransferRunning
public boolean stateTransferRunning()
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.
- viewAccepted in interface MembershipListener