Class CacheBasedValueHolder

  • All Implemented Interfaces:
    Serializable, Cloneable, ValueHolderInterface, WeavedAttributeValueHolderInterface

    public class CacheBasedValueHolder
    extends DatabaseValueHolder

    Purpose: In certain cases the contents of a relationship may be retrievable from a cache. This ValueHolder instance provides the mechanism to store a cached relationship and to load that relationship from a cache. This functionality requires that the persistent identities of the targets can be collected as database type foreign key queries are unavailable.

    Since:
    EclipseLink 1.1
    Author:
    gyorke
    See Also:
    Serialized Form
    • Field Detail

      • references

        protected Object[] references
      • shouldAllowInstantiationDeferral

        protected boolean shouldAllowInstantiationDeferral
        Setting to force the instantiation of the Collection on modification
    • Method Detail

      • getCachedPKs

        public Object[] getCachedPKs()
      • getValue

        public Object getValue​(UnitOfWorkImpl uow)
        Process against the UOW and attempt to load a local copy before going to the shared cache If null is returned then the calling UOW will instantiate as normal.
        Overrides:
        getValue in class DatabaseValueHolder
      • instantiateForUnitOfWorkValueHolder

        public Object instantiateForUnitOfWorkValueHolder​(UnitOfWorkValueHolder unitOfWorkValueHolder)
        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: This method is not thread-safe. It must be used in a synchronized manner

        Specified by:
        instantiateForUnitOfWorkValueHolder in class DatabaseValueHolder
      • 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
      • setShouldAllowInstantiationDeferral

        public void setShouldAllowInstantiationDeferral​(boolean shouldAllowInstantiationDeferral)
        Set if instantiation deferral on modification should be available.