Для исключений переходов , есть перегрузка для метода действий, доступного в TransitionConfigurer
action(Action<S,E> action, Action<S,E> error)
Это означает, что вы можете указать и дополнительное действие длясрабатывать, если во время перехода возникло исключение.Исключение доступно из StateContext
, переданного действию.
Когда ваше действие по ошибке запускается, вы можете получить исключение с помощью:
context.getException();
Внутри действия по ошибке, которое вы можете выполнитьпара вещей для обработки исключения:
- ведение журнала исключения и контекст
- переход в какое-либо состояние ошибки
- очистка контекста и переход кто же самое состояние и попытайтесь выполнить некоторую логику повторных попыток
- добавить дополнительную информацию в контекст и вернуть контекст вызывающей стороне
Например:
context.getVariables().put("hasError", true);
context.getVariables().put("error", ex);
А в вашем сервисе (звонящем) вы обрабатываете исключение так, как вам нравится, например:
public void executeMyLogic() {
stateMachine.start()
stateMachine.sendEvent(Event.E1);
if (stateMachine.getExtendedState().getVariables().containsKey("hasError") {
throw (RuntimeException)stateMachine.getExtendedState().getVariables().get("error")
}
}