K
- the key typeV
- the value typepublic abstract class OortMap<K,V> extends OortContainer<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, Result)
and #removeAndShare(Object, Result)
to broadcast changes related to single entries, as well as OortObject.setAndShare(Object, Result)
to
change the whole map.
When a single entry is changed, OortMap.EntryListener
s are notified.
OortMap.DeltaListener
converts whole map updates triggered by OortObject.setAndShare(Object, Result)
into events for OortMap.EntryListener
s, 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:
(key, oldValue, newValue)
|
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>, OortObject.Result<R>
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
ConfigurableServerChannel.Initializer.Persistent
Oort.CometListener.Event
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 boolean |
isItemUpdate(Map<String,Object> data) |
protected void |
onItem(OortObject.Info<ConcurrentMap<K,V>> info,
Map<String,Object> data) |
void |
putAndShare(K key,
V value,
OortObject.Result<V> callback)
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. |
void |
putIfAbsentAndShare(K key,
V value,
OortObject.Result<V> callback)
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. |
void |
removeAndShare(K key,
OortObject.Result<V> callback)
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) |
void |
removeEntryListeners() |
cometLeft, doStop, onObject
addListener, cometJoined, configureChannel, deserialize, doStart, dump, getChannelName, getFactory, getInfo, getInfoByObject, getInfos, getLocalSession, getName, getOort, iterator, merge, newInfo, notifyRemoved, notifyUpdated, pullInfo, pushInfo, removeListener, removeListeners, serialize, setAndShare, toString
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stop
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
forEach, spliterator
protected 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 void removeEntryListeners()
public void putAndShare(K key, V value, OortObject.Result<V> callback)
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.EntryListener
s, both on this node and on remote nodes.
The entry is guaranteed to be put not when this method returns,
but when the Result
parameter is notified.
key
- the key to associate the value tovalue
- the value associated with the keycallback
- the callback invoked with the old value,
or null
if there is no interest in the old value#putIfAbsentAndShare(Object, Object, Result)
,
#removeAndShare(Object, Result)
public void putIfAbsentAndShare(K key, V value, OortObject.Result<V> callback)
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.EntryListener
s, both on this node and on remote nodes,
only if the key did not exist.
The entry is guaranteed to be put not when this method returns,
but when the Result
parameter is notified.
key
- the key to associate the value tovalue
- the value associated with the keycallback
- the callback invoked with the old value,
or null
if there is no interest in the old value#putAndShare(Object, Object, Result)
public void removeAndShare(K key, OortObject.Result<V> callback)
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.EntryListener
s, both on this node and on remote nodes.
The entry is guaranteed to be removed not when this method returns,
but when the Result
parameter is notified.
key
- the key to removecallback
- the callback invoked with the value,
or null
if there is no interest in the value#putAndShare(Object, Object, Result)
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 keyget(Object)
public OortObject.Info<ConcurrentMap<K,V>> findInfo(K key)
key
- the key to searchInfo
whose entity map contains the given key.protected boolean isItemUpdate(Map<String,Object> data)
isItemUpdate
in class OortContainer<ConcurrentMap<K,V>>
protected void onItem(OortObject.Info<ConcurrentMap<K,V>> info, Map<String,Object> data)
onItem
in class OortContainer<ConcurrentMap<K,V>>
Copyright © 2008–2024 The CometD Project. All rights reserved.