java.lang.Object
org.eclipse.persistence.internal.indirection.DatabaseValueHolder<T>
org.eclipse.persistence.internal.indirection.BackupValueHolder<T>
All Implemented Interfaces:
Serializable, Cloneable, ValueHolderInterface<T>, WeavedAttributeValueHolderInterface<T>

public class BackupValueHolder<T> extends DatabaseValueHolder<T>
Used as the backup value holder in the unit of work for transparent indirection. This ensure that a reference to the original value holder is held in case the transparent collection or proxy is replace without first instantiating the original.
Since:
10.1.3
See Also:
  • Field Details

    • unitOfWorkValueHolder

      protected ValueHolderInterface<T> unitOfWorkValueHolder
      Stores the original uow clone's value holder.
  • Constructor Details

  • Method Details

    • isPessimisticLockingValueHolder

      public boolean isPessimisticLockingValueHolder()
      Description copied from class: DatabaseValueHolder
      Answers if this valueholder is a pessimistic locking one. Such valueholders are special in that they can be triggered multiple times by different UnitsOfWork. Each time a lock query will be issued. Hence even if instantiated it may have to be instantiated again, and once instantiated all fields can not be reset. Note: Implementations of this method are not necessarily thread-safe. They must be used in a synchronizaed manner
      Specified by:
      isPessimisticLockingValueHolder in class DatabaseValueHolder<T>
    • instantiateForUnitOfWorkValueHolder

      public T instantiateForUnitOfWorkValueHolder(UnitOfWorkValueHolder<T> unitOfWorkValueHolder)
      Description copied from class: DatabaseValueHolder
      Triggers UnitOfWork valueholders directly without triggering the wrapped valueholder (this).

      When in transaction and/or for pessimistic locking the UnitOfWorkValueHolder needs to be triggered directly without triggering the wrapped valueholder. However only the wrapped valueholder knows how to trigger the indirection, i.e. it may be a batchValueHolder, and it stores all the info like the row and the query. Note: Implementations of this method are not necessarily thread-safe. They must be used in a synchronized manner

      Specified by:
      instantiateForUnitOfWorkValueHolder in class DatabaseValueHolder<T>
    • getRow

      public AbstractRecord getRow()
      Description copied from class: DatabaseValueHolder
      Return the row.
      Overrides:
      getRow in class DatabaseValueHolder<T>
    • getSession

      public AbstractSession getSession()
      Description copied from class: DatabaseValueHolder
      Return the session.
      Overrides:
      getSession in class DatabaseValueHolder<T>
    • instantiate

      public T instantiate()
      If the original value holder was not instantiated, then first instantiate it to obtain the backup value.
      Specified by:
      instantiate in class DatabaseValueHolder<T>
    • getUnitOfWorkValueHolder

      public ValueHolderInterface<?> getUnitOfWorkValueHolder()
      Return the original uow clone's value holder.