如何在jBPM中表示并发操作,其中任何一个都可以结束进程?

时间:2010-06-05 00:41:42

标签: concurrency jbpm subprocess

一个例子:许可证必须由两名律师和一名工程师审查。如果这三个中的任何一个拒绝它,则该过程进入“被拒绝”的结束状态。如果所有三个都授予许可,则它进入“授权”结束状态。所有三名审查员可以同时或以任何顺序进行审查。

一旦工程师授予它,就不应该由工程师进行检查;一旦两位律师对其进行了审查,律师就不应该这样做;一旦一名工程师和两名律师检查过,它应该进入授予最终状态。

我最初的想法是,要么我有一个过于复杂的状态转换图,“相同的”中间状态多次重复,我携带(外部)状态与进程{bool被拒绝; int engineerSignoffId; int lawyer1SignoffId; int lawyer2SignoffId}。

或类似的东西?如果是这样,工程师的拒绝如何终止“律师”中的子流程?

START->FORK->Engineer->Granted?---------------->Y->JOIN-->Granted
          |->Lawyers-->Granted?->by 2 lawyers?->Y---^
                  ^                          |
                  |--------------------------N 

规范jBPM的答案是什么?你能指点我这些答案的例子或文件吗?

感谢。

1 个答案:

答案 0 :(得分:0)

好吧,我不确定我是否正确使用你的用例,但让我试试。

被拒绝的最终状态很容易 - 你可以拥有其中许多或一个,这没关系。如果进程达到结束状态,则该进程结束。被拒绝。故事结局: http://docs.jboss.com/jbpm/v4/userguide/html_single/#end

现在,接受三个人工任务。一个人应该被分配到工程师候选人组,另外两个人被分配给律师候选人组。一旦一个人完成任务(即分配给自己),任何其他人都无法接受任务。 http://docs.jboss.com/jbpm/v4/userguide/html_single/#task

然后,所有人工任务应在最后与等待所有并发路径的节点合并以便继续。即:以正确的多样性加入: http://docs.jboss.com/jbpm/v4/userguide/html_single/#decision

我不确定您使用的是哪个JBPM版本,但如果您使用JBPM 5,这当然也可以在BPMN 2.0中使用。