JBPM Locking When Accessing KieSession From Different Thread

35 views
Skip to first unread message

mr...@univeris.com

unread,
Nov 21, 2022, 12:48:14 PM11/21/22
to jBPM Development
I am doing an upgrade from JBPM 3 to 7. The Process Instances runs on a different thread,  Sometimes the UI thread needs to access the process Instance via the KIESession. If I try to execute an operation for example sending a signal the UI is blocked until the process instances finish. 

I looked further into it and the PersistableRunner.execute() is synchronized . 
FYI I am using the per-process Instance strategy.

Is there a way to get around this issue?

A snippet of thread DUMP:

default task-21@45362" prio=5 tid=0x150 nid=NA waiting for monitor entry
  java.lang.Thread.State: BLOCKED
     waiting for JBPM-Processor-5692548@955268 to release lock on <0xb176> (a org.drools.persistence.PersistableRunner)
      at org.drools.persistence.PersistableRunner.execute(PersistableRunner.java:400)
      at org.drools.persistence.PersistableRunner.execute(PersistableRunner.java:68)
      at org.drools.core.runtime.InternalLocalRunner.execute(InternalLocalRunner.java:37)
      at org.drools.core.runtime.InternalLocalRunner.execute(InternalLocalRunner.java:41)
      at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.signalEvent(CommandBasedStatefulKnowledgeSession.java:255)
      at com.className.cancelBpmProcessing(className.java:299)




Francisco Javier Tirado Sarti

unread,
Nov 21, 2022, 1:12:19 PM11/21/22
to mr...@univeris.com, jBPM Development
Hi,
Can you also include the thread that holds the lock?

---

This e-mail message (including attachments, if any) is intended for the use of the individual or entity to which it is addressed and may contain information that is privileged, proprietary, confidential and exempt from disclosure. If you are not the intended recipient, you are notified that any dissemination, distribution or copying of this communication is strictly prohibited.  If you have received this communication in error, please notify the sender and erase this e-mail message immediately.

Le présent courrier électronique (ainsi que les pièces qui y sont annexées, le cas échéant) s’adresse au destinataire indiqué et peut contenir des renseignements privilégiés, confidentiels et/ou dispensés de divulgation.  Si vous n’êtes pas le destinataire de ce document, nous vous signalons qu’il est strictement interdit de le diffuser, de le distribuer ou de le reproduire.  Si ce message vous a été transmis par erreur, veuillez en aviser l’expéditeur et le supprimer sans délai.

--
You received this message because you are subscribed to the Google Groups "jBPM Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jbpm-developme...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jbpm-development/76f60784-276b-4e70-bfb6-227245cd5f68n%40googlegroups.com.

mr...@univeris.com

unread,
Nov 21, 2022, 1:40:34 PM11/21/22
to jBPM Development
I removed company specific classes.  

java.lang.Thread.State: RUNNABLE
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:69)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.lambda$internalTrigger$0(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance$$Lambda$1538.1211958167.run(Unknown Source:-1)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.processWorkItemHandler(WorkItemNodeInstance.java:155)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:424)
      at org.jbpm.workflow.instance.node.SplitInstance.executeStrategy(SplitInstance.java:116)
      at org.jbpm.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:62)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:59)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:417)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:377)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:293)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:380)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:350)
      at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:703)
      - locked <0xb178> (a org.jbpm.ruleflow.instance.RuleFlowProcessInstance)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:171)
      at com.company.workItemHandler.executeWorkItem(workItemHandler.java:45)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:69)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.lambda$internalTrigger$0(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance$$Lambda$1538.1211958167.run(Unknown Source:-1)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.processWorkItemHandler(WorkItemNodeInstance.java:155)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:59)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:417)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:377)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:293)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:380)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:350)
      at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:703)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:171)
      at com.company.workItemHandler.executeWorkItem(workItemHandler.java:45)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:69)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.lambda$internalTrigger$0(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance$$Lambda$1538.1211958167.run(Unknown Source:-1)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.processWorkItemHandler(WorkItemNodeInstance.java:155)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:59)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:417)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:377)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:293)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:380)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:350)
      at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:703)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:171)
      at com.company.workItemHandler.executeWorkItem(workItemHandler.java:45)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:69)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.lambda$internalTrigger$0(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance$$Lambda$1538.1211958167.run(Unknown Source:-1)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.processWorkItemHandler(WorkItemNodeInstance.java:155)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.node.JoinInstance.triggerCompleted(JoinInstance.java:272)
      at org.jbpm.workflow.instance.node.JoinInstance.internalTrigger(JoinInstance.java:133)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:424)
      at org.jbpm.workflow.instance.node.SplitInstance.executeStrategy(SplitInstance.java:116)
      at org.jbpm.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:62)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:59)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:417)
      at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:377)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:293)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:380)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:350)
      at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:703)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:171)
      at com.company.workItemHandler.executeWorkItem(workItemHandler.java:44)
      at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:69)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.lambda$internalTrigger$0(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance$$Lambda$1538.1211958167.run(Unknown Source:-1)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.processWorkItemHandler(WorkItemNodeInstance.java:155)
      at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:141)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:415)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:393)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:362)
      at org.jbpm.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:72)
      at org.jbpm.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:43)
      at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:207)
      at org.jbpm.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:40)
      at org.jbpm.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:248)
      at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:559)
      at org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java:261)
      at org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java:270)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcessInstance(StatefulKnowledgeSessionImpl.java:1842)
      at org.drools.core.command.runtime.process.StartProcessInstanceCommand.execute(StartProcessInstanceCommand.java:68)
      at org.drools.core.command.runtime.process.StartProcessInstanceCommand.execute(StartProcessInstanceCommand.java:31)
      at org.drools.core.fluent.impl.PseudoClockRunner.executeBatch(PseudoClockRunner.java:102)
      at org.drools.core.fluent.impl.PseudoClockRunner.executeBatches(PseudoClockRunner.java:69)
      at org.drools.core.fluent.impl.PseudoClockRunner.execute(PseudoClockRunner.java:61)
      at org.drools.core.fluent.impl.PseudoClockRunner.execute(PseudoClockRunner.java:39)
      at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:39)
      at org.drools.persistence.PersistableRunner$TransactionInterceptor.execute(PersistableRunner.java:608)
      at org.drools.persistence.PersistableRunner$TransactionInterceptor.execute(PersistableRunner.java:568)
      at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:39)
      at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.internalExecute(OptimisticLockRetryInterceptor.java:102)
      at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:83)
      at org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:44)
      at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:39)
      at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:73)
      at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:45)
      at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:39)
      at org.jbpm.runtime.manager.impl.error.ExecutionErrorHandlerInterceptor.internalExecute(ExecutionErrorHandlerInterceptor.java:66)
      at org.jbpm.runtime.manager.impl.error.ExecutionErrorHandlerInterceptor.execute(ExecutionErrorHandlerInterceptor.java:52)
      at org.jbpm.runtime.manager.impl.error.ExecutionErrorHandlerInterceptor.execute(ExecutionErrorHandlerInterceptor.java:29)
      at org.drools.persistence.PersistableRunner.execute(PersistableRunner.java:400)
      - locked <0xb176> (a org.drools.persistence.PersistableRunner)

      at org.drools.persistence.PersistableRunner.execute(PersistableRunner.java:68)
      at org.drools.core.runtime.InternalLocalRunner.execute(InternalLocalRunner.java:37)
      at org.drools.core.runtime.InternalLocalRunner.execute(InternalLocalRunner.java:41)
      at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.startProcessInstance(CommandBasedStatefulKnowledgeSession.java:289)
      at com.className.processor(className.java:129)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)


ENRIQUE GONZALEZ MARTINEZ

unread,
Nov 22, 2022, 3:49:28 AM11/22/22
to Francisco Javier Tirado Sarti, mr...@univeris.com, jBPM Development
Hi, You cannot avoid this as this is a mechanism to avoid multithread safety.

Cheers :)

El lun, 21 nov 2022 a las 19:12, Francisco Javier Tirado Sarti
(<ftir...@redhat.com>) escribió:
> To view this discussion on the web visit https://groups.google.com/d/msgid/jbpm-development/CABnrMOiBX0e%2BGxV45GKwqCyu3D5BfHqm2_LsgVVQ6r7wb8J2rw%40mail.gmail.com.



--
Saludos, Enrique González Martínez :)
Reply all
Reply to author
Forward
0 new messages