問題タブ [spring-statemachine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-statemachine - ステート マシンの起動中にエラーが発生しました
statemachine.start()
Iamを呼び出している間、常に以下のスタック トレースを取得します。ただし、状態遷移、状態エントリなどに注釈を使用していないため、ステート マシンの実行は停止しません。このエラーの修正を手伝ってください。
spring - Spring ステート マシンの timerOnce() 遷移が終了アクションを中断する
次のステートマシンがあります。
問題は、timerAction()
トリガーされた場合、アクションinformPlayers()
が中断されることです。ガードが true を返しinformPlayers()
たときに状態が遷移する場合は正しく呼び出されるため、遷移の方法に問題があります。スタックトレース :bothPlayersConfirmed()
timerOnce()
spring-statemachine - スプリング ステート マシンのエントリ アクション クラスからのコード/構成エラーの処理
ステート マシン ビルダーを使用して、アプリでステート マシンを構築しています。また、アプリケーションには、org.springframework.statemachine.action.Action を実装する Action クラスがあります。これらの Action クラスは、各ステージのエントリ アクションを実行するためのものです。これらの Action クラス、つまり execute(StateContext paramStateContext) メソッドから例外がスローされた場合、エラーの詳細でデータベースを更新した後、その例外をキャッチしてイベント (Terminated) を送信し、ステート マシンを End 状態にする必要がありました。stateMachineError(StateMachine stateMachine, Exception e) メソッドをオーバーライドして、ステート マシン リスナーを使用しようとしました。しかし、残念ながらこれは機能していません。例外をキャッチするためのその他のスプリング ステート マシン コンポーネント。ステート マシンが End 状態をナビゲートするように Terminated イベントを送信する catch ブロック内。これが私が使用しているビルダーです。
spring-statemachine-core の 1.1.0.RELEASE バージョンを使用しています
spring-statemachine - 特定の州で利用可能なイベントを表示しますか?
オブジェクトの状態に応じて UI ボタン (アクション) をレンダリングする方法を見つけようとしています。ステート マシンに「特定の状態に適用可能なイベントを表示してください」と尋ねる方法はありますか? 構成例:
spring-statemachine - アクションに基づいて 2 つの可能な状態のいずれかに変化するスプリング ステート マシン
非常に単純なシナリオで SSM を構成するのに問題があります。
犯人は、 log_onイベントが発生したときに発生する必要がある「検証」アクションです。SSM のドキュメントを読み直しましたが、これが「フォーク」、「ガード」、または階層構成のいずれであるかがわかりません。
「アクション」はここで実行されます。
テストで「カウンター」を使用して、フローを「失敗」(logged_off状態のまま)または「成功」(状態がlogged_onに変化)のいずれかに誘導しています。
構成は次のとおりです。
これは失敗したテストです(アクションがlogon_failイベントを発生させたときに「logged_off」を期待しています):
spring-statemachine - ステート マシンを別のデータ セットでリロードして再起動する正しい方法
同じ db テーブルからさまざまなレコードを提供するために同じ SM が必要です (各レコードごとに SM を作成できません)。これは、別のレコードからの新しい状態で SM を再初期化する適切な方法ですか、それともより良いアプローチをアドバイスしてもらえますか?
ありがとう !
PS: 1.1.0 でインターフェイスの永続化と復元を認識していますが、列挙型を使用している間、SMContext の永続化は文字列ステート マシンに対してのみ機能します。
java - ライブラリで提供されるSpringステートマシンの実装に依存する遷移ガードを実現するにはどうすればよいですか?
さまざまな実装のベースとして、ライブラリ内の基本的なプログラム状態を持つ Spring ステートマシンを提供します。基本的なステートマシンを使用して現在の実装に応じてカスタム遷移アクションを追加することは、提供されている遷移注釈により簡単に思えます。
ここで、ガードで同様のことを行いたいと考えています。つまり、基本的な statemachine を使用して、実装内の最近の使用シナリオに応じて遷移ガードを提供します。
1 つのアイデアは、デコレータ パターンを実装する基本ステートマシン内にデフォルト ガードを設定することです。つまり、別のガードをラップするガード インターフェースを実装するラッパーです。デフォルトのガード ラップとして、evaluate メソッドに対して常に true を返す単純なガード実装が使用されます。
コードスニペットは次のようになります...最初にガード:
statemachine 設定ツールで GuardDecorator を使用するようになりました (抜粋のみ):
私の質問は今:
- ドキュメントで何かを見逃していましたか?これを行うための組み込みの方法はありますか?
- ライブラリ内で提供される基本的なステートマシンの実装依存ガードを取得する他のソリューションはありますか?
spring-statemachine - Spring Statemachine - UML から階層的なステート マシンを構築する
短い: Papyrus で階層型 (ネストされた) ステートマシン UML ダイアグラムを作成し、それを使用して動作するステートマシン インスタンスを構築することは可能ですか?
説明:
ドキュメントのように、ネストされた状態のない単純な例は正しく機能しています。
ネストされた状態を作成するには、次の 2 つの方法を試しました。
- メインマシンで状態を作成し、別のサブマシンをそれにリンクします (プロパティ -> サブマシン)
- 単一のステート マシンですべてを作成し、サブステートでステートを作成する
どちらの場合も、作成された Spring ステートマシンはサブマシンの状態を認識しません。
このコードを使用して、アプリケーション内のすべての状態を一覧表示すると:
では、INITIALIZATION と PROCESSING の 2 つの状態のみがリストされています。イベントを送信すると、マシンは [PROCESSING, PREPARATION] ではなく、INITIALIZATION から PROCESSING に入ります。
何か間違ったことをしていますか、それとも Spring Statemachine によって実装されていないことをしようとしていますか? つまり、UML ダイアグラムから単一レベルのステート マシンしか作成できないのでしょうか?
編集:
この質問を読んで、spring-statemachine にこのオプションがあることを保証してくれた Janne Valkealahti に感謝します。
結局のところ、それは私のせいだったようですが、どこでどのように行われたかはわかりません(いくつかの同様の図が作成/編集されましたが、成功しませんでした)。昨日発生した Fedora 24 での Papyrus / Eclipse の警告とエラーに関連している可能性があります。今日、ゼロから新しい図を作成した後、すべてが期待どおりに機能しています。これは、ステート マシンがすべてのステートとサブステートをリストする新しい作業図です。