我试图理解,状态转换期间动作可能引发异常。我已经配置了这个简单的状态机:
transitions
.withExternal()
.source(State.A1)
.target(State.A2)
.event(Event.E1)
.action(executeAnActionThrowingAnException())
在服务类中,我注入了状态机并发送此事件E1:
@Service
public class MyService() {
@Autowired
private StateMachine<State, Event> stateMachine;
public void executeMyLogic() {
stateMachine.start()
stateMachine.sendEvent(Event.E1);
// how to get thrown exception here
}
}
在服务中,我只想知道状态机是否以及为什么无法到达State.A2。因为Spring状态机获取了抛出的异常,所以发送事件后我无法获得任何响应。但是状态机没有任何错误,这意味着
stateMachine.hasStateMachineError()
将返回false。因此,如何获取服务中的信息,发现出了问题,更重要的是出了什么问题?
我请你帮忙。
最诚挚的问候
答案 0 :(得分:0)
对于transitions exceptions,TransitionConfigurer
assistant.Tasks.RemoveAll();
这意味着,如果在过渡期间引发异常,则可以指定和触发其他操作。可以从传递给操作的action(Action<S,E> action, Action<S,E> error)
中获得该异常。
触发错误操作后,可以使用以下方法检索异常:
StateContext
在错误操作中,您可以做一些事情来处理异常:
例如:
context.getException();
在服务(调用方)中,您可以根据需要处理异常,例如:
context.getVariables().put("hasError", true);
context.getVariables().put("error", ex);