Class JpaProcessPersistenceContext

  • All Implemented Interfaces:
    org.drools.persistence.api.PersistenceContext, org.jbpm.persistence.api.ProcessPersistenceContext

    public class JpaProcessPersistenceContext
    extends org.drools.persistence.jpa.JpaPersistenceContext
    implements org.jbpm.persistence.api.ProcessPersistenceContext
    • Field Summary

      • Fields inherited from class org.drools.persistence.jpa.JpaPersistenceContext

        isJTA, lockMode, pessimisticLocking, txm
    • Constructor Summary

      Constructors 
      Constructor Description
      JpaProcessPersistenceContext​(javax.persistence.EntityManager em, boolean useJTA, boolean locking, String lockingMode, org.drools.persistence.api.TransactionManager txm)  
      JpaProcessPersistenceContext​(javax.persistence.EntityManager em, org.drools.persistence.api.TransactionManager txm)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void evict​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)  
      List<Long> findAllProcessInstanceInfo()  
      org.jbpm.persistence.api.PersistentProcessInstance findProcessInstanceInfo​(Long processId)  
      Long getProcessInstanceByCorrelationKey​(org.kie.internal.process.CorrelationKey correlationKey)
      With regards to locking, the method is not always called during a transaction, which means that including logic to lock the query will cause exceptions and is not feasible.
      List<Long> getProcessInstancesWaitingForEvent​(String type)
      This method is used by the JPASignalManager in order to load ProcessInstance instances into the ProcessInstanceManager cache so that they can then be signalled.
      org.jbpm.persistence.api.PersistentCorrelationKey persist​(org.jbpm.persistence.api.PersistentCorrelationKey correlationKeyInfo)  
      org.jbpm.persistence.api.PersistentProcessInstance persist​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)  
      void remove​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)  
      • Methods inherited from class org.drools.persistence.jpa.JpaPersistenceContext

        close, findSession, findWorkItem, getEntityManager, isOpen, joinTransaction, lock, lock, merge, persist, persist, remove, remove
      • Methods inherited from interface org.drools.persistence.api.PersistenceContext

        close, findSession, findWorkItem, isOpen, joinTransaction, lock, merge, persist, persist, remove, remove
    • Constructor Detail

      • JpaProcessPersistenceContext

        public JpaProcessPersistenceContext​(javax.persistence.EntityManager em,
                                            org.drools.persistence.api.TransactionManager txm)
      • JpaProcessPersistenceContext

        public JpaProcessPersistenceContext​(javax.persistence.EntityManager em,
                                            boolean useJTA,
                                            boolean locking,
                                            String lockingMode,
                                            org.drools.persistence.api.TransactionManager txm)
    • Method Detail

      • persist

        public org.jbpm.persistence.api.PersistentProcessInstance persist​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)
        Specified by:
        persist in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • findProcessInstanceInfo

        public org.jbpm.persistence.api.PersistentProcessInstance findProcessInstanceInfo​(Long processId)
        Specified by:
        findProcessInstanceInfo in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • remove

        public void remove​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)
        Specified by:
        remove in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • evict

        public void evict​(org.jbpm.persistence.api.PersistentProcessInstance processInstanceInfo)
        Specified by:
        evict in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • getProcessInstancesWaitingForEvent

        public List<Long> getProcessInstancesWaitingForEvent​(String type)
        This method is used by the JPASignalManager in order to load ProcessInstance instances into the ProcessInstanceManager cache so that they can then be signalled.

        Unfortunately, with regards to locking, the method is not always called during a transaction, which means that including logic to lock the query will cause exceptions and is not feasible.

        Because the SingleSessionCommandService design is based around a synchronized execute(...) method, it's not possible for one thread to create a process instance while another thread simultaneously tries to signal it. That means that a phantom read race condition, that might be caused by a lack of pessimistic locking on this query, isn't possible.

        Of course, if you're using multiple ksessions to simultaneoulsy interact with the same process instance, all bets are off. This however is true for almost everything involving process instances, so that it's not worth discussing.

        Specified by:
        getProcessInstancesWaitingForEvent in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • persist

        public org.jbpm.persistence.api.PersistentCorrelationKey persist​(org.jbpm.persistence.api.PersistentCorrelationKey correlationKeyInfo)
        Specified by:
        persist in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • getProcessInstanceByCorrelationKey

        public Long getProcessInstanceByCorrelationKey​(org.kie.internal.process.CorrelationKey correlationKey)
        With regards to locking, the method is not always called during a transaction, which means that including logic to lock the query will cause exceptions and is not feasible.

        However, this is not an issue: see the getProcessInstancesWaitingForEvent(String) documentation for more information. The same logic applies to this method.

        Specified by:
        getProcessInstanceByCorrelationKey in interface org.jbpm.persistence.api.ProcessPersistenceContext
      • findAllProcessInstanceInfo

        public List<Long> findAllProcessInstanceInfo()
        Specified by:
        findAllProcessInstanceInfo in interface org.jbpm.persistence.api.ProcessPersistenceContext