StateMachineInterceptor在瞬态状态

时间:2016-10-28 03:31:24

标签: spring spring-statemachine

我有从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 - &gt; X_choice和X_choice中的一个 - &gt; B.这可行吗?我需要这个,因为我正在使用Persist配方,而持久化实际上是持久的Choice状态而不是实际的终端状态。

1 个答案:

答案 0 :(得分:0)

开发人员在此相关github票证中解决了此问题:

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