Class ReplicatedTree

java.lang.Object
org.jgroups.blocks.ReplicatedTree
All Implemented Interfaces:
Runnable, MembershipListener, MessageListener

public class ReplicatedTree extends Object implements Runnable, MessageListener, MembershipListener
A tree-like structure that is replicated across several members. Updates will be multicast to all group members reliably and in the same order.
Author:
Bela Ban Jan 17 2002, Alfonso Olias-Sanz
  • Field Details

    • SEPARATOR

      public static final String SEPARATOR
      See Also:
    • log

      protected final org.apache.commons.logging.Log log
  • Constructor Details

    • ReplicatedTree

      public ReplicatedTree(String groupname, String props, long state_fetch_timeout) throws Exception
      Creates a channel with the given properties. Connects to the channel, then creates a PullPushAdapter and starts it
      Throws:
      Exception
    • ReplicatedTree

      public ReplicatedTree(String groupname, String props, long state_fetch_timeout, boolean jmx) throws Exception
      Throws:
      Exception
    • ReplicatedTree

      public ReplicatedTree()
    • ReplicatedTree

      public ReplicatedTree(JChannel channel) throws Exception
      Expects an already connected channel. Creates a PullPushAdapter and starts it
      Throws:
      Exception
  • Method Details

    • setRemoteCalls

      public void setRemoteCalls(boolean flag)
    • setRootNode

      public void setRootNode(ReplicatedTree.Node n)
    • getLocalAddress

      public Address getLocalAddress()
    • getMembers

      public Vector getMembers()
    • fetchState

      public void fetchState(long timeout) throws ChannelClosedException, ChannelNotConnectedException
      Fetch the group state from the current coordinator. If successful, this will trigger setState().
      Throws:
      ChannelClosedException
      ChannelNotConnectedException
    • addReplicatedTreeListener

      public void addReplicatedTreeListener(ReplicatedTree.ReplicatedTreeListener listener)
    • removeReplicatedTreeListener

      public void removeReplicatedTreeListener(ReplicatedTree.ReplicatedTreeListener listener)
    • start

      public final void start() throws Exception
      Throws:
      Exception
    • stop

      public void stop()
    • put

      public void put(String fqn, HashMap data)
      Adds a new node to the tree and sets its data. If the node doesn not yet exist, it will be created. Also, parent nodes will be created if not existent. If the node already has data, then the new data will override the old one. If the node already existed, a nodeModified() notification will be generated. Otherwise a nodeCreated() motification will be emitted.
      Parameters:
      fqn - The fully qualified name of the new node
      data - The new data. May be null if no data should be set in the node.
    • put

      public void put(String fqn, String key, Object value)
      Adds a key and value to a given node. If the node doesn't exist, it will be created. If the node already existed, a nodeModified() notification will be generated. Otherwise a nodeCreated() motification will be emitted.
      Parameters:
      fqn - The fully qualified name of the node
      key - The key
      value - The value
    • remove

      public void remove(String fqn)
      Removes the node from the tree.
      Parameters:
      fqn - The fully qualified name of the node.
    • remove

      public void remove(String fqn, String key)
      Removes key from the node's hashmap
      Parameters:
      fqn - The fullly qualified name of the node
      key - The key to be removed
    • exists

      public boolean exists(String fqn)
      Checks whether a given node exists in the tree
      Parameters:
      fqn - The fully qualified name of the node
      Returns:
      boolean Whether or not the node exists
    • getKeys

      public Set getKeys(String fqn)
      Gets the keys of the data map. Returns all keys as Strings. Returns null if node does not exist.
      Parameters:
      fqn - The fully qualified name of the node
      Returns:
      Set A set of keys (as Strings)
    • get

      public Object get(String fqn, String key)
      Finds a node given its name and returns the value associated with a given key in its data map. Returns null if the node was not found in the tree or the key was not found in the hashmap.
      Parameters:
      fqn - The fully qualified name of the node.
      key - The key.
    • print

      public String print(String fqn)
      Prints a representation of the node defined by fqn. Output includes name, fqn and data.
    • getChildrenNames

      public Set getChildrenNames(String fqn)
      Returns all children of a given node
      Parameters:
      fqn - The fully qualified name of the node
      Returns:
      Set A list of child names (as Strings)
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getGroupName

      public String getGroupName()
      Returns the name of the group that the DistributedTree is connected to
      Returns:
      String
    • getChannel

      public Channel getChannel()
      Returns the Channel the DistributedTree is connected to
      Returns:
      Channel
    • getGroupMembersNumber

      public int getGroupMembersNumber()
      Returns the number of current members joined to the group
      Returns:
      int
    • _put

      public void _put(String fqn, HashMap data)
    • _put

      public void _put(String fqn, String key, Object value)
    • _remove

      public void _remove(String fqn)
    • _remove

      public void _remove(String fqn, String key)
    • _removeData

      public void _removeData(String fqn)
    • receive

      public void receive(Message msg)
      Callback. Process the contents of the message; typically an _add() or _set() request
      Specified by:
      receive in interface MessageListener
      Parameters:
      msg -
    • getState

      public byte[] getState()
      Return a copy of the current cache (tree)
      Specified by:
      getState in interface MessageListener
      Returns:
      byte[]
    • setState

      public void setState(byte[] new_state)
      Set the cache (tree) to this value
      Specified by:
      setState in interface MessageListener
      Parameters:
      new_state -
    • viewAccepted

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

      Note that on reception of the first view (a new member just joined), the channel will not yet be in the connected state. This only happens when Channel.connect(String) returns.

      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
    • run

      public void run()
      Request handler thread
      Specified by:
      run in interface Runnable
    • main

      public static void main(String[] args)