我们在 Camunda 进程中看到 OptimisticLockingExceptions,场景如下:
该流程由一个用户任务、一个网关和一个服务任务组成。用户任务执行
runtimeService.setVariable(execId, "object", out);`.
taskService.complete(taskId);
以下 ServiceTask 使用“object”作为输入变量(不修改它),并且在完成时抛出OptimisticLockingException
. 我的问题似乎源于这样一个事实,即taskService.complete()
在刷新 UserTask 中设置的变量之前立即执行 ServiceTask。
我遇到了另一个相关的问题,当我在一个 UserTask 中执行runtimeService.setVariable(Map<Strong, Boolean>)
并尝试访问 Map 的成员作为该 UserTask 之后的网关中的转换守卫时。
我找到了以下文章:http ://forums.activiti.org/content/urgenterror-updated-another-transaction-concurrently这似乎与我的问题有某种关系。但是,我不清楚这是否是(不)想要的行为以及如何DelegateExecution
从 UserTask 访问 -Object。