我在Activiti中运行一个只包含服务任务的porcess。这个间隔很长,有时候我想在中途终止。进程正在使用activiti - 终止正在运行的流程实例
ProcessInstance pi = runtimeService.startProcessInstanceById(
processDefinitionId, executionParameters);
从activiti forum开始,过程可以通过在runtimeService
调用
void deleteProcessInstance(String processInstanceId, String deleteReason);
被终止。
问题是startProcessInstanceById
方法只在执行完成后才返回。所以我没有得到processInstance
,除非过程已经结束。
但是,我确实调试了代码,我能够在JavaDeleate#execute()
方法的实现中找到processInstanceId
。
现在,当我从另一个线程调用runtimeService.deleteProcessInstance(processInstanceId, deleteReason)
方法时,我得到ActivitiObjectNotFoundException
指出给定的processInstanceId dosn't不存在。
此外,当processInstance正在运行时,即使进程正在运行,调用runtimeService.createProcessInstanceQuery().list()
也会返回一个空列表。
Martin在这里有正确的答案。使用Parse Handler自动将侦听器添加到将终止活动边界上的实例(完成或创建事件)的每个服务任务。您将无法使用REST API或标准Java流程实例终止或删除呼叫,因为您从来没有真正使用“直通流程”访问数据库。 –