0

我有一个流动的工作流,我需要在某个阶段暂停,然后根据 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());

我通过休息检查了所有流程实例。但结果是空的。我在这里想念什么?暂停进程是否会使其终止?重新启动暂停/暂停工作流的方法是什么。

4

1 回答 1

0

您不能从该流程实例中的服务任务挂起流程实例。

您正在寻找的是此处详细解释的可触发服务任务。简而言之,可触发服务任务是一种触发一些外部工作的模式,这会导致服务任务处于等待状态,然后您可以在收到 JMS 主题时触发流程实例。然后,您的代表将需要实施TriggerableActivityBehavior.

于 2020-07-13T06:24:30.667 回答