StateMachineInterceptor срабатывает на переходных состояниях

У меня есть переход от A -> X_choice, и X_choice перейдет к B или C. Я хотел бы иметь перехватчик, чтобы я мог регистрировать переходы от A -> B || C. Когда я пытаюсь подключиться к любому из возможных событий (preStateChanged и т. Д.), Я получаю переход только от A -> X_choice. Обратные вызовы не запускаются при переходе из X_choice -> B или X_choice. Есть ли способ для меня, чтобы легко сделать это?

@Override
public void configure(StateMachineStateConfigurer<States, Events> states) throws Exception {
    states.withStates()
            .initial(States.A)
            .junction(States.X_choice)
            .state(States.B)
            .state(States.C)
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions) throws Exception {
    transition
        .withExternal().source(States.A).target(States.X_choice).event(Events.E).and()
        .withJunction()
                .source(States.X_choice)
                .first(States.B, guard())
                .last(States.C).and()

И у меня есть StateMachinerInteceptor, определенный следующим образом:

    private class PersistingStateChangeInterceptor extends StateMachineInterceptorAdapter<States, Events> {
    @Override
    public void preStateChange(State<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> state, Message<AppCfgBreatheAgain.Events> message, Transition<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> transition, StateMachine<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> stateMachine) {
        transition.getSource(); //A
        transition.getTarget(); //X_Choice 
    }

Что я хочу это:

transition.getSource(); //A
transition.getTarget(); //B

Или в качестве альтернативы два обратных вызова, один из которых идет от A -> X_choice, а другой от X_choice -> B. Возможно ли это? Мне это нужно, так как я использую рецепт Persist, а persist фактически сохраняет состояние Choice вместо фактического состояния терминала.

1 ответ

Решение

Разработчик решил эту проблему в этом связанном билете github:

https://github.com/spring-projects/spring-statemachine/issues/266

Другие вопросы по тегам