Spring Statemachine StateMachineBuilder构建一个具有null状态的状态机

时间:2015-08-04 14:26:53

标签: java spring state-machine

由于我必须支持对状态机的并发访问,因此我不能使用通常的Autowired单例方法。相反,我正在尝试按照文档中的描述构建状态机,这里:

http://docs.spring.io/spring-statemachine/docs/1.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#state-machine-via-builder

这是我非常适度的代码:

    Builder<SessionState, SessionEvent> builder = StateMachineBuilder.builder();
    builder.configureStates().withStates().initial(SessionState.INITIAL).states(EnumSet.allOf(SessionState.class));
    StateMachine<SessionState, SessionEvent> stateMachine = builder.build();
    stateMachine.start();
    System.out.println(stateMachine.getState());  // null !!!

这会立即失败,因为机器的状态出乎意料地为空,而我期望SessionState.INITIAL。

我在这里做错了什么?

我还尝试了文档中显示的代码,即:

    Builder<String, String> builder = StateMachineBuilder.builder();
    builder.configureStates().withStates().initial("SI").end("SF").states(new HashSet<String>(Arrays.asList("S1", "S2", "S3", "S4")));
    final StateMachine<String, String> stateMachine = builder.build();
    stateMachine.start();
    System.out.println(stateMachine.getState());

....同样的结果。

1 个答案:

答案 0 :(得分:1)

这个例子是一个非常简化的想法。您需要配置配置的转换,使其不是格式错误。您需要使用builder.configureTransitions(),它返回与基于注释的配置模型相同的配置界面。检查http://docs.spring.io/spring-statemachine/docs/1.0.0.M3/reference/htmlsingle/#configuring-transitions如何做。

我的待办事项列表中添加了一个配置验证程序,以便在配置错误或不完整时构建计算机时快速失败。

测试https://github.com/spring-projects/spring-statemachine/blob/master/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java

中的一些示例