Activiti:当CallActivity失败时,工作流程永远不会结束

时间:2016-01-25 21:15:27

标签: activiti bpmn

我遇到了异步工作流程的问题。 我有这个设计:

workflow1:

<div class="row"> <fieldset class="form-group col-sm-3"> <label for="a1">work phone</label> <input id="a1" type="text" class="form-control" readonly="readonly"> </fieldset> <fieldset class="form-group col-sm-3"> <label for="a2">location</label> <input id="a2" type="text" class="form-control" readonly="readonly"> </fieldset> <fieldset class="form-group col-sm-3"> <label for="a3">contractor</label> <input id="a3" type="text" class="form-control" readonly="readonly"> </fieldset> <fieldset class="form-group col-sm-3"> <label for="a4">job code description</label> <input id="a4" type="text" class="form-control" readonly="readonly"> </fieldset> </div> (抛出NullPointerException来测试错误处理) start -> ScriptActivity1

workflow2:

-> end (调用 workflow1 start -> CallActivity

我看到如果我将工作流部署为异步,如果 workflow1 失败, workflow2 永远不会结束,但这不会发生在它们被部署为同步。

此外,如果我仅执行workflow1,则无法正确显示相应的异常。

有谁知道如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

这一切都与线程模型的工作方式有关。 我想你的“测试”过程没有人工任务,这就是你遇到自己行为的原因。 同步进程在与启动器相同的线程上运行,直到它们达到等待状态(通常是消息侦听器,人工任务或信号侦听器)。因此,当您的工作流程1进程失败时,它将终止工作流程2。

当事情是异步时,工作计划就会启动你的被调用流程,它本质上是一个独立的过程(虽然确实有对其父项的引用)。当工作流1失败时,工作流2继续愉快地继续。

通常,您通过使用由异常路径上的信号throw事件触发的信号捕获边界侦听器来模拟您正在经历的行为。

如果您想要一个图解示例,请告诉我。

相关问题