Class ActionQueue


  • public class ActionQueue
    extends Object
    Responsible for maintaining the queue of actions related to events.

    The ActionQueue holds the DML operations queued as part of a session's transactional-write-behind semantics. The DML operations are queued here until a flush forces them to be executed against the database.

    • Constructor Detail

      • ActionQueue

        public ActionQueue​(SessionImplementor session)
        Constructs an action queue bound to the given session.
        Parameters:
        session - The session "owning" this queue.
    • Method Detail

      • clear

        public void clear()
      • addAction

        public void addAction​(EntityInsertAction action)
        Adds an entity insert action
        Parameters:
        action - The action representing the entity insertion
      • addAction

        public void addAction​(EntityIdentityInsertAction action)
        Adds an entity (IDENTITY) insert action
        Parameters:
        action - The action representing the entity insertion
      • addAction

        public void addAction​(EntityDeleteAction action)
        Adds an entity delete action
        Parameters:
        action - The action representing the entity deletion
      • addAction

        public void addAction​(OrphanRemovalAction action)
        Adds an orphan removal action
        Parameters:
        action - The action representing the orphan removal
      • addAction

        public void addAction​(EntityUpdateAction action)
        Adds an entity update action
        Parameters:
        action - The action representing the entity update
      • addAction

        public void addAction​(CollectionRecreateAction action)
        Adds a collection (re)create action
        Parameters:
        action - The action representing the (re)creation of a collection
      • addAction

        public void addAction​(CollectionRemoveAction action)
        Adds a collection remove action
        Parameters:
        action - The action representing the removal of a collection
      • addAction

        public void addAction​(CollectionUpdateAction action)
        Adds a collection update action
        Parameters:
        action - The action representing the update of a collection
      • addAction

        public void addAction​(QueuedOperationCollectionAction action)
        Adds an action relating to a collection queued operation (extra lazy).
        Parameters:
        action - The action representing the queued operation
      • addAction

        public void addAction​(BulkOperationCleanupAction action)
        Adds an action defining a cleanup relating to a bulk operation (HQL/JPQL or Criteria based update/delete)
        Parameters:
        action - The action representing the queued operation
      • hasUnresolvedEntityInsertActions

        public boolean hasUnresolvedEntityInsertActions()
        Are there unresolved entity insert actions that depend on non-nullable associations with a transient entity?
        Returns:
        true, if there are unresolved entity insert actions that depend on non-nullable associations with a transient entity; false, otherwise
      • executeInserts

        public void executeInserts()
                            throws HibernateException
        Perform all currently queued entity-insertion actions.
        Throws:
        HibernateException - error executing queued insertion actions.
      • afterTransactionCompletion

        public void afterTransactionCompletion​(boolean success)
        Performs cleanup of any held cache soft locks.
        Parameters:
        success - Was the transaction successful.
      • areInsertionsOrDeletionsQueued

        public boolean areInsertionsOrDeletionsQueued()
        Check whether any insertion or deletion actions are currently queued.
        Returns:
        true if insertions or deletions are currently queued; false otherwise.
      • areTablesToBeUpdated

        public boolean areTablesToBeUpdated​(Set<? extends Serializable> tables)
        Check whether the given tables/query-spaces are to be executed against given the currently queued actions.
        Parameters:
        tables - The table/query-spaces to check.
        Returns:
        true if we contain pending actions against any of the given tables; false otherwise.
      • execute

        public <E extends Executable & Comparable<?>> void execute​(E executable)
        Parameters:
        executable - The action to execute
      • toString

        public String toString()
        Returns a string representation of the object.
        Overrides:
        toString in class Object
        Returns:
        a string representation of the object.
      • numberOfCollectionRemovals

        public int numberOfCollectionRemovals()
      • numberOfCollectionUpdates

        public int numberOfCollectionUpdates()
      • numberOfCollectionCreations

        public int numberOfCollectionCreations()
      • numberOfDeletions

        public int numberOfDeletions()
      • numberOfUpdates

        public int numberOfUpdates()
      • numberOfInsertions

        public int numberOfInsertions()
      • setTransactionCompletionProcesses

        public void setTransactionCompletionProcesses​(ActionQueue.TransactionCompletionProcesses processes,
                                                      boolean isTransactionCoordinatorShared)
        Bind transaction completion processes to make them shared between primary and secondary session. Transaction completion processes are always executed by transaction owner (primary session), but can be registered using secondary session too.
        Parameters:
        processes - Transaction completion processes.
        isTransactionCoordinatorShared - Flag indicating shared transaction context.
      • sortCollectionActions

        public void sortCollectionActions()
      • sortActions

        public void sortActions()
      • clearFromFlushNeededCheck

        public void clearFromFlushNeededCheck​(int previousCollectionRemovalSize)
      • hasAfterTransactionActions

        public boolean hasAfterTransactionActions()
      • hasBeforeTransactionActions

        public boolean hasBeforeTransactionActions()
      • hasAnyQueuedActions

        public boolean hasAnyQueuedActions()
      • unScheduleUnloadedDeletion

        public void unScheduleUnloadedDeletion​(Object newEntity)
      • unScheduleDeletion

        public void unScheduleDeletion​(EntityEntry entry,
                                       Object rescuedEntity)
      • serialize

        public void serialize​(ObjectOutputStream oos)
                       throws IOException
        Used by the owning session to explicitly control serialization of the action queue
        Parameters:
        oos - The stream to which the action queue should get written
        Throws:
        IOException - Indicates an error writing to the stream
      • deserialize

        public static ActionQueue deserialize​(ObjectInputStream ois,
                                              EventSource session)
                                       throws IOException,
                                              ClassNotFoundException
        Used by the owning session to explicitly control deserialization of the action queue.
        Parameters:
        ois - The stream from which to read the action queue
        session - The session to which the action queue belongs
        Returns:
        The deserialized action queue
        Throws:
        IOException - indicates a problem reading from the stream
        ClassNotFoundException - Generally means we were unable to locate user classes.