Iやったすべてのエラー処理するために春ステートマシンエラーが機能していない取り扱い
@PostConstruct
public void addStateMachineInterceptor() {
stateMachine.getStateMachineAccessor().withRegion().addStateMachineInterceptor(interceptor);
stateMachine.getStateMachineAccessor().doWithRegion(errorinterceptor);
}
作成したインターセプタをエラー処理のためのセットアップ:
@Service
public class OrderStateMachineFunction<T> implements StateMachineFunction<StateMachineAccess<String, String>> {
@Override
public void apply(StateMachineAccess<String, String> stringStringStateMachineAccess) {
stringStringStateMachineAccess.addStateMachineInterceptor(
new StateMachineInterceptorAdapter<String, String>() {
@Override
public Exception stateMachineError(StateMachine<String, String> stateMachine,
Exception exception) {
// return null indicating handled error
return exception;
}
});
}
}
をしかし、私は、コールがOrderStateMachineFunctionに入る見ることができません、私たちがアクションから例外をスローするとき。
そして、そのステートマシンは、this.stateMachine.sendEvent(eventData);の後にpreStateChangeメソッドを呼び出すのを止めるように、いくつかの有線で動作します。アクションから例外をスローした後は、状態マシンが故障しているようです。いくつかのビットをしようとした後
@Service
public class OrderStateMachineInterceptor extends StateMachineInterceptorAdapter {
@Override
public void preStateChange(State newState, Message message, Transition transition, StateMachine stateMachine) {
System.out.println("Manish");
}
}
、私はresetStateMachineコメント場合、期待どおりに動作しますが、それなしで、私は、ステートマシンにcurrentStateのを通知することはできませんよということ見てきた:
public boolean fireEvent(Object data, String previousState, String event) {
Message<String> eventData = MessageBuilder.withPayload(event)
.setHeader(DATA_KEY, data)
.build();
this.stateMachine.stop();
// this.stateMachine
// .getStateMachineAccessor()
// .withRegion()
// .resetStateMachine(new DefaultStateMachineContext(previousState, event, eventData.getHeaders(), null));
this.stateMachine.start();
return this.stateMachine.sendEvent(eventData);
}
エラー処理は現在選択できません。https://github.com/spring-projects/spring-statemachine/issues/183を参照してください。少なくとも、私はそれを働かせることはできませんでした。 – Paul
この問題はhttps://github.com/spring-projects/spring-statemachine/issues/240で修正されているようです – krmanish007