我有一个流动的工作流,我需要在某个阶段暂停,然后根据 jms 消息从 JMS 侦听器重新启动相同的工作流。
在这里,我编写了一个委托来暂停进程并将 processId 与另一个名为 PkgId 的 ID 一起保存。
@Slf4j
@Component
public class ValidationDelegate extends AbstractBaseUtil {
protected Expression restEndPoint;
@Autowired
private ProcessInstancePkgIdMapRepository repo;
@Override
public void executeInternal(DelegateExecution delegateExecution) {
RuntimeService runtimeService = CommandContextUtil.getProcessEngineConfiguration().getRuntimeService();
runtimeService.suspendProcessInstanceById(delegateExecution.getProcessInstanceId());
ProcessInstancePkgMap pkgMap= new ProcessInstancePkgMap ();
pkgMap.setPkgId(1235L);
pkgMap.setProcessInstanceId(delegateExecution.getProcessInstanceId());
ProcessInstancePkgMap map = repo.save(pkgMap);
log.info("saved map {}", map);
}
}
然后在具有作为 JMS 侦听器的方法的独立类上,侦听名为“test.topic”的 Tibco 主题。此方法接收来自 tibco 主题的消息,其中包含 PkgId。通过使用 PkgId 查询 repo,我可以找到保存在前面解释的委托中的相关流程实例 ID。之后我试图从流程实例 ID 激活暂停的流程
@Component
public class JMSListener {
@Autowired
private RuntimeService runtimeService;
@Autowired
private ProcessInstancePkgIdMapRepository repo;
@JmsListener(destination = "test.topic", containerFactory = "jmsListenerContainerFactory")
public void receiveMessage(TextMessage message) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
ValidationMessage validationMessage = objectMapper.readValue(message.getText(), ValidationMessage.class);
ProcessInstancePkgIdMap idMap =
repo.findByPkgId(validationMessage.getPkgId());
runtimeService.activateProcessInstanceById(idMap.getProcessInstanceId());
}
}
但是当从上述方法调用org.flowable.common.engine.api.FlowableObjectNotFoundException: Cannot find processInstance for id ‘e84d407a-c043-11ea-b877-0a0027000002’.
时
得到一个异常
。runtimeService.activateProcessInstanceById(idMap.getProcessInstanceId());
我通过休息检查了所有流程实例。但结果是空的。我在这里想念什么?暂停进程是否会使其终止?重新启动暂停/暂停工作流的方法是什么。