Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Workflow 活动子进程信号_Workflow_Activiti - Fatal编程技术网

Workflow 活动子进程信号

Workflow 活动子进程信号,workflow,activiti,Workflow,Activiti,我有一个activiti流程,它似乎不像我期望的那样工作 这个过程非常简单: 一旦流程启动,它就会启动子流程。 子流程具有并行网关,它分支到信号捕获事件和用户任务。 一旦捕获到信号,子流程就会抛出错误结束错误事件。 当信号未被捕获时,用户可以完成任务。 然后主进程捕获该错误并结束该进程。 我的问题是:我启动了4个这样的进程,使用1个信号。当发送此信号时,所有4个都应结束。但事实并非如此。它们似乎是以随机顺序结束的?有时1或2会结束,但不会全部结束…我没有错误/异常,也不知道出了什么问题。。。 似

我有一个activiti流程,它似乎不像我期望的那样工作

这个过程非常简单:

一旦流程启动,它就会启动子流程。 子流程具有并行网关,它分支到信号捕获事件和用户任务。 一旦捕获到信号,子流程就会抛出错误结束错误事件。 当信号未被捕获时,用户可以完成任务。 然后主进程捕获该错误并结束该进程。 我的问题是:我启动了4个这样的进程,使用1个信号。当发送此信号时,所有4个都应结束。但事实并非如此。它们似乎是以随机顺序结束的?有时1或2会结束,但不会全部结束…我没有错误/异常,也不知道出了什么问题。。。 似乎有些进程无法捕获发送给它们的信号。为什么会这样

进程架构:


您是否已将日志记录添加到检查捕获的信号条件中,以确定是否所有信号都会触发此步骤? 此外,您还可以查询信号订阅,以确定您的订阅是否达到预期数量:

列表执行=runtimeService.createExecutionQuery .signalEventSubscriptionNamealert .名单

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


Greg

我已经基于flowable项目中已经存在的信号边界事件测试创建了简单的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测试来重现依赖项的问题


马丁

你说得对,信号并没有像我认为的那样立即被捕捉到,但过了一段时间它们就被捕捉到了。问题已经解决。是的,有一点人们没有意识到,作业调度程序体系结构不能保证立即响应,所有作业最终都会被处理,但这可能需要一些时间,具体取决于负载。很高兴你解决了这个问题。如果你能投赞成票,我将不胜感激:谢谢你的junit测试,但我解决了这个问题,或者说,按照我的理解,没有问题。