在 ServiceTask 执行中找不到自己的流程实例
Own process instance can not be found inside a ServiceTask execution
我在流程开始后立即实施了 Camunda ServiceTask class (JavaDelegate)。在此任务中,我 运行 为 own 流程实例创建了一个 ProcessInstanceQuery(不要问为什么)。令人惊讶的是,查询结果为空 - 我不明白这是怎么发生的。
为了重现该问题,我在 GitHub 创建了一个非常简单的演示项目。
这是过程
这是我的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)
任何人都可以解释这种行为。对我很有帮助。
由于您没有等待状态,事务未完成,这意味着数据库中没有流程实例,直到流程结束。
要通过委托执行访问流程实例,只需使用
execution.getProcessInstance()
方法。
这个方法returns本身,如果委托执行当前是流程实例。在你的情况下,它将是相同的执行。
有关 Camunda 引擎中等待状态和事务边界的更多信息,请参阅 documentation。
我在流程开始后立即实施了 Camunda ServiceTask class (JavaDelegate)。在此任务中,我 运行 为 own 流程实例创建了一个 ProcessInstanceQuery(不要问为什么)。令人惊讶的是,查询结果为空 - 我不明白这是怎么发生的。
为了重现该问题,我在 GitHub 创建了一个非常简单的演示项目。
这是过程
这是我的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)
任何人都可以解释这种行为。对我很有帮助。
由于您没有等待状态,事务未完成,这意味着数据库中没有流程实例,直到流程结束。
要通过委托执行访问流程实例,只需使用
execution.getProcessInstance()
方法。
这个方法returns本身,如果委托执行当前是流程实例。在你的情况下,它将是相同的执行。
有关 Camunda 引擎中等待状态和事务边界的更多信息,请参阅 documentation。