2017-01-03 6 views

答えて

0

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") 
    ; 
} 
+0

そうそう、それが右について見えます。この質問は昨日の夕方に気づき、あなたのマシン設定が(元の質問のために)何だったかを尋ねるところでした。元々、あなたが "擬似エンドステート構成"をしていると言ったとき、実際にはそれを持っていなかったのでしょうか? –

+0

私は終わりの状態だったと思っていましたが、設定が間違っていました。 は( "FAILED") .END(ヌル)、 "FAILED"(失敗)が動作しないように見えたこと 状態 .withStates()( "WAITING") .initial .state:私はこれをしませんでした。状態は、状態としてリストされる前に終了状態として宣言されなければならなかった。 –

+0

したがって、状態がstate()メソッドで宣言されているか、またはend()のような疑似状態のいずれかで宣言されているかのどちらかであると思われます。少なくとも最初の宣言だけが有効です。私はそれをドキュメントから読み取ることができませんでした。 –

関連する問題