【发布时间】:2020-07-09 09:42:11
【问题描述】:
我有一个流动的工作流,我需要在某个阶段暂停,然后根据 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());
从上面的方法调用。
我通过休息检查了所有流程实例。但结果是空的。我在这里想念什么?暂停进程是否会使其终止?重新启动暂停/暂停工作流的方法是什么。
【问题讨论】:
标签: spring-boot spring-jms bpmn flowable