Class AbstractPersistenceContextManager

java.lang.Object
org.drools.persistence.jpa.AbstractPersistenceContextManager
Direct Known Subclasses:
JpaPersistenceContextManager

public abstract class AbstractPersistenceContextManager extends Object
This class manages JpaPersistenceContext objects, and the underlying persistence context (EntityManager) instances for a persistent KieSession and other infrastructure classes that use persistence in KIE projects.

(For reference in the following documentation: the EntityManager is the class used to represent a persistence context)

There are 2 issues to take into account when looking at or modifying the code here:
  1. One of the features made available here is the ability for the user to supply their own (Command Scoped) persistence context for use by the KieSession
  2. However, significant race-conditions arise when a Command Scoped persistence context is used in one persistent KieSession by multiple threads. In other words, when multiple threads call operations on a Singleton persistent KieSession.
This class uses ThreadLocal instances for two things:
  1. The internal Command Scoped EntityManager instance.
  • Field Details

    • env

      protected final Environment env
    • emf

      protected final jakarta.persistence.EntityManagerFactory emf
    • txm

      protected final TransactionManager txm
    • appScopedEntityManager

      protected volatile jakarta.persistence.EntityManager appScopedEntityManager
    • cmdScopedEntityManager

      protected volatile jakarta.persistence.EntityManager cmdScopedEntityManager
    • internalAppScopedEntityManagerFlag

      protected volatile boolean internalAppScopedEntityManagerFlag
    • internalCmdScopedEntityManagerFlag

      protected volatile boolean internalCmdScopedEntityManagerFlag
  • Constructor Details

    • AbstractPersistenceContextManager

      public AbstractPersistenceContextManager(Environment env)
  • Method Details

    • getApplicationScopedEntityManager

      public jakarta.persistence.EntityManager getApplicationScopedEntityManager()
    • getCommandScopedEntityManager

      public jakarta.persistence.EntityManager getCommandScopedEntityManager()
    • endCommandScopedEntityManager

      public void endCommandScopedEntityManager()
    • dispose

      public void dispose()
    • resetApplicationScopedPersistenceContext

      public void resetApplicationScopedPersistenceContext()
    • getInternalCommandScopedEntityManager

      protected jakarta.persistence.EntityManager getInternalCommandScopedEntityManager()