在ServiceTask执行中找不到自己的流程实例

时间:2016-11-04 09:34:26

标签: java camunda

我在进程开始后立即实现了一个Camunda ServiceTask类(JavaDelegate)。在此任务中,我为自己的流程实例运行ProcessInstanceQuery(不要问为什么)。令人惊讶的是,查询结果为空 - 我不明白这是怎么发生的。

为了重现这个问题,我在GitHub创建了一个非常简单的演示项目。

这是过程

enter image description here

这是我的HelloWorldTask执行代码

@Override
public void execute(DelegateExecution execution) throws Exception {

    String processInstanceId = execution.getProcessInstanceId();

    System.out.println(
            "Entering HelloWorldTask.execute (processInstanceId=" + processInstanceId + ")");

    ProcessInstanceQuery query =
            runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId);
    ProcessInstance pi = query.singleResult();

    if (pi == null) {
        System.out
                .println("WARN - No process instance with id " + processInstanceId + " found!");
    } else {
        System.out.println("Hello World!");
    }

    System.out.println(
            "Exiting HelloWorldTask.execute (processInstanceId=" + processInstanceId + ")");

}

可以使用单元测试hello.word.HelloWorldTest.helloWorld()来启动该过程。遗憾的是输出

Entering HelloWorldTask.execute (processInstanceId=4)
WARN - No process instance with id 4 found!
Exiting HelloWorldTask.execute (processInstanceId=4)

任何人都可以解释这种行为。对我来说会很有帮助。

1 个答案:

答案 0 :(得分:4)

由于您没有等待状态,因此未对该事务进行评估,这意味着在该过程结束之前,数据库中没有流程实例。

要通过委托执行来访问流程实例,只需使用 execution.getProcessInstance()方法。 如果委托执行当前是流程实例,则此方法返回自身。在你的情况下,它将是相同的执行。

有关Camunda引擎中等待状态和事务边界的更多信息,请参阅documentation