ステート マシン ビルダーを使用して、アプリでステート マシンを構築しています。また、アプリケーションには、org.springframework.statemachine.action.Action を実装する Action クラスがあります。これらの Action クラスは、各ステージのエントリ アクションを実行するためのものです。これらの Action クラス、つまり execute(StateContext paramStateContext) メソッドから例外がスローされた場合、エラーの詳細でデータベースを更新した後、その例外をキャッチしてイベント (Terminated) を送信し、ステート マシンを End 状態にする必要がありました。stateMachineError(StateMachine stateMachine, Exception e) メソッドをオーバーライドして、ステート マシン リスナーを使用しようとしました。しかし、残念ながらこれは機能していません。例外をキャッチするためのその他のスプリング ステート マシン コンポーネント。ステート マシンが End 状態をナビゲートするように Terminated イベントを送信する catch ブロック内。これが私が使用しているビルダーです。
Builder<String, String> builder = StateMachineBuilder
.<String, String> builder();
builder.configureConfiguration()
.withConfiguration()
.autoStartup(false)
.listener(listener())
.beanFactory(
this.applicationContext.getAutowireCapableBeanFactory());
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());
}
};
}
spring-statemachine-core の 1.1.0.RELEASE バージョンを使用しています