ステートマシンビルダーを使用してアプリケーションにステートマシンを構築しています。 また、アプリケーションには、org.springframework.statemachine.action.Actionを実装するActionクラスがあります。 これらのActionクラスは、各ステージの入力アクションを実行するためのクラスです。 これらのActionクラス、つまりexecute(StateContext paramStateContext)メソッドから例外がスローされた場合、エラーの詳細をdbに更新した後、その例外を捕捉してイベント(Terminated)を送信してステートマシンを終了状態にします。 stateMachineError(StateMachine stateMachine、Exception e)メソッドをオーバーライドして状態マシンリスナを使用しようとしました。しかし、残念ながら、これは動作していません。 他のスプリングステートマシンコンポーネントが例外をキャッチする前に、tryクラスでアクションクラスのコード全体をラップする前に、そしてステートマシンが終了状態をナビゲートするようにTerminatedイベントを送信するcatchブロック内に移動します。 ここではIamを使用してビルダーです。スプリングステートマシンのエントリアクションクラスからのコード/コンフィグレーションエラーの処理
0
A
答えて
0
は、あなたが正しいなら、スプリング・ステートマシン・コア、どちらもstateMachineError
または@onStateMachineError
で注釈が付け方法の1.1.0.RELEASEバージョンを使用して
private StateMachineListener<String, String> listener() {
return new StateMachineListenerAdapter<String, String>() {
@Override
public void stateChanged(
org.springframework.statemachine.state.State<String, String> from,
org.springframework.statemachine.state.State<String, String> to) {
LOGGER.debug("State change to " + to.getId());
}
@Override
public void stateMachineError(
StateMachine<String, String> stateMachine, Exception e) {
e.printStackTrace();
LOGGER.debug("Ah... I am not getting executed when exception occurs from entry actions");
LOGGER.debug("Error occured from " + stateMachine.getState()
+ "and the error is" + e.toString());
}
};
}
Iamは
Builder<String, String> builder = StateMachineBuilder
.<String, String> builder();
builder.configureConfiguration()
.withConfiguration()
.autoStartup(false)
.listener(listener())
.beanFactory(
this.applicationContext.getAutowireCapableBeanFactory());
はエラーで実行されています。これは、現在のマイルストーン1にあるバージョン1.2で取り上げられています。彼らは、ステートマシンのコンテキストで実行され
errorAction
を導入しました:
ユーザーは常に手動で例外をキャッチすることができますが、遷移のために定義されたアクションと、例外が発生した場合に呼び出されるエラー・アクションを定義することが可能です。そのアクションに渡されたStateContextから例外が利用できます。
ステートマシンコンフィグレーションクラスでトランジションを定義するときに、エラーアクションと目的のアクションを指定するだけです。 example in the documentationから:
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.S1)
.target(States.S2)
.event(Events.E1)
.action(action(), errorAction());
}
本の詳細な議論は、春ステートマシンissue #240で見つけることができます。
関連する問題
- 1. データベースからスプリングステートマシンを導出する
- 2. キャレットパッケージからの前処理
- 3. Thunderbirdからのドラッグドロップ処理
- 4. ステートレスEJB Beanからの例外処理とリダイレクトページの処理
- 5. メッセージバスとしてのスプリングステートマシン
- 6. 別のサイトからのクッキーの処理
- 7. 他のプロセスからのマウスイベントの処理
- 8. 処理ポストリクエストスラックから
- 9. 外部サーバーからのリダイレクトの処理
- 10. クエリからのデータの処理
- 11. APIからのXML出力の処理
- 12. Google Checkoutからの返品の処理
- 13. javascript関数からのフォームデータの処理
- 14. NSPersistentDocumentからのコマンドライン引数の処理
- 15. Silverlightからのブラウザキーボード処理のオーバーライド(IE7)
- 16. サーバーからのヌル応答の処理
- 17. スプリングステートマシン - 再利用サブマシン
- 18. 基本フォームからの処理依頼
- 19. ストリームからの高速パケット処理
- 20. PHPからのAJAXエラー処理
- 21. promise.eachから未処理の拒否
- 22. 例外処理フィルタからのリダイレクト
- 23. Powershellスクリプトからの文字列処理
- 24. マイクロホンからのOpenALリアルタイムオーディオ処理
- 25. 未処理のSQLからlaravelクエリ
- 26. Laravel 5.3 abort()からのエラー処理
- 27. 未処理クエリからのlaravelクエリビルダ
- 28. 処理からarduinoへのデータ送信
- 29. WPFのWinformsコンポーネントから未処理の例外を処理する
- 30. 複数のrabbitmqキューからのSparkストリーミング処理を並列に処理する
助けてください – user2330825