Class BackingMapBinaryEntry
- java.lang.Object
-
- com.tangosol.util.Base
-
- com.tangosol.net.cache.BackingMapBinaryEntry
-
- All Implemented Interfaces:
BinaryEntry
,InvocableMap.Entry
,MapTrigger.Entry
,QueryMap.Entry
,Map.Entry
- Direct Known Subclasses:
ReadWriteBackingMap.Entry
public class BackingMapBinaryEntry extends Base implements BinaryEntry, MapTrigger.Entry
An implementation of the BinaryEntry interface that is based on specified binary key, binary value and BackingMapManagerContext. Analogous to theMapTrigger.Entry
, it represents a pending change to an Entry that is about to committed to the underlying Map. For example, the original binary value of null indicates pending insert (a non-existing entry), while the binary value of null represents a pending remove operation.It is currently only used by the ReadWriteBackingMap to communicate with the BinaryEntryStore.
This implementation is not thread safe.
- Author:
- gg 2009.11.22
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
-
Field Summary
Fields Modifier and Type Field Description protected Binary
m_binKey
The Binary key.protected Binary
m_binValue
The Binary value.protected Binary
m_binValueOrig
The original Binary value.protected BackingMapManagerContext
m_ctx
The backing map context.protected boolean
m_fSynthetic
Whether this update is synthetic.protected long
m_ldtExpiry
The expiry timestamp for this entry; orCacheMap.EXPIRY_DEFAULT
if the entry uses the default expiry setting; orCacheMap.EXPIRY_NEVER
if the entry never expiresprotected Object
m_oKey
Lazily converted key in Object format.protected Object
m_oValue
Lazily converted value in Object format.protected Object
m_oValueOrig
Lazily converted original value in Object format.
-
Constructor Summary
Constructors Constructor Description BackingMapBinaryEntry(Binary binKey, Binary binValue, Binary binValueOrig, long cDelay, BackingMapManagerContext ctx)
Construct a BackingMapBinaryEntry with the specified binary key, values and BackingMapManagerContext.BackingMapBinaryEntry(Binary binKey, Binary binValue, Binary binValueOrig, BackingMapManagerContext ctx)
Construct a BackingMapBinaryEntry with the specified binary key, values and BackingMapManagerContext.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected static long
calculateExpiry(long cDelay)
Calculate the expiry timestamp based on the expiry delay value.boolean
equals(Object o)
Compares the specified object with this entry for equality.void
expire(long cMillis)
Update the entry with the specified expiry delay.Object
extract(ValueExtractor extractor)
Extract a value out of the Entry's key or value.ObservableMap
getBackingMap()
Obtain a reference to the backing map that this Entry corresponds to.BackingMapContext
getBackingMapContext()
Obtain a reference to thebacking map context
for the cache that this Entry corresponds to.Binary
getBinaryKey()
Return a raw binary key for this entry.Binary
getBinaryValue()
Return a raw binary value for this entry.BackingMapManagerContext
getContext()
Return the context this entry operates within.long
getExpiry()
Return the number of milliseconds remaining before the specified entry is scheduled to expire.Object
getKey()
Return the key corresponding to this entry.Binary
getOriginalBinaryValue()
Return a raw original binary value for this entry.Object
getOriginalValue()
Return an original value for this entry.Serializer
getSerializer()
Return aSerializer
that is used to serialize/deserialize this entry.Object
getValue()
Return the value corresponding to this entry.int
hashCode()
Returns the hash code value for this entry.boolean
isOriginalPresent()
Determine whether or not the Entry existed before the start of the mutating operation that is being evaluated by the trigger.boolean
isPresent()
Determine if this Entry exists in the Map.boolean
isReadOnly()
Check whether this BinaryEntry allows data modification operations.boolean
isSynthetic()
Determine if this Entry has been synthetically mutated.void
remove(boolean fSynthetic)
Remove this Entry from the Map if it is present in the Map.Object
setValue(Object oValue)
Store the value corresponding to this entry.void
setValue(Object oValue, boolean fSynthetic)
Store the value corresponding to this entry.String
toString()
Render the entry as a String.void
update(ValueUpdater updater, Object oValue)
Update the Entry's value.void
updateBinaryValue(Binary binValue)
Update the binary value for this entry.void
updateBinaryValue(Binary binValue, boolean fSynthetic)
Update the binary value for this entry.-
Methods inherited from class com.tangosol.util.Base
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.tangosol.util.BinaryEntry
getAssociatedEntry, getAssociatedEntry, getIndexMap, getKeyPartition, isValueChanged, isValueLoaded, isValueRemoved, isValueUpdated
-
Methods inherited from interface com.tangosol.util.InvocableMap.Entry
asBinaryEntry, getValue, getValue
-
Methods inherited from interface com.tangosol.util.QueryMap.Entry
extractFromKey, extractFromValue
-
-
-
-
Field Detail
-
m_ctx
protected BackingMapManagerContext m_ctx
The backing map context.
-
m_binKey
protected Binary m_binKey
The Binary key. This object reference will not change for the life of the Entry.
-
m_binValue
protected Binary m_binValue
The Binary value.
-
m_binValueOrig
protected Binary m_binValueOrig
The original Binary value.
-
m_ldtExpiry
protected long m_ldtExpiry
The expiry timestamp for this entry; orCacheMap.EXPIRY_DEFAULT
if the entry uses the default expiry setting; orCacheMap.EXPIRY_NEVER
if the entry never expires
-
m_oKey
protected Object m_oKey
Lazily converted key in Object format.
-
m_oValue
protected Object m_oValue
Lazily converted value in Object format.
-
m_oValueOrig
protected Object m_oValueOrig
Lazily converted original value in Object format.
-
m_fSynthetic
protected boolean m_fSynthetic
Whether this update is synthetic.- Since:
- 12.2.1.4
-
-
Constructor Detail
-
BackingMapBinaryEntry
public BackingMapBinaryEntry(Binary binKey, Binary binValue, Binary binValueOrig, BackingMapManagerContext ctx)
Construct a BackingMapBinaryEntry with the specified binary key, values and BackingMapManagerContext.- Parameters:
binKey
- the Binary keybinValue
- the Binary value; could be null representing a non-existing entrybinValueOrig
- an original Binary value; could be null representing an insert operationctx
- a BackingMapManagerContext
-
BackingMapBinaryEntry
public BackingMapBinaryEntry(Binary binKey, Binary binValue, Binary binValueOrig, long cDelay, BackingMapManagerContext ctx)
Construct a BackingMapBinaryEntry with the specified binary key, values and BackingMapManagerContext.- Parameters:
binKey
- the Binary keybinValue
- the Binary value; could be null representing a non-existing entrybinValueOrig
- an original Binary value; could be null representing an insert operationcDelay
- the expiry delayctx
- a BackingMapManagerContext
-
-
Method Detail
-
getBinaryKey
public Binary getBinaryKey()
Return a raw binary key for this entry.- Specified by:
getBinaryKey
in interfaceBinaryEntry
- Returns:
- a raw binary key for this entry
-
getBinaryValue
public Binary getBinaryValue()
Return a raw binary value for this entry.- Specified by:
getBinaryValue
in interfaceBinaryEntry
- Returns:
- a raw binary value for this entry; null if the value does not exist
-
getOriginalBinaryValue
public Binary getOriginalBinaryValue()
Return a raw original binary value for this entry.- Specified by:
getOriginalBinaryValue
in interfaceBinaryEntry
- Returns:
- a raw original binary value for this entry; null if the original value did not exist
-
getKey
public Object getKey()
Return the key corresponding to this entry. The resultant key does not necessarily exist within the containing Map, which is to say that InvocableMap.this.containsKey(getKey()) could return false. To test for the presence of this key within the Map, useInvocableMap.Entry.isPresent()
, and to create the entry for the key, useInvocableMap.Entry.setValue(V)
.- Specified by:
getKey
in interfaceInvocableMap.Entry
- Specified by:
getKey
in interfaceMap.Entry
- Returns:
- the key corresponding to this entry; may be null if the underlying Map supports null keys
-
getValue
public Object getValue()
Return the value corresponding to this entry. If the entry does not exist, then the value will be null. To differentiate between a null value and a non-existent entry, useInvocableMap.Entry.isPresent()
.Note: any modifications to the value retrieved using this method are not guaranteed to persist unless followed by a
InvocableMap.Entry.setValue(V)
orInvocableMap.Entry.update(com.tangosol.util.ValueUpdater<V, T>, T)
call.- Specified by:
getValue
in interfaceInvocableMap.Entry
- Specified by:
getValue
in interfaceMap.Entry
- Returns:
- the value corresponding to this entry; may be null if the value is null or if the Entry does not exist in the Map
-
getOriginalValue
public Object getOriginalValue()
Return an original value for this entry.- Specified by:
getOriginalValue
in interfaceBinaryEntry
- Specified by:
getOriginalValue
in interfaceMapTrigger.Entry
- Returns:
- an original value for this entry
-
isOriginalPresent
public boolean isOriginalPresent()
Determine whether or not the Entry existed before the start of the mutating operation that is being evaluated by the trigger.- Specified by:
isOriginalPresent
in interfaceMapTrigger.Entry
- Returns:
- true iff this Entry was existent in the containing Map
-
setValue
public Object setValue(Object oValue)
Store the value corresponding to this entry. If the entry does not exist, then the entry will be created by invoking this method, even with a null value (assuming the Map supports null values).- Specified by:
setValue
in interfaceInvocableMap.Entry
- Specified by:
setValue
in interfaceMap.Entry
- Parameters:
oValue
- the new value for this Entry- Returns:
- the previous value of this Entry, or null if the Entry did not exist
-
setValue
public void setValue(Object oValue, boolean fSynthetic)
Store the value corresponding to this entry. If the entry does not exist, then the entry will be created by invoking this method, even with a null value (assuming the Map supports null values).Unlike the other form of
setValue
, this form does not return the previous value, and as a result may be significantly less expensive (in terms of cost of execution) for certain Map implementations.As of Coherence 12.1.2, if fSynthetic is true and the
BackingMap
associated with this entry is a ReadWriteBackingMap, this method will bypass theCacheStore
orBinaryEntryStore
.- Specified by:
setValue
in interfaceBinaryEntry
- Specified by:
setValue
in interfaceInvocableMap.Entry
- Parameters:
oValue
- the new value for this EntryfSynthetic
- pass true only if the insertion into or modification of the Map should be treated as a synthetic event
-
updateBinaryValue
public void updateBinaryValue(Binary binValue)
Update the binary value for this entry.Passing a non-null binary is functionally equivalent to:
setValue(getContext().getValueFromInternalConverter().convert(binValue));
Passing null value is functionally equivalent to removing the entry.remove(false);
- Specified by:
updateBinaryValue
in interfaceBinaryEntry
- Parameters:
binValue
- new binary value to be stored in this entry or null
-
updateBinaryValue
public void updateBinaryValue(Binary binValue, boolean fSynthetic)
Update the binary value for this entry.Passing a non-null binary is functionally equivalent to:
setValue(getContext().getValueFromInternalConverter().convert(binValue));
Passing null value is functionally equivalent to removing the entry.remove(false);
This method will bypass anyCacheStore
orBinaryEntryStore
implementations, iff fSynthetic is true and the backing map associated with this entry is a ReadWriteBackingMap.- Specified by:
updateBinaryValue
in interfaceBinaryEntry
- Parameters:
binValue
- new binary value to be stored in this entry or nullfSynthetic
- pass true only if the insertion into or modification of the Map should be treated as a synthetic event
-
getSerializer
public Serializer getSerializer()
Return aSerializer
that is used to serialize/deserialize this entry.- Specified by:
getSerializer
in interfaceBinaryEntry
- Returns:
- a
Serializer
that is used to serialize/deserialize this entry
-
getContext
public BackingMapManagerContext getContext()
Return the context this entry operates within.Note: This method is a shortcut for the
getBackingMapContext.getManagerContext()
call.- Specified by:
getContext
in interfaceBinaryEntry
- Returns:
- the BackingMapManagerContext for this entry
-
getBackingMap
public ObservableMap getBackingMap()
Obtain a reference to the backing map that this Entry corresponds to. The returned Map should be used in a read-only manner.Note: This method is a shortcut for the
getBackingMapContext().getBackingMap()
call. As of Coherence 3.7, the returned type has been narrowed to ObservableMap.- Specified by:
getBackingMap
in interfaceBinaryEntry
- Returns:
- the backing map reference; null if the entry does not have any backing map association
-
getBackingMapContext
public BackingMapContext getBackingMapContext()
Obtain a reference to thebacking map context
for the cache that this Entry corresponds to.- Specified by:
getBackingMapContext
in interfaceBinaryEntry
- Returns:
- the corresponding BackingMapContext; null if the entry does not have any backing map association
-
expire
public void expire(long cMillis)
Update the entry with the specified expiry delay.Note: this method only has an effect only if the associated backing map implements the
CacheMap
interface- Specified by:
expire
in interfaceBinaryEntry
- Parameters:
cMillis
- the number of milliseconds until the entry will expire; passCacheMap.EXPIRY_DEFAULT
to use the default expiry setting; passCacheMap.EXPIRY_NEVER
to indicate that the entry should never expire
-
getExpiry
public long getExpiry()
Return the number of milliseconds remaining before the specified entry is scheduled to expire. If theBinaryEntry.expire(long)
method has been called, the returned value will reflect the requested expiry delay. Otherwise if the entryexists
, the returned value will represent the time remaining until the entry expires (orCacheMap.EXPIRY_NEVER
if the entry will never expire). If the entry does not exist,CacheMap.EXPIRY_DEFAULT
will be returned.This method will make a "best effort" attempt to determine the expiry time remaining. In some cases, it may not be possible to determine the expiry (e.g. the backing-map does not implement the
CacheMap
interface), in which caseCacheMap.EXPIRY_DEFAULT
will be returned.- Specified by:
getExpiry
in interfaceBinaryEntry
- Returns:
- the number of milliseconds remaining before the specified entry expires
-
isReadOnly
public boolean isReadOnly()
Check whether this BinaryEntry allows data modification operations.- Specified by:
isReadOnly
in interfaceBinaryEntry
- Returns:
- true iff the entry is "read-only"
-
update
public void update(ValueUpdater updater, Object oValue)
Update the Entry's value. Calling this method is semantically equivalent to:V target = entry.getValue(); updater.update(target, value); entry.setValue(target, false);
The benefit of using this method is that it may allow the Entry implementation to significantly optimize the operation, such as for purposes of delta updates and backup maintenance.- Specified by:
update
in interfaceInvocableMap.Entry
- Parameters:
updater
- a ValueUpdater used to modify the Entry's valueoValue
- the new value for this Entry
-
isPresent
public boolean isPresent()
Determine if this Entry exists in the Map. If the Entry is not present, it can be created by callingInvocableMap.Entry.setValue(Object)
orInvocableMap.Entry.setValue(Object, boolean)
. If the Entry is present, it can be destroyed by callingInvocableMap.Entry.remove(boolean)
.- Specified by:
isPresent
in interfaceInvocableMap.Entry
- Returns:
- true iff this Entry is existent in the containing Map
-
isSynthetic
public boolean isSynthetic()
Determine if this Entry has been synthetically mutated. This method returnsfalse
if either a non-synthetic update was made or the entry has not been modified.- Specified by:
isSynthetic
in interfaceInvocableMap.Entry
- Returns:
- true if the Entry has been synthetically mutated
-
remove
public void remove(boolean fSynthetic)
Remove this Entry from the Map if it is present in the Map.This method supports both the operation corresponding to
Map.remove(java.lang.Object)
as well as synthetic operations such as eviction. If the containing Map does not differentiate between the two, then this method will always be identical to InvocableMap.this.remove(getKey()).As of Coherence 12.1.2, if fSynthetic is true and the
BackingMap
associated with this entry is a ReadWriteBackingMap, this method will bypass theCacheStore
orBinaryEntryStore
.- Specified by:
remove
in interfaceBinaryEntry
- Specified by:
remove
in interfaceInvocableMap.Entry
- Parameters:
fSynthetic
- pass true only if the removal from the Map should be treated as a synthetic event
-
extract
public Object extract(ValueExtractor extractor)
Extract a value out of the Entry's key or value. Calling this method is semantically equivalent to extractor.extract(entry.getValue()), but this method may be significantly less expensive. For example, the resultant value may be obtained from a forward index, avoiding a potential object de-serialization.- Specified by:
extract
in interfaceQueryMap.Entry
- Parameters:
extractor
- a ValueExtractor to apply to the Entry's key or value- Returns:
- the extracted value
-
equals
public boolean equals(Object o)
Compares the specified object with this entry for equality.
-
hashCode
public int hashCode()
Returns the hash code value for this entry.
-
toString
public String toString()
Render the entry as a String.
-
calculateExpiry
protected static long calculateExpiry(long cDelay)
Calculate the expiry timestamp based on the expiry delay value.- Parameters:
cDelay
- the expiry delay- Returns:
- the expiry timestamp
-
-