Package org.apache.catalina.tribes.tipis

## Interface ReplicatedMapEntry

All Superinterfaces:
  `Serializable`

All Known Implementing Classes:
  `DeltaSession`

    public interface ReplicatedMapEntry
    extends Serializable

For smarter replication, an object can implement this interface to replicate diffs
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

All Methods Instance Methods Abstract Methods
`void` `accessEntry()` 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 false
`long` `getLastTimeReplicated()`
`long` `getVersion()` For accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data.
`boolean` `isAccessReplicate()` If this returns true, to replicate that an object has been accessed
`boolean` `isDiffable()` 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 state
`void` `lock()` Lock during serialization
`void` `resetDiff()` Resets the current diff state and resets the dirty flag
`void` `setLastTimeReplicated​(long lastTimeReplicated)` Set the last replicate time.
`void` `setOwner​(Object owner)` 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 entry
`void` `unlock()` Unlock after serialization

### Method Detail

#### 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

    byte[] getDiff()
            throws IOException

Returns a diff and sets the dirty map to false

Returns:
  Serialized diff data
Throws:
  `IOException` - IO error serializing

#### applyDiff

    void applyDiff​(byte[] diff,
                   int offset,
                   int length)
            throws IOException,
                   ClassNotFoundException

Applies a diff to an existing object.

Parameters:
  `diff` - Serialized diff data
  `offset` - Array offset
  `length` - Array length
Throws:
  `IOException` - IO error deserializing
  `ClassNotFoundException` - 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

    void setOwner​(Object owner)

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.