Activiti子过程信号

时间:2017-01-31 11:42:58

标签: workflow activiti

我有活动过程,似乎没有像我期望的那样工作。

过程非常简单:

  1. 启动进程后,它将启动子进程。
  2. Subprocess具有并行网关,它分支以指示捕获事件和用户任务。
  3. 一旦捕获到singal,子进程就会抛出错误(结束错误事件)。
  4. 虽然未捕获信号,但用户可以完成任务。
  5. 然后主进程捕获该错误并结束进程。
  6. 我的问题:我启动了4个这样的过程,即使用1个信号。发送此信号时,应结束所有4个信号。但他们不是。它们似乎以随机顺序结束了? Somtimes 1或2已结束,但从未全部结束......我没有错误/异常,也不知道出了什么问题...... 似乎某些进程只是不会捕获发送给它们的信号。为什么会这样呢?

    流程架构:

    enter image description here

2 个答案:

答案 0 :(得分:1)

您是否已将记录添加到"检查捕获的信号条件"确定所有信号是否实际触发此步骤? 此外,您可以查询信号订阅以确定您是否拥有您期望的数量:

列表执行= runtimeService.createExecutionQuery()    .signalEventSubscriptionName("警报&#34)    .LIST();

我希望您的检查逻辑处理不正确,或者您没有"令牌"等待信号。

格雷格

答案 1 :(得分:0)

我已根据可流动项目中已有的信号边界事件测试创建了简单的jUnit测试(应该与activiti一样)

 @Deployment(resources = "org/activiti/engine/test/bpmn/event/signal/SignalEventTest.testSignalBoundaryOnSubProcess.bpmn20.xml")
public void testMultipleCatchEventsOnSubProcess() {
ProcessInstance processInstance1 = runtimeService.startProcessInstanceByKey("signalEventOnSubprocess");
ProcessInstance processInstance2 = runtimeService.startProcessInstanceByKey("signalEventOnSubprocess");
ProcessInstance processInstance3 = runtimeService.startProcessInstanceByKey("signalEventOnSubprocess");

assertThat("There must be three subscriptions to the signal.", createEventSubscriptionQuery().count(), is(3L));

runtimeService.signalEventReceived("stopSignal");

assertProcessEnded(processInstance1.getProcessInstanceId());
assertProcessEnded(processInstance2.getProcessInstanceId());
assertProcessEnded(processInstance3.getProcessInstanceId());
}

测试通过。你能创建失败的jUnit测试来重现问题(带有依赖关系)吗?

马丁