В некоторых случаях при моделировании процесса с помощью камунды может возникнуть предварительное условие, которое должно быть выполнено. Если предварительное условие не выполняется, экземпляр процесса должен быть остановлен, возвращая событие ошибки.
Теперь проблема в том, что после запуска экземпляра процесса вы не можете вернуть сопоставленный код ошибки как исключение клиенту, который отправляет запрос, поскольку ошибка может быть вызвана только слушателем.
public void createEntity(SomeEntity e) {
repository.save(e);
// start a workflow with camunda
startWorkflow(e);
/*
* If the precondition fails, it would be nice to throw an
* exception here, indicating 400 (Bad Request)
*/
}
Если это невозможно, простым решением было бы исключить эту часть из рабочего процесса и запускать ее только в случае успешного выполнения предварительного условия. Но тогда вы не можете смоделировать процесс complete с помощью камунды, только его часть. Возвращение 204 (без содержимого) и извлечение результата экземпляра процесса во втором запросе также кажется мне неправильным.
Итак, можете ли вы дождаться завершения экземпляра процесса или хотя бы вернуть отображенный код ошибки клиенту в запросе?