Package org.apache.catalina.tribes.tipis
Interface ReplicatedMapEntry
- All Superinterfaces:
Serializable
- All Known Implementing Classes:
DeltaSession
For smarter replication, an object can implement this interface to replicate diffs
The replication logic will call the methods in the following order:
When the data is deserialized the logic is called in the following order
The replication logic will call the methods in the following order:
1. if ( entry.isDirty() )
try {
2. entry.lock();
3. byte[] diff = entry.getDiff();
4. entry.reset();
} finally {
5. entry.unlock();
}
}
When the data is deserialized the logic is called in the following order
1. ReplicatedMapEntry entry = (ReplicatedMapEntry)objectIn.readObject();
2. if ( isBackup(entry)||isPrimary(entry) ) entry.setOwner(owner);
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Access to an existing object.void
applyDiff
(byte[] diff, int offset, int length) Applies a diff to an existing object.byte[]
getDiff()
Returns a diff and sets the dirty map to falselong
long
For accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data.boolean
If this returns true, to replicate that an object has been accessedboolean
If this returns true, the map will extract the diff using getDiff() Otherwise it will serialize the entire object.boolean
isDirty()
Has the object changed since last replication and is not in a locked statevoid
lock()
Lock during serializationvoid
Resets the current diff state and resets the dirty flagvoid
setLastTimeReplicated
(long lastTimeReplicated) Set the last replicate time.void
This method is called after the object has been created on a remote map.void
setVersion
(long version) Forces a certain version to a replicated map entryvoid
unlock()
Unlock after serialization
-
Method Details
-
isDirty
boolean isDirty()Has the object changed since last replication and is not in a locked state- Returns:
- boolean
-
isDiffable
boolean isDiffable()If this returns true, the map will extract the diff using getDiff() Otherwise it will serialize the entire object.- Returns:
- boolean
-
getDiff
Returns a diff and sets the dirty map to false- Returns:
- Serialized diff data
- Throws:
IOException
- IO error serializing
-
applyDiff
Applies a diff to an existing object.- Parameters:
diff
- Serialized diff dataoffset
- Array offsetlength
- Array length- Throws:
IOException
- IO error deserializingClassNotFoundException
- Serialization error
-
resetDiff
void resetDiff()Resets the current diff state and resets the dirty flag -
lock
void lock()Lock during serialization -
unlock
void unlock()Unlock after serialization -
setOwner
This method is called after the object has been created on a remote map. On this method, the object can initialize itself for any data that wasn't- Parameters:
owner
- Object
-
getVersion
long getVersion()For accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data. The replicated map can use this to ensure accuracy on a periodic basis- Returns:
- long - the version number or -1 if the data is not versioned
-
setVersion
void setVersion(long version) Forces a certain version to a replicated map entry- Parameters:
version
- long
-
getLastTimeReplicated
long getLastTimeReplicated()- Returns:
- the last replicate time.
-
setLastTimeReplicated
void setLastTimeReplicated(long lastTimeReplicated) Set the last replicate time.- Parameters:
lastTimeReplicated
- New timestamp
-
isAccessReplicate
boolean isAccessReplicate()If this returns true, to replicate that an object has been accessed- Returns:
- boolean
-
accessEntry
void accessEntry()Access to an existing object.
-