0
私は疑似エンドステートを設定した状態設定を持っています。私は状態マシンがその状態に達すると完了すると思っていましたが、私はそれについて通知を受ける方法がありません。State Machine Completionについての通知方法を教えてください。
StateMachineListenerを登録しましたが、ステートマシンの完了を通知されません。
私は疑似エンドステートを設定した状態設定を持っています。私は状態マシンがその状態に達すると完了すると思っていましたが、私はそれについて通知を受ける方法がありません。State Machine Completionについての通知方法を教えてください。
StateMachineListenerを登録しましたが、ステートマシンの完了を通知されません。
Ok - 私はついに見つけました。
ステートマシンを停止するには、疑似ステート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")
;
}
そうそう、それが右について見えます。この質問は昨日の夕方に気づき、あなたのマシン設定が(元の質問のために)何だったかを尋ねるところでした。元々、あなたが "擬似エンドステート構成"をしていると言ったとき、実際にはそれを持っていなかったのでしょうか? –
私は終わりの状態だったと思っていましたが、設定が間違っていました。 は( "FAILED") .END(ヌル)、 "FAILED"(失敗)が動作しないように見えたこと 状態 .withStates()( "WAITING") .initial .state:私はこれをしませんでした。状態は、状態としてリストされる前に終了状態として宣言されなければならなかった。 –
したがって、状態がstate()メソッドで宣言されているか、またはend()のような疑似状態のいずれかで宣言されているかのどちらかであると思われます。少なくとも最初の宣言だけが有効です。私はそれをドキュメントから読み取ることができませんでした。 –