Package org.apache.catalina.tribes.tipis

## Interface ReplicatedMapEntry

- All Superinterfaces:
    `java.io.Serializable`
  All Known Implementing Classes:
    `DeltaSession`

      public interface ReplicatedMapEntry
      extends java.io.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
    Modifier and Type | Method | Description
    --- | --- | ---
    `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​(java.lang.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 java.io.IOException

      Returns a diff and sets the dirty map to false
      Returns:
        Serialized diff data
      Throws:
        `java.io.IOException` - IO error serializing

    - #### applyDiff

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

      Applies a diff to an existing object.
      Parameters:
        `diff` - Serialized diff data
        `offset` - Array offset
        `length` - Array length
      Throws:
        `java.io.IOException` - IO error deserializing
        `java.lang.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​(java.lang.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.