camunda bpnm spring boot activity сопоставление делегатов не работает

Я загрузил образец для весенней оркестровки микросервисов с GITHUB

он работает так, как указано в описании, но теперь я пытаюсь создать свой собственный рабочий процесс и не могу сопоставить, как поток вызовов (код выполняется) от одного действия к другому.

В руководстве bpnm имя первого действия отображается как < strong> Получить корзину, а второй - как Подтвердить адрес, но когда я запускаю рабочий процесс с помощью вызова rest из приведенного ниже кода

public class ShoppingCartRestController {

    @Autowired
    private ProcessEngine camunda;

    @RequestMapping(value = "/{scId}/submit", method = RequestMethod.POST)
    public ResponseEntity<?> placeOrderPOST(@PathVariable("scId") String scId) {
        ProcessContext context = new ProcessContext();
        submitShoppingCart(scId, context);
        if (context.getError() != null) {
            return new ResponseEntity<>(context.getError(), HttpStatus.FORBIDDEN);
        }
        return new ResponseEntity<>(context.getResponse(), HttpStatus.OK);

    }

    private ProcessInstance submitShoppingCart(String scId, ProcessContext context) {
        return camunda.getRuntimeService().startProcessInstanceByKey(//
                "submitShoppingCart", //
                Variables //
                        .putValue(ProcessConstants.VAR_SC_ID, scId).putValue(ProcessConstants.VAR_CTX, context));
    }
}

из приведенного выше я не могу понять, как он делегирует получение адреса и, в свою очередь, делегирует проверку адреса и так далее, чтобы завершить поток?

И как процесс связан с submitShoppingCart.bpmn (Имя в этом и Фактическом классах не совпадает?


person kcoder    schedule 03.11.2019    source источник


Ответы (1)


Сначала вопрос 2: java api и процесс совпадают через технический идентификатор процесса. вы видите это в вызове "startProcessInstanceByKey": submitShoppingCart - это технический идентификатор процесса. В Modeller вы найдете его в самом верху панели свойств.  введите описание изображения здесь

Вопрос 1. Java API camunda связывает задачи службы с выполнением через интерфейсы JavaDelegate. Итак, для каждой служебной задачи существует класс, который реализует то, что должно происходить в его execute(DelegateExecution execution) методе.

В весенних проектах эти делегаты обычно упоминаются по именам их bean-компонентов ... в вашем примере служба «Получить карту покупок» поддерживается делегатом ${retrieveShoppingCartActivity}. По соглашению, имя bean-компонента совпадает с именем класса, поэтому ищите RetrieveShoppingCartActivity, чтобы увидеть, что внутри.

person Jan Galinski    schedule 04.11.2019
comment
спасибо за ответ .. Есть ли способ перезапустить рабочий процесс после сбоя? в моем случае, если это не удалось при оплате государственного резерва. Я хочу перезапустить рабочий процесс или отправить из этого состояния с самого начала - person kcoder; 10.11.2019
comment
Это зависит ... Если ваши служебные задачи не отмечены с помощью exec async, сбой приведет к откату транзакции ... что приведет к полному откату экземпляра процесса, и, следовательно, у вас нет шансов на перезапуск. Если у вас есть асинхронное выполнение (ранее асинхронное), вы увидите инцидент в кабине и можете сбросить счетчик повторных попыток, чтобы повторить попытку. См. Этот связанный вопрос: stackoverflow.com/questions/58673552/ - person Jan Galinski; 11.11.2019