Spring State Machine неверные переходы - PullRequest
0 голосов
/ 21 ноября 2018

Я только начал экспериментировать с библиотекой автомата Spring.У меня есть простой конечный автомат, который я пытаюсь смоделировать, однако я хочу получать уведомления всякий раз, когда я предоставляю событие, которое не является допустимым переходом для состояния, в котором находится компьютер в данный момент.

Например, еслимой конечный автомат разрешает переход только от A к B, если я получаю событие X, тогда я хотел бы получить уведомление, если состояние A, но событие Y получено, потому что это ошибка.

Я знаю, что это будетвозможно путем настройки переходов для всех возможных отрицательных состояний и обработки их там, но в идеале должен быть какой-то способ разрешить только те переходы, которые я явно определил, и предупредить меня, если что-то случится.Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

вы можете использовать слушатель состояния машины, чтобы поймать непринятое событие:

...    

@Override
public void configure(
    StateMachineConfigurationConfigurer
                            <States, Events> config) throws Exception {

    config.withConfiguration()
          .listener(listener()) 
          .autoStartup(true);
}

...

private StateMachineListener<States, Events> listener() {
        return new StateMachineListenerAdapter<States, Events>(){

                @Override
                public void eventNotAccepted(Message<Events> event) { 
                        log.error("event not accepted: {}", event);
                }
        };
}
0 голосов
/ 29 ноября 2018

Метод sendEvent на конечном компьютере возвращает логическое значение, означающее, что переход выполнен успешно.

boolean accepted = stateMachine.sendEvent("event");

В этом случае «принято» сообщит вам, если переход выполнен успешно.Если логическое значение возвращается как истинное, это означает, что переход произошел, если оно возвращается как ложное, это означает, что переход был недействительным и ничего не было сделано.

...