我有与下面主题中相同的问题,但我不太确定我的方法是否错误。
我怎么知道警卫是否拒绝了瞬态
我的应用程序是一个线性的逐步战略棋盘游戏,有几个不同的游戏设置。我决定使用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(俄罗斯(