Class OortMap<K,V>
- Type Parameters:
K
- the key typeV
- the value type
- All Implemented Interfaces:
Iterable<OortObject.Info<ConcurrentMap<K,V>>>
,EventListener
,ConfigurableServerChannel.Initializer
,Oort.CometListener
,org.eclipse.jetty.util.component.LifeCycle
- Direct Known Subclasses:
OortLongMap
,OortStringMap
public 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.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
OortMap.DeltaListener<K,V>
An implementation ofOortObject.Listener
that converts whole map events intoOortMap.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.Nested classes/interfaces inherited from class org.cometd.oort.OortObject
OortObject.Data<T>, OortObject.Factory<T>, OortObject.Info<T>, OortObject.Listener<T>, OortObject.Merger<T,R>, OortObject.Result<R>
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
Nested classes/interfaces inherited from interface org.cometd.bayeux.server.ConfigurableServerChannel.Initializer
ConfigurableServerChannel.Initializer.Persistent
Nested classes/interfaces inherited from interface org.cometd.oort.Oort.CometListener
Oort.CometListener.Adapter, Oort.CometListener.Event
-
Field Summary
-
Constructor Summary
Constructors Modifier Constructor Description protected
OortMap(Oort oort, String name, OortObject.Factory<ConcurrentMap<K,V>> factory)
-
Method Summary
Modifier and Type Method 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)
V
putAndShare(K key, V value)
Deprecated.useputAndShare(Object, Object, Result)
insteadvoid
putAndShare(K key, V value, OortObject.Result<V> callback)
Updates a single entry of the local entity map with the givenkey
andvalue
, and broadcasts the operation to all nodes in the cluster.V
putIfAbsentAndShare(K key, V value)
Deprecated.useputAndShare(Object, Object, Result)
insteadvoid
putIfAbsentAndShare(K key, V value, OortObject.Result<V> callback)
Updates a single entry of the local entity map with the givenkey
andvalue
if it does not exist yet, and broadcasts the operation to all nodes in the cluster.V
removeAndShare(K key)
Deprecated.useremoveAndShare(Object, Result)
insteadvoid
removeAndShare(K key, OortObject.Result<V> callback)
Removes the givenkey
from the local entity map, and broadcasts the operation to all nodes in the cluster.void
removeEntryListener(OortMap.EntryListener<K,V> listener)
void
removeEntryListeners()
Methods inherited from class org.cometd.oort.OortObject
addListener, cometJoined, configureChannel, deserialize, doStart, getChannelName, getFactory, getInfo, getInfoByObject, getInfos, getLocalSession, getName, getOort, iterator, merge, newInfo, notifyRemoved, notifyUpdated, pullInfo, pushInfo, removeListener, removeListeners, serialize, setAndShare, setAndShare, toString
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stop
-
Constructor Details
-
Method Details
-
addEntryListener
-
removeEntryListener
-
removeEntryListeners
public void removeEntryListeners() -
putAndShare
Deprecated.useputAndShare(Object, Object, Result)
insteadBlocking version of
putAndShare(Object, Object, Result)
, but deprecated.This method will be removed in a future release.
- Parameters:
key
- the key to associate the value tovalue
- the value associated with the key- Returns:
- the previous value associated with the key, or null if no previous value was associated with the key
-
putAndShare
Updates a single entry of the local entity map with the given
key
andvalue
, 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
OortObject.Result
parameter is notified.- Parameters:
key
- the key to associate the value tovalue
- the value associated with the keycallback
- the callback invoked with the old value, ornull
if there is no interest in the old value- See Also:
putIfAbsentAndShare(Object, Object, Result)
,removeAndShare(Object, Result)
-
putIfAbsentAndShare
Deprecated.useputAndShare(Object, Object, Result)
insteadBlocking version of
putIfAbsentAndShare(Object, Object, Result)
, but deprecated.This method will be removed in a future release.
- Parameters:
key
- the key to associate the value tovalue
- the value associated with the key- Returns:
- the previous value associated with the key, or null if no previous value was associated with the key
-
putIfAbsentAndShare
Updates a single entry of the local entity map with the given
key
andvalue
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
OortObject.Result
parameter is notified.- Parameters:
key
- the key to associate the value tovalue
- the value associated with the keycallback
- the callback invoked with the old value, ornull
if there is no interest in the old value- See Also:
putAndShare(Object, Object, Result)
-
removeAndShare
Deprecated.useremoveAndShare(Object, Result)
insteadBlocking version of
removeAndShare(Object, Result)
, but deprecated.This method will be removed in a future release.
- Parameters:
key
- the key to remove- Returns:
- the value associated with the key, or null if no value was associated with the key
-
removeAndShare
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
OortObject.Result
parameter is notified.- Parameters:
key
- the key to removecallback
- the callback invoked with the value, ornull
if there is no interest in the value- See Also:
putAndShare(Object, Object, Result)
-
get
Returns the value mapped to the given key from the local entity map of this node. Differently fromfind(Object)
, only the local entity map is scanned.- Parameters:
key
- the key mapped to the value to return- Returns:
- the value mapped to the given key, or
null
if the local map does not contain the given key - See Also:
find(Object)
-
find
Returns the first non-null value mapped to the given key from the entity maps of all nodes. Differently fromget(Object)
, entity maps of all nodes are scanned.- Parameters:
key
- the key mapped to the value to return- Returns:
- the value mapped to the given key, or
null
if the maps do not contain the given key
-
findInfo
- Parameters:
key
- the key to search- Returns:
- the first
OortObject.Info
whose entity map contains the given key.
-
isItemUpdate
- Specified by:
isItemUpdate
in classOortContainer<ConcurrentMap<K,V>>
-
onItem
- Specified by:
onItem
in classOortContainer<ConcurrentMap<K,V>>
-