我有簡單的狀態機,下面的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