Class SafePersistenceWrappers.SafePersistentStore<R,T extends Throwable>

java.lang.Object
com.tangosol.util.NullImplementation.NullPersistentStore<R>
com.tangosol.persistence.SafePersistenceWrappers.SafePersistentStore<R,T>
All Implemented Interfaces:
com.oracle.coherence.persistence.PersistentStore<R>
Enclosing class:
SafePersistenceWrappers

public static class SafePersistenceWrappers.SafePersistentStore<R,T extends Throwable> extends NullImplementation.NullPersistentStore<R>
SafePersistentStore is a wrapper PersistentStore implementation which protects all synchronous operations on the underlying store from unexpected failures, delegating the exception handling to a failure Continuation. The handling of failures encountered during asynchronous processing remains the responsibility of the Collector used to open the asynchronous transaction.
  • Nested Class Summary

    Nested classes/interfaces inherited from class com.tangosol.util.NullImplementation.NullPersistentStore

    NullImplementation.NullPersistentStore.Token

    Nested classes/interfaces inherited from interface com.oracle.coherence.persistence.PersistentStore

    com.oracle.coherence.persistence.PersistentStore.Visitor<R>
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final Continuation<? super T>
    The failure continuation for this store.
    protected final com.oracle.coherence.persistence.PersistentStore<R>
    The underlying PersistentStore.

    Fields inherited from class com.tangosol.util.NullImplementation.NullPersistentStore

    INSTANCE
  • Constructor Summary

    Constructors
    Constructor
    Description
    SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store)
    Construct a SafePersistentStore backed by the specified store.
    SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store, Continuation<? super T> cont)
    Construct a SafePersistentStore backed by the specified store.
    SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store, SafePersistenceWrappers.FailureContinuationFactory<R,? super T> factory)
    Construct a PersistenceManager backed by the specified manager.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    abort(Object oToken)
    Abort an atomic sequence of mutating operations.
    Begin a new sequence of mutating operations that should be committed to the store as an atomic unit.
    begin(Collector<Object> collector, Object oReceipt)
    Begin a new sequence of mutating operations that should be committed to the store asynchronously as an atomic unit.
    void
    commit(Object oToken)
    Commit a sequence of mutating operations represented by the given token as an atomic unit.
    void
    deleteExtent(long lExtentId)
    Delete the specified extent from the persistent store, ensuring that any key-value mappings associated with the extent are no longer valid.
    boolean
    ensureExtent(long lExtentId)
    Ensure that an extent with the given identifier exists in the persistent store, returning true iff the extent was created.
    void
    erase(long lExtentId, R key, Object oToken)
    Remove the specified key from the underlying store if present.
    Suggest to this PersistentStore that the caller requires exclusive access to this store until close is called on the returned AutoCloseable.
    long[]
    Return a list of the extent identifiers in the underlying store.
    Return the identifier of this store.
    com.oracle.coherence.persistence.PersistentStore<R>
    Return the underlying PersistentStore.
    void
    iterate(com.oracle.coherence.persistence.PersistentStore.Visitor<R> visitor)
    Iterate the key-value pairs in the persistent store, applying the specified visitor to each key-value pair.
    load(long lExtentId, R key)
    Return the value associated with the specified key, or null if the key does not have an associated value in the underlying store.
    void
    moveExtent(long lOldExtentId, long lNewExtentId)
    Move the specified extent from the old extent id to the new extent id.
    void
    Called to handle an unexpected exception.
    void
    store(long lExtentId, R key, R value, Object oToken)
    Store the specified value under the specific key in the underlying store.
    Return a human readable description of this SafePersistentStore.
    void
    truncateExtent(long lExtentId)
    Truncate the specified extent from the persistent store, ensuring that any key-value mappings associated with the extent are removed.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • f_store

      protected final com.oracle.coherence.persistence.PersistentStore<R> f_store
      The underlying PersistentStore.
    • f_contFailure

      protected final Continuation<? super T extends Throwable> f_contFailure
      The failure continuation for this store.
  • Constructor Details

    • SafePersistentStore

      public SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store)
      Construct a SafePersistentStore backed by the specified store.
      Parameters:
      store - the PersistentStore to protect against exceptions
    • SafePersistentStore

      public SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store, Continuation<? super T> cont)
      Construct a SafePersistentStore backed by the specified store.
      Parameters:
      store - the underlying PersistentStore
      cont - the failure continuation to use to handle unexpected exceptions
    • SafePersistentStore

      public SafePersistentStore(com.oracle.coherence.persistence.PersistentStore<R> store, SafePersistenceWrappers.FailureContinuationFactory<R,? super T> factory)
      Construct a PersistenceManager backed by the specified manager.
      Parameters:
      store - the underlying PersistentStore
      factory - the failure continuation factory to use to create handlers for unexpected exceptions
  • Method Details

    • getStore

      public com.oracle.coherence.persistence.PersistentStore<R> getStore()
      Return the underlying PersistentStore.
      Returns:
      the underlying PersistentStore
    • onException

      public void onException(T t)
      Called to handle an unexpected exception.
      Parameters:
      t - the Throwable
    • getId

      public String getId()
      Return the identifier of this store.
      Specified by:
      getId in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      getId in class NullImplementation.NullPersistentStore<R>
      Returns:
      the identifier that was used to open this store
    • ensureExtent

      public boolean ensureExtent(long lExtentId)
      Ensure that an extent with the given identifier exists in the persistent store, returning true iff the extent was created.
      Specified by:
      ensureExtent in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      ensureExtent in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the identifier of the extent to ensure
      Returns:
      true iff the specified extent did not previously exist
    • deleteExtent

      public void deleteExtent(long lExtentId)
      Delete the specified extent from the persistent store, ensuring that any key-value mappings associated with the extent are no longer valid.

      Removal of the key-value mappings associated with the extent from the underlying storage is the responsibility of the implementation, and may (for example) be performed immediately, asynchronously, or deferred until space is required.

      Specified by:
      deleteExtent in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      deleteExtent in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the identifier of the extent to delete
    • moveExtent

      public void moveExtent(long lOldExtentId, long lNewExtentId)
      Move the specified extent from the old extent id to the new extent id.

      Upon control being returned the implementation guarantees that any data data that used to reside against the old extent id is accessible from new extent id using the load API. In addition, calls to store are permitted immediately after control is returned.

      Specified by:
      moveExtent in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      moveExtent in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lOldExtentId - the old extent identifier
      lNewExtentId - the new extent identifier
    • truncateExtent

      public void truncateExtent(long lExtentId)
      Truncate the specified extent from the persistent store, ensuring that any key-value mappings associated with the extent are removed.

      Removal of the key-value mappings associated with the extent from the underlying storage is the responsibility of the implementation, and may (for example) be performed immediately, asynchronously, or deferred until space is required.

      Specified by:
      truncateExtent in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      truncateExtent in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the identifier of the extent to truncate
    • extents

      public long[] extents()
      Return a list of the extent identifiers in the underlying store.
      Specified by:
      extents in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      extents in class NullImplementation.NullPersistentStore<R>
      Returns:
      a list of the extent identifiers in the underlying store
    • exclusively

      public AutoCloseable exclusively()
      Suggest to this PersistentStore that the caller requires exclusive access to this store until close is called on the returned AutoCloseable.

      Note: the caller must call close on the returned object

      Returns:
      an AutoCloseable object that requires close to be called on it when exclusive access is no longer needed
    • load

      public R load(long lExtentId, R key)
      Return the value associated with the specified key, or null if the key does not have an associated value in the underlying store.
      Specified by:
      load in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      load in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the extent identifier for the key
      key - key whose associated value is to be returned
      Returns:
      the value associated with the specified key, or null if no value is available for that key
    • store

      public void store(long lExtentId, R key, R value, Object oToken)
      Store the specified value under the specific key in the underlying store. This method is intended to support both key-value pair creation and value update for a specific key.
      Specified by:
      store in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      store in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the extent identifier for the key-value pair
      key - key to store the value under
      value - value to be stored
      oToken - optional token that represents a set of mutating operations to be committed as an atomic unit; if null, the given key-value pair will be committed to the store automatically by this method
    • erase

      public void erase(long lExtentId, R key, Object oToken)
      Remove the specified key from the underlying store if present.
      Specified by:
      erase in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      erase in class NullImplementation.NullPersistentStore<R>
      Parameters:
      lExtentId - the extent identifier for the key
      key - key whose mapping is to be removed
      oToken - optional token that represents a set of mutating operations to be committed as an atomic unit; if null, the removal of the given key will be committed to the store automatically by this method
    • iterate

      public void iterate(com.oracle.coherence.persistence.PersistentStore.Visitor<R> visitor)
      Iterate the key-value pairs in the persistent store, applying the specified visitor to each key-value pair.
      Specified by:
      iterate in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      iterate in class NullImplementation.NullPersistentStore<R>
      Parameters:
      visitor - the visitor to apply
    • begin

      public Object begin()
      Begin a new sequence of mutating operations that should be committed to the store as an atomic unit. The returned token should be passed to all mutating operations that should be part of the atomic unit. Once the sequence of operations have been performed, they must either be committed to the store or the atomic unit must be aborted.
      Specified by:
      begin in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      begin in class NullImplementation.NullPersistentStore<R>
      Returns:
      a token that represents the atomic unit
    • begin

      public Object begin(Collector<Object> collector, Object oReceipt)
      Begin a new sequence of mutating operations that should be committed to the store asynchronously as an atomic unit. The returned token should be passed to all mutating operations that should be part of the atomic unit. Once the sequence of operations have been performed, they must either be committed to the store or the atomic unit must be aborted.

      If a collector is passed to this method, the specified receipt will be added to it when the unit is committed. If the operation is aborted or an error occurs during the commit, an AsyncPersistenceException that wraps the cause and specified receipt will be added. Finally, the collector will be flushed.

      Specified by:
      begin in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      begin in class NullImplementation.NullPersistentStore<R>
      Parameters:
      collector - an optional collector
      oReceipt - a receipt to be added to the collector (if any) when the unit is committed
      Returns:
      a token representing the atomic unit that will be committed asynchronously
    • commit

      public void commit(Object oToken)
      Commit a sequence of mutating operations represented by the given token as an atomic unit.
      Specified by:
      commit in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      commit in class NullImplementation.NullPersistentStore<R>
      Parameters:
      oToken - a token that represents the atomic unit to commit
    • abort

      public void abort(Object oToken)
      Abort an atomic sequence of mutating operations.
      Specified by:
      abort in interface com.oracle.coherence.persistence.PersistentStore<R>
      Overrides:
      abort in class NullImplementation.NullPersistentStore<R>
      Parameters:
      oToken - a token that represents the atomic unit to abort
    • toString

      public String toString()
      Return a human readable description of this SafePersistentStore.
      Overrides:
      toString in class Object
      Returns:
      a human readable description