【问题标题】:Create a StateMachineInterceptor to persist StateMachineContext创建一个 StateMachineInterceptor 来持久化 StateMachineContext
【发布时间】:2016-03-04 14:17:18
【问题描述】:

我正在努力按照可用的食谱和示例来坚持我的状态机。我正在使用主分支,我的状态机使用分层状态、区域和正交状态。我遵循的第一个示例是spring-statemachine-samples/persist,但它似乎只处理基本的 FSM。我尝试的第二个是LocalStateMachineInterceptor,但 id 似乎没有与 Hierarchical States 一起使用。另外,我找不到任何方法通过StateMachinePersist 保持历史状态。

是否有任何地方都具有持久性的复杂 FSM 示例?

【问题讨论】:

  • 等一下,关于历史状态的问题。当我为它创建一个#182 并开始对其进行处理时,我无法弄清楚如何真正持久地使用它。由于历史状态是瞬态和伪状态,因为它只是跟踪最后一个已知状态,因此您不能真正将机器重置为该状态,因为它的唯一工作是立即进入其最后一个已知状态。那么您介意详细说明持久化历史状态的含义吗?
  • 在恢复 FSM 后,如果当前状态中可用的转换之一具有 HISTORY 伪状态作为目标,触发此类事件应将 FSM 移动到先前状态。这是目前实现的(我认为)查看存储在 HistoryPseudoState 中的信息,这些信息在保存/恢复时会丢失
  • 好的,我认为这里还有一些工作要做,但我只是增强了关于持久历史的功能。您可以关注 #182 中的更改。很抱歉我原来的评论是你“持有错误”,你是对的:)谢谢!

标签: spring-statemachine


【解决方案1】:

老实说,当事情变得更加复杂时,对于示例和文档来说,持久性是一个相对未知的话题。这是我目前正在努力使它更容易的事情,因为作为用户你不应该关心,因为应该有一个相对干净的 API 来做这件事。所以请继续关注这些。

话虽如此,在我们得到更清晰的代码之前;

StateMachinePersist 导致StateMachineContext 并且在测试中有一些代码,即StateMachineResetTests,它显示了一些方法来做这些事情。还有一个问题gh127 在那里我写了一些关于重置机器的内部机制,这就是持久性的作用。

历史状态,是的,这是我的错,由于某种原因,它已经从我的雷达中滑落了。感谢您指出!为它创建了一个问题gh182

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2021-11-10
    • 2013-04-06
    • 2016-01-31
    相关资源
    最近更新 更多