Package org.apache.catalina.tribes.tipis

# Class ReplicatedMap<K,V>

java.lang.Object
org.apache.catalina.tribes.tipis.AbstractReplicatedMap<K,V>
org.apache.catalina.tribes.tipis.ReplicatedMap<K,V>

Type Parameters:
  `K` - The type of Key
  `V` - The type of Value

All Implemented Interfaces:
  `Serializable`, `Map<K,V>`, `ChannelListener`, `RpcCallback`, `Heartbeat`, `MembershipListener`

public class ReplicatedMap<K,V> extends AbstractReplicatedMap<K,V>
All-to-all replication for a hash map implementation. Each node in the cluster will carry an identical copy of the map.
This map implementation doesn't have a background thread running to replicate changes. If you do have changes without invoking put/remove then you need to invoke one of the following methods:

- `replicate(Object,boolean)` - replicates only the object that belongs to the key
- `replicate(boolean)` - Scans the entire map for changes and replicates data

the `boolean` value in the `replicate` method used to decide whether to only replicate objects that implement the `ReplicatedMapEntry` interface or to replicate all objects. If an object doesn't implement the `ReplicatedMapEntry` interface each time the object gets replicated the entire object gets serialized, hence a call to `replicate(true)` will replicate all objects in this map that are using this node as primary.
REMEMBER TO CALL `breakdown()` when you are done with the map to avoid memory leaks.
TODO implement periodic sync/transfer thread
TODO memberDisappeared, should do nothing except change map membership by default it relocates the primary objects

See Also:
  - Serialized Form

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class org.apache.catalina.tribes.tipis.AbstractReplicatedMap

  `AbstractReplicatedMap.MapEntry<K,V>, AbstractReplicatedMap.MapMessage, AbstractReplicatedMap.MapOwner`

  ### Nested classes/interfaces inherited from interface java.util.Map

  `Map.Entry<K,V>`

- ## Field Summary

  ### Fields inherited from class org.apache.catalina.tribes.tipis.AbstractReplicatedMap

  `accessTimeout, channel, channelSendOptions, currentNode, DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, externalLoaders, innerMap, mapContextName, mapMembers, mapname, mapOwner, rpcChannel, rpcTimeout, sm, stateMutex, stateTransferred`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls)`
  Creates a new map
  `ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls)`
  Creates a new map
  `ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls)`
  Creates a new map
  `ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls, boolean terminate)`
  Creates a new map

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected int`
  `getReplicateMessageType()`
  `protected int`
  `getStateMessageType()`
  `void`
  `mapMemberAdded(Member member)`
  `void`
  `memberDisappeared(Member member)`
  A member was removed from the group
  If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
  `protected Member[]`
  `publishEntryInfo(Object key, Object value)`
  Publish info about a map pair (key/value) to other nodes in the cluster.

  ### Methods inherited from class org.apache.catalina.tribes.tipis.AbstractReplicatedMap

  `accept, breakdown, broadcast, clear, clear, containsKey, containsValue, entrySet, entrySetFull, equals, excludeFromSet, get, getAccessTimeout, getChannel, getChannelSendOptions, getExternalLoaders, getInternal, getMapContextName, getMapMembers, getMapMembers, getMapMembersExcl, getMapOwner, getNextBackupIndex, getNextBackupNode, getRpcChannel, getRpcTimeout, getStateMutex, hashCode, heartbeat, init, inSet, isEmpty, isStateTransferred, keySet, keySetFull, leftOver, memberAdded, memberAlive, messageReceived, ping, printMap, put, put, putAll, remove, remove, replicate, replicate, replyRequest, setAccessTimeout, setChannelSendOptions, setExternalLoaders, setMapOwner, size, sizeFull, transferState, values, wrap`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface java.util.Map

  `compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll`

- ## Constructor Details

  - ### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, float loadFactor, ClassLoader[] cls)
    Creates a new map
    Parameters:
      `owner` - The map owner
      `channel` - The channel to use for communication
      `timeout` - long - timeout for RPC messages
      `mapContextName` - String - unique name for this map, to allow multiple maps per channel
      `initialCapacity` - int - the size of this map, see HashMap
      `loadFactor` - float - load factor, see HashMap
      `cls` - Class loaders

  - ### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, int initialCapacity, ClassLoader[] cls)
    Creates a new map
    Parameters:
      `owner` - The map owner
      `channel` - The channel to use for communication
      `timeout` - long - timeout for RPC messages
      `mapContextName` - String - unique name for this map, to allow multiple maps per channel
      `initialCapacity` - int - the size of this map, see HashMap
      `cls` - Class loaders

  - ### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls)
    Creates a new map
    Parameters:
      `owner` - The map owner
      `channel` - The channel to use for communication
      `timeout` - long - timeout for RPC messages
      `mapContextName` - String - unique name for this map, to allow multiple maps per channel
      `cls` - Class loaders

  - ### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner, Channel channel, long timeout, String mapContextName, ClassLoader[] cls, boolean terminate)
    Creates a new map
    Parameters:
      `owner` - The map owner
      `channel` - The channel to use for communication
      `timeout` - long - timeout for RPC messages
      `mapContextName` - String - unique name for this map, to allow multiple maps per channel
      `cls` - Class loaders
      `terminate` - boolean - Flag for whether to terminate this map that failed to start.

- ## Method Details

  - ### getStateMessageType

    protected int getStateMessageType()
    Specified by:
      `getStateMessageType` in class `AbstractReplicatedMap<K,V>`

  - ### getReplicateMessageType

    protected int getReplicateMessageType()
    Specified by:
      `getReplicateMessageType` in class `AbstractReplicatedMap<K,V>`

  - ### publishEntryInfo

    protected Member[] publishEntryInfo(Object key, Object value) throws ChannelException
    Description copied from class: `AbstractReplicatedMap`
    Publish info about a map pair (key/value) to other nodes in the cluster.
    Specified by:
      `publishEntryInfo` in class `AbstractReplicatedMap<K,V>`
    Parameters:
      `key` - Object
      `value` - Object
    Returns:
      Member - the backup node
    Throws:
      `ChannelException` - Cluster error

  - ### memberDisappeared

    public void memberDisappeared(Member member)
    Description copied from interface: `MembershipListener`
    A member was removed from the group
    If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
    Specified by:
      `memberDisappeared` in interface `MembershipListener`
    Overrides:
      `memberDisappeared` in class `AbstractReplicatedMap<K,V>`
    Parameters:
      `member` - Member
    See Also:
      - `Member.SHUTDOWN_PAYLOAD`

  - ### mapMemberAdded

    public void mapMemberAdded(Member member)
    Overrides:
      `mapMemberAdded` in class `AbstractReplicatedMap<K,V>`