0
我有一个配置了伪状态的状态配置。我预计状态机将在达到该状态时完成,但我错过了一个获得通知的方法。如何获得有关状态机完成的通知?
我注册了一个StateMachineListener,但它没有得到有关完成状态机的通知。
我有一个配置了伪状态的状态配置。我预计状态机将在达到该状态时完成,但我错过了一个获得通知的方法。如何获得有关状态机完成的通知?
我注册了一个StateMachineListener,但它没有得到有关完成状态机的通知。
好的 - 我终于找到了。
要使状态机停止,必须定义一个带有伪状态END的状态。达到此状态时,将通知StateMachineListener机器已停止。
下面是我使用的弹簧配置的轮廓。一些细节已被忽略。
@Override
public void configure(StateMachineStateConfigurer<String, String> states) throws Exception {
states
.withStates()
.initial("WAITING")
.state("FAILED", fail(), null)
.state("SUCCESS", success(), null)
.end("COMPLETED")
;
}
在过渡配置,你这样做:
@Override
public void configure(StateMachineTransitionConfigurer<String, String> transitions) throws Exception {
transitions
.withExternal().source("FAILED").target("COMPLETED")
.and().withExternal().source("SUCCESS").target("COMPLETED")
;
}
噢,这看起来是正确的。昨天晚上注意到了这个问题,并且正要问你的机器配置是什么(原始问题)。当你最初说你有“伪状态配置”时,你是否真的没有这种情况? –
我以为我有一个结束状态,但它是错误配置。我这样做: 状态 .withStates() .initial( “等待”) .STATE( “失败”,失败(),null)的 .END( “失败”) 这似乎不工作。在被列为国家之前,该国必须被宣布为最终国家。 –
所以看起来像是状态是用state()方法声明的,或者是像end()这样的伪状态之一声明的,而不是两者。至少只有第一个声明有效。我无法从文档中读出它。 –