Attempting to execute multi-threaded application causes RuntimeException with error "Process instance 1[process_idl] is disconnected"
Issue
We experience issues with multi-threaded access (either due to EJB @Asynchronous calls or JMS/MDBs) to the jBPM runtime.
Here is a brief explanation of the execution flow in our application:
- The following component periodically checks for new ProcessSignal items:
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Singleton
public class ProcessSignalController {
@EJB
private ProcessService p;
@Schedule(hour = "*", minute = "*", second="*/30", persistent = false)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void releaseQueuedTasks() {
List<ProcessSignal> list = selectProcessesToSignal();
for (ProcessSignal signal : list) {
p.releaseWorkItemAsync(signal.getBpmProcessId(), signal.getBpmWorkItemId());
}
}
- ProcessServiceBean.releseWorkItemAsync method is annotated with @Asynchronous:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
@Asynchronous
public void releaseWorkItemAsync(final Long processInstanceId, final Long workItemId){
try {
final GenericCommand<?> release = new WorkItemReleaseCommand(workItemId);
executeWorkItemCommand(processInstanceId, release);
}
}
private void executeWorkItemCommand(final Long processInstanceId, final GenericCommand<?> command) {
final KieSession ksession = fProcessService.getExistingSession(processInstanceId);
final CommandBasedStatefulKnowledgeSession commandSession = (CommandBasedStatefulKnowledgeSession)ksession;
final CommandService commandService = commandSession.getCommandService();
commandService.execute(command);
final int rules = ksession.fireAllRules();
}
- When this happens for more than one ProcessSignal item at a time, the call fails with the following exception:
09:52:30,298 INFO [org.jboss.jca.core.connectionmanager.listener.TxConnectionListener] (EJB default - 6) IJ000311: Throwable from unregister connection: java.lang.IllegalStateException: Trying to return an unknown connection2! org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@4243a1dd
at org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl.unregisterConnection(CachedConnectionManagerImpl.java:347)
at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.connectionClosed(TxConnectionListener.java:371)
at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:568)
at org.jboss.jca.adapters.jdbc.WrappedConnection.close(WrappedConnection.java:264)
...
at org.jbpm.persistence.JpaProcessPersistenceContext.findProcessInstanceInfo(JpaProcessPersistenceContext.java:48) [jbpm-persistence-jpa-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.persistence.processinstance.JPAProcessInstanceManager.getProcessInstance(JPAProcessInstanceManager.java:117) [jbpm-persistence-jpa-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:273) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.process.instance.ProcessRuntimeImpl.getProcessInstance(ProcessRuntimeImpl.java:269) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
...
at org.jbpm.CustomWorkItemHandler.onRelease(CustomWorkItemHandler.java:63) [jbpm6-extension-1.0.0.jar:1.0.0]
- As a result, the ProcessSignal items are not removed from the database, and on the next periodic invocation of the scheduled bean, the releasing of the tasks fails:
09:53:00,110 WARN [org.drools.persistence.SingleSessionCommandService] (EJB default - 9) Could not commit session: org.jbpm.workflow.instance.WorkflowRuntimeException: [processl:2 - task:2] -- null
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:139) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:155) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerNodeInstance(NodeInstanceImpl.java:347) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:306) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:44) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:290) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:269) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:279) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:341) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:317) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:404) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:134) [drools-persistence-jpa-6.0.3-redhat-7-BZ-1167280.jar:6.0.3-redhat-7-BZ-1167280]
at org.jbpm.CustomWorkItemHandler.onRelease(CustomWorkItemHandler.java:63) [jbpm6-extension-1.0.0.jar:1.0.0]
...
Caused by: java.lang.NullPointerException
at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.internalExecuteWorkItem(JPAWorkItemManager.java:46) [drools-persistence-jpa-6.0.3-redhat-7-BZ-1167280.jar:6.0.3-redhat-7-BZ-1167280]
at org.jbpm.workflow.instance.node.WorkItemNodeInstance.internalTrigger(WorkItemNodeInstance.java:128) [jbpm-flow-6.0.3-redhat-7.jar:6.0.3-redhat-7]
... 80 more
09:53:00,135 ERROR [org.jboss.as.ejb3.invocation] (EJB default - 9) JBAS014134: EJB Invocation failed on component ProcessBean for method ... javax.ejb.EJBException: org.jbpm.workflow.instance.WorkflowRuntimeException: [processl:2 - task:2] -- null
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:165) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:250) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:344) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:216) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
...
Caused by: org.jbpm.workflow.instance.WorkflowRuntimeException: [processl:2 - task:2] -- null
Environment
- Red Hat JBoss BPM Suite
- 6.0.3
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.