由于我必须支持对状态机的并发访问,因此我不能使用通常的Autowired单例方法。相反,我正在尝试按照文档中的描述构建状态机,这里:
这是我非常适度的代码:
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());
....同样的结果。
答案 0 :(得分:1)
这个例子是一个非常简化的想法。您需要配置配置的转换,使其不是格式错误。您需要使用builder.configureTransitions(),它返回与基于注释的配置模型相同的配置界面。检查http://docs.spring.io/spring-statemachine/docs/1.0.0.M3/reference/htmlsingle/#configuring-transitions如何做。
我的待办事项列表中添加了一个配置验证程序,以便在配置错误或不完整时构建计算机时快速失败。
中的一些示例