K - the key typeV - the value typepublic abstract class OortMap<K,V> extends OortObject<ConcurrentMap<K,V>>
A specialized oort object whose entity is a ConcurrentMap.
OortMap specializes OortObject and allows optimized replication of map entries
across the cluster: instead of replicating the whole map, that may be contain a lot of entries,
only entries that are modified are replicated.
Applications can use putAndShare(Object, Object) and removeAndShare(Object)
to broadcast changes related to single entries, as well as OortObject.setAndShare(Object) to
change the whole map.
When a single entry is changed, OortMap.EntryListeners are notified.
OortMap.DeltaListener converts whole map updates triggered by OortObject.setAndShare(Object)
into events for OortMap.EntryListeners, giving applications a single listener type to implement
their business logic.
The type parameter for keys, K, must be a String to be able to use this class as-is,
although usage of OortStringMap is preferred.
This is due to the fact that a Map<Long,Object> containing an entry {13:"foo"}
is serialized in JSON as {"13":"foo"} because JSON field names must always be strings.
When deserialized, it is restored as a Map<String,Object>, which is incompatible
with the original type parameter for keys.
To overcome this issue, subclasses may override OortObject.serialize(Object) and
OortObject.deserialize(Object).
Method OortObject.serialize(Object) should convert the entity object to a format that retains
enough type information for OortObject.deserialize(Object) to convert the JSON-deserialized entity
object that has the wrong key type to an entity object that has the right key type, like
OortLongMap does.
| Modifier and Type | Class and Description |
|---|---|
static class |
OortMap.DeltaListener<K,V>
An implementation of
Listener that converts whole map events into OortMap.EntryListener events. |
static class |
OortMap.Entry<K,V>
A triple that holds the key, the previous value and the new value, used to notify entry updates:
|
static interface |
OortMap.EntryListener<K,V>
Listener for entry events that update the entity map, either locally or remotely.
|
OortObject.Data<T>, OortObject.Factory<T>, OortObject.Info<T>, OortObject.Listener<T>, OortObject.Merger<T,R>org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListenerorg.cometd.bayeux.server.ConfigurableServerChannel.Initializer.PersistentOort.CometListener.Adapter, Oort.CometListener.Eventlogger, OORT_OBJECTS_CHANNEL| Modifier | Constructor and Description |
|---|---|
protected |
OortMap(Oort oort,
String name,
OortObject.Factory<ConcurrentMap<K,V>> factory) |
| Modifier and Type | Method and Description |
|---|---|
void |
addEntryListener(OortMap.EntryListener<K,V> listener) |
V |
find(K key)
Returns the first non-null value mapped to the given key from the entity maps of all nodes.
|
OortObject.Info<ConcurrentMap<K,V>> |
findInfo(K key) |
V |
get(K key)
Returns the value mapped to the given key from the local entity map of this node.
|
protected void |
onObject(Map<String,Object> data) |
V |
putAndShare(K key,
V value)
Updates a single entry of the local entity map with the given
key and value,
and broadcasts the operation to all nodes in the cluster. |
V |
putIfAbsentAndShare(K key,
V value)
Updates a single entry of the local entity map with the given
key and value
if it does not exist yet, and broadcasts the operation to all nodes in the cluster. |
V |
removeAndShare(K key)
Removes the given
key from the local entity map,
and broadcasts the operation to all nodes in the cluster. |
void |
removeEntryListener(OortMap.EntryListener<K,V> listener) |
addListener, cometJoined, cometLeft, configureChannel, deserialize, doStart, doStop, getChannelName, getFactory, getInfo, getInfoByObject, getInfos, getLocalSession, getName, getOort, iterator, merge, newInfo, nextVersion, notifyRemoved, notifyUpdated, pushInfo, removeListener, serialize, setAndShare, setInfo, toStringaddLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stopclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEach, spliteratorprotected OortMap(Oort oort, String name, OortObject.Factory<ConcurrentMap<K,V>> factory)
public void addEntryListener(OortMap.EntryListener<K,V> listener)
public void removeEntryListener(OortMap.EntryListener<K,V> listener)
public V putAndShare(K key, V value)
Updates a single entry of the local entity map with the given key and value,
and broadcasts the operation to all nodes in the cluster.
Calling this method triggers notifications OortMap.EntryListeners, both on this node and on remote nodes.
key - the key to associate the value tovalue - the value associated with the keyputIfAbsentAndShare(Object, Object),
removeAndShare(Object)public V putIfAbsentAndShare(K key, V value)
Updates a single entry of the local entity map with the given key and value
if it does not exist yet, and broadcasts the operation to all nodes in the cluster.
Calling this method triggers notifications OortMap.EntryListeners, both on this node and on remote nodes,
only if the key did not exist.
key - the key to associate the value tovalue - the value associated with the keyputAndShare(Object, Object)public V removeAndShare(K key)
Removes the given key from the local entity map,
and broadcasts the operation to all nodes in the cluster.
Calling this method triggers notifications OortMap.EntryListeners, both on this node and on remote nodes.
key - the key to removeputAndShare(Object, Object)public V get(K key)
find(Object), only the local entity map is scanned.key - the key mapped to the value to returnnull if the local map does not contain the given keyfind(Object)public V find(K key)
get(Object), entity maps of all nodes are scanned.key - the key mapped to the value to returnnull if the maps do not contain the given keypublic OortObject.Info<ConcurrentMap<K,V>> findInfo(K key)
key - the key to searchInfo whose entity map contains the given key.protected void onObject(Map<String,Object> data)
onObject in class OortObject<ConcurrentMap<K,V>>Copyright © 2008–2015 Dojo Foundation. All rights reserved.