0

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

または、代わりに 2 つのコールバック、1 つは A -> X_choice から、もう 1 つは X_choice -> B. これは実行可能ですか? 私は Persist レシピを使用しているため、これが必要であり、永続化は実際の端末状態ではなく Choice 状態を実際に永続化しています。

4

1 に答える 1