Spring StateMachine我如何知道传输是否因保护或操作失败而被拒绝



我有与下面主题中相同的问题,但我不太确定我的方法是否错误。

我怎么知道警卫是否拒绝了瞬态

我的应用程序是一个线性的逐步战略棋盘游戏,有几个不同的游戏设置。我决定使用Spring StateMachine来解决问题,因为在我看来(到目前为止(它解决了很多与代码相关的组织问题。但现在我已经堆叠了

我遇到的问题是,我不能说我的活动是否通过了所有的警卫,是否发生了过渡。当一个事件被添加到队列时,我只得到了true标志

我所遵循的方法是通过event-context传递数据,使用保护程序验证数据,并使用操作应用更改

transitions
.withExternal().source(SPEECHES).target(VOTING).event(VOTING_EVENT)
.guard(Guard.and(
guards.get(NoVotesFromSuspectedGuard.QUALIFIER),
guards.get(NoSelfVotingGuard.QUALIFIER),
guards.get(NoDeadParticipantsVotingGuard.QUALIFIER),
guards.get(NoVotingForDeadParticipantsGuard.QUALIFIER),
votingOutOfParticipantListGuardFactory.get(NUMBER_OF_PLAYERS),
guards.get(VotingBasedOnPreviousOneGuard.QUALIFIER)
))
.action(actions.get(CalculateVotingAction.QUALIFIER))

据我现在所知,不可能通知event-supplier防护评估失败。如果是,请告诉我,我将切换到另一个SM实现。但是如果有任何可能解决我的问题,请帮助我

我期望的行为是失败防护的任何元信息(构建格式化的错误消息(

您可以使用一些上下文标志,例如context.put("NoVotesFromSuspectedGuard", false),当"NoVotesFromSuspectedGuard";不是success,然后可以在调用代码context.getExternalVariables().get("NoVotesFromSuspectedGuard", Boolean.class)中检查此变量。此外,在Spring State Machine中,您可以声明ActionListener bean,它包含一些不同的StateMachine事件监视方法。

有关更多信息,您可以查看Habr(俄罗斯(

相关内容

  • 没有找到相关文章

最新更新