Interface ChangeRecord<K,​V>


  • public interface ChangeRecord<K,​V>
    Provides a mechanism to represent and mutate a Cache Entry that was changed in a Federated Cache.

    ChangeRecords are typically provided to EventInterceptors as part of a FederatedChangeEvent for the purpose of inspecting and possibly modifying an entry prior to it being committed.

    EventInterceptors may choose to reject the change or change the value. When no change is specified the modified value is committed.

    Any updates to a ChangeRecord will overwrite the modified Entry and thus the updated value when the change is committed.

    When ChangeRecord is for a local participant, the original and local entry will be the same.

    Author:
    bb
    • Method Detail

      • getOriginalEntry

        ChangeRecord.Entry<K,​V> getOriginalEntry()
        Obtain a representation of the ChangeRecord.Entry prior to any changes occurring.

        This is typically a representation of the ChangeRecord.Entry at the source participant prior to a change occurring.

        Returns:
        the original entry
      • getEventType

        com.tangosol.net.events.federation.FederatedChangeEvent.Type getEventType()
        The type of the FederatedChangeEvent.
        Returns:
        the type of the FederatedChangeEvent
        Since:
        12.2.1.0.2
      • setValue

        void setValue​(V newValue)
        Update the modified ChangeRecord.Entry value.

        This method can potentially cause the change to be propagated back to the origin participant. Care must be taken to avoid any recursive ping-pong cycles.

        Parameters:
        newValue - new value for the modified entry
      • setValue

        void setValue​(V newValue,
                      boolean fSynthetic)
        Update the modified ChangeRecord.Entry value with a synthetic flag.

        This method can potentially cause the change to be propagated back to the origin participant. Care must be taken to avoid any recursive ping-pong cycles.

        Note: Marking a change as synthetic will have different behavior depending on the federation event type: COMMITTING_LOCAL - the change will not be federated to other clusters and CacheStores will not be called. REPLICATING - setting the change synthetic is not allowed. An UnsupportedOperationException will be thrown. COMMITTING_REMOTE - the change will be applied as a synthetic change. CacheStores will not be triggered and federation will not forward the change to other clusters from this destination cluster.

        Parameters:
        newValue - new value for the modified entry
        fSynthetic - a flag to indicate whether the update is synthetic
        Since:
        12.2.1.4.1
      • update

        <T> void update​(ValueUpdater<V,​T> updater,
                        T oValue)
        Update the modified Entry's value using the given ValueUpdater.
        Parameters:
        updater - a ValueUpdater used to modify the Entry's value
        oValue - the new value for this Entry
      • isDeleted

        boolean isDeleted()
        Determine if the modified entry in the ChangeRecord was deleted.
        Returns:
        true if the entry was deleted
      • setLocalOnly

        void setLocalOnly​(boolean bLocal)
        Set the local only flag to indicate that the change is not federated.

        Note: this setting is only applicable to FederatedChangeEvent.Type.COMMITTING_LOCAL events.

        Parameters:
        bLocal - a flag to indicate whether to keep the change local only
        Since:
        12.2.1.0.3
      • isLocalOnly

        boolean isLocalOnly()
        Determine whether the change represented by this ChangeRecord is local only, therefore not federated.

        Note: this setting is only applicable to FederatedChangeEvent.Type.COMMITTING_LOCAL events.

        Returns:
        a boolean value to indicate whether the change is local only
        Since:
        12.2.1.0.3
      • isSynthetic

        boolean isSynthetic()
        Determine if this Entry has been synthetically mutated. This method returns false if either a non-synthetic update was made or the entry has not been modified.
        Returns:
        true if the Entry has been synthetically mutated
        Since:
        12.2.1.4.1