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()` or `finalize()` 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 and Description
    `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
    `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, int initialCapacity, float loadFactor, ClassLoader[] cls)` Creates a new map

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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, finalize, 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, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### 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 Detail

    - #### 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

      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>`

Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.