我有简单的状态机,下面有States
,Events
和Transitions
.
状态:WIP, SUBMITTED, REJECTED, APPROVED
事件:SUBMIT, APPROVE, REJECT
过渡:
@Override
public void configure(StateMachineTransitionConfigurer<States,Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.WIP)
.target(States.SUBMIT)
.event(Events.SUBMIT)
.and()
.withExternal()
.source(States.SUBMITTED)
.target(States.APPROVED)
.event(Events.APPROVE)
.and()
.withExternal()
.source(States.SUBMITTED)
.target(States.REJECTED)
.event(Events.REJECT);;
}
- 提交事件的 WIP 到 SUBMITTED
- 提交给批准事件
- 提交到 REJECTED 的 REJECT 事件
我已将WIP
初始状态设置为如下:
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.WORK_IN_PROGRESS)
.states(EnumSet.allOf(States.class));
}
多个用户将与此状态机交互。当针对源状态和目标状态的组合多次引发相同事件时,状态机仅接受第一个事件,不接受后续事件。
这是状态机的有效行为吗?如果是,我需要添加任何额外的配置吗?