Joining of non-concurrent decision paths seems to be broken in 4.4
h.peter Jul 30, 2010 5:17 AMHello All,
We have a quite complicated process definion with a lot of cases where a step has to be executed only on a specific condition - something like the following diagram (see attached full example process definition JPDL file):
We used join nodes with multiplicity="1" setting to join the two possible outcome paths of the decision node:
<join g="347,51,48,48" multiplicity="1" name="join1">
<transition g="424,76:-7,-17" name="to join2" to="join2"/>
</join>
This approach used to work OK with JBPM 4.3 but it fails with version 4.4.
I believe that the handling of join nodes has been changed in this version: the second join node (the last one before the end in the example) seems to get the incoming executions with an invalid, "ended" state, so it fails with the following exception:
Exception in thread "main" org.jbpm.api.JbpmException: execution[ForkJoinTest.10001.to script2.10002] is not active: ended
at org.jbpm.pvm.internal.model.ExecutionImpl.checkActive(ExecutionImpl.java:1084)
at org.jbpm.pvm.internal.model.ExecutionImpl.take(ExecutionImpl.java:481)
at org.jbpm.jpdl.internal.activity.ForkActivity.execute(ForkActivity.java:95)
at org.jbpm.jpdl.internal.activity.ForkActivity.execute(ForkActivity.java:46)
at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60)
at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672)
at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:632)
at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:217)
at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:63)
at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:36)
at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:49)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56)
at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceByKey(ExecutionServiceImpl.java:67)
For me, this seems to be a bug - clearly, the behaviour of JBPM has been changed between version 4.3 and 4.4. The attached process definition is executed correctly with JBPM 4.3.
What do you think about this?
Regards,
Peter
-
ForkJoinTest.jpdl.xml 1.3 KB