我有简单的状态机,下面的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对提交submit事件
- 提交获准用于APPROVE事件
- 提交REJECTED对于REJ ECT事件
我已经设置WIP
为如下的初始状态:
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.WORK_IN_PROGRESS)
.states(EnumSet.allOf(States.class));
}
的多个用户将使用此状态机交互。当对于源和目标状态的组合多次引发同一事件时,只有第一个事件被状态机接受,后续事件不被接受。
这是来自状态机的有效行为吗?如果是,是否有任何额外的配置需要添加?
是否期待每个用户都拥有自己的状态机实例?如果你只有一个实例,那么你的行为是预期的。即您可以公开状态机工厂并从那里获取新实例或手动使用构建器类。如果您描述您的用例,我可以提供更多说明。 –
简而言之,用例是代理和审批者两个角色。代理商提交的文件很少,批准者可以批准或拒绝。这是一个Web应用程序,并且会有多个代理和审批者。代理商提交文档后,批准者可能需要几天才能批准或拒绝。那么在这种情况下,每个提交应该有一个状态机器? – Mithun