弹簧状态机“动态叉”

时间:2018-02-16 16:22:07

标签: spring spring-statemachine

我正在尝试使用弹簧状态机建模业务流程。到目前为止,我一直非常成功,但我仍然试图模拟一个动态位,其中

  • 用户处于 A
  • 状态
  • 在该状态下,他可以为其他用户(小型状态机)创建一个简短(预定义)任务
  • 这些用户必须基本上执行状态机流程直到结束
  • 应该可以很容易地产生许多任务。
  • 一旦所有人创建的任务完成,用户将返回状态 A

这是我想要实现的图形表示。

Image of the desired state machien diagram

如果我将每个任务表示为状态机等等,我认为我可以这样做但我宁愿避免走这条路,因为它会使应用程序复杂化。理想情况下,我只有一个状态机配置。

在spring引用中我发现fork伪状态可能是我正在寻找的但是官方的repo只覆盖了一个静态配置(https://github.com/spring-projects/spring-statemachine/blob/master/docs/src/reference/asciidoc/sm-examples.adoc#statemachine-examples-tasks),其中每个任务都已经定义了(T1,T2, T3)。但是,对于我的应用程序需求,我希望能够(在运行时)添加“T4”。

从本质上讲,我想知道我的要求是否可以使用单个状态机满足,以及是否可以使用fork()满足我的需求。如果不是这样的话,我会欢迎任何可以推动我朝着正确方向前进的建议。

1 个答案:

答案 0 :(得分:0)

正如我周末评论的那样,如果你需要一个动态的"配置然后最简单的方法是使用"动态构建器接口"这与所有其他例子中的相同。它基本上被添加为能够在spring应用程序上下文之外使用SSM。任务配方使用此模型,因为它支持使用分层区域和子机器运行任务的DAG。

您不一定需要fork,就好像使用相同的初始状态输入并行区域一样。但是,您需要联接以等待并行区域加入其执行。

虽然这个方法提供了一些可以做些什么的背景知识,但我们希望在我们的路线图中有更好的东西,应该添加一种dsl语言,这样可以使这些自定义实现更容易制作。