У меня есть непрерывный рабочий процесс, который мне нужно приостановить на определенном этапе. Затем перезапустите тот же рабочий процесс из прослушивателя JMS на основе сообщения jms.
Здесь я написал делегата для приостановки процесса и сохраните processId вместе с другим идентификатором с именем PkgId.
@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 Listener, прослушивает Tibco topi c с именем «test.topic». Этот метод получает сообщение от tibco topi c, которое содержит PkgId. Запрашивая репо с помощью PkgId, я могу найти соответствующий идентификатор экземпляра процесса, который был сохранен в ранее объясненном делегате. Я пытаюсь активировать приостановленный процесс впоследствии с идентификатором экземпляра процесса
@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());
вызывается из вышеуказанного метода.
I проверил все экземпляры процесса через rest. Но результат был пуст. Что мне здесь не хватает? Прекращает ли процесс приостановку? Как можно перезапустить приостановленный / приостановленный рабочий процесс.