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>

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

Version:
  1.0
Author:
  Filip Hanik
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, mapContextName, mapMembers, mapname, mapOwner, rpcChannel, rpcTimeout, 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
`protected int` `getStateMessageType()`
`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, clone, 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, mapMemberAdded, memberAdded, memberAlive, memberDisappeared, 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

`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:
  `channel` - The channel to use for communication
  `timeout` - long - timeout for RPC messags
  `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

#### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner,
                 Channel channel,
                 long timeout,
                 String mapContextName,
                 int initialCapacity,
                 ClassLoader[] cls)

Creates a new map

Parameters:
  `channel` - The channel to use for communication
  `timeout` - long - timeout for RPC messags
  `mapContextName` - String - unique name for this map, to allow multiple maps per channel
  `initialCapacity` - int - the size of this map, see HashMap

#### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner,
                 Channel channel,
                 long timeout,
                 String mapContextName,
                 ClassLoader[] cls)

Creates a new map

Parameters:
  `channel` - The channel to use for communication
  `timeout` - long - timeout for RPC messags
  `mapContextName` - String - unique name for this map, to allow multiple maps per channel

#### ReplicatedMap

    public ReplicatedMap(AbstractReplicatedMap.MapOwner owner,
                 Channel channel,
                 long timeout,
                 String mapContextName,
                 ClassLoader[] cls,
                 boolean terminate)

Creates a new map

Parameters:
  `channel` - The channel to use for communication
  `timeout` - long - timeout for RPC messags
  `mapContextName` - String - unique name for this map, to allow multiple maps per channel
  `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>`

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