我对重置状态机有疑问。 构造
protected StateMachine<ProfilingState, ProfilingEvent> buildStateMachine(
StateMachineBuilder.Builder<SomeState, SomeEvent> builder) throws Exception {
builder.configureStates()
.withStates()
.initial(SomeState.State1)
.states(EnumSet.allOf(SomeState.class));
builder.configureTransitions()
.withExternal()
.source(SomeState.Step1)
.target(SomeState.Step2)
.event(SomeEvent.Event1)
.action(step1Action())
.and()
.withExternal()
.source(SomeState.Step2)
.target(SomeState.Step3)
.event(SomeEvent.Event2)
.action(step2Action())
.and();
return builder.build();
}
我有api用于持久/恢复状态机。在恢复期间,我将重置状态机设置为先前的持久状态。
stateMachine
.getStateMachineAccessor()
.doWithAllRegions(access -> {
access.resetStateMachine(
new DefaultStateMachineContext(currentState, null, null, extendedState));
});
stateMachine.start();
我希望我可以在jvm崩溃后重置状态机,并从我上一次持久状态继续。 例如,最后一个持久化状态是Step2。让我们假设Step2的动作是一个长循环。让我们假设发生了Jvm崩溃,有些人正在处理这个循环。在应用程序启动期间,应用程序识别出存在未完成的流。 所以目标是从最后一个持久状态继续。这意味着在将状态机重置为State2之后,我希望触发step2Action并继续处理,因为Step2还没有完成。 不幸的是,在我将状态机重置为State2之后,没有调用step2Action。 是否可以针对此案例触发此操作?
答案 0 :(得分:0)
不,不是step2Action
动作附加到转换,重置不会导致状态的任何条目。
随意在github上创建增强请求,因为在考虑重置后可能发生的情况时,可能会执行状态操作。我们永远不会执行输入操作,因为在重置期间没有输入状态,但正如我所说,执行状态执行操作可能是有意义的。