【问题标题】:is this a use case of state machine? if so which open source do you suggest?这是状态机的用例吗?如果是这样,您建议使用哪个开源?
【发布时间】:2010-12-11 18:04:16
【问题描述】:

我的应用需要从多个来源提取数据。以下需要用户自定义

  1. 数据源的顺序
  2. 在订单中,条件(如果有的话)决定是使用数据源还是跳过它

一旦用户定义了上述两个,应用程序将为他的“编排”分配一个名称,他随后将使用该名称来提取数据。

我想要一些关于

的指导
  1. 我是否更适合编写自己的代码来处理订单和条件,或者这是一个状态机用例
  2. 如果是状态机用例,那么哪个是提供这种支持的更好的开源项目
  3. 有状态机规范吗? SCXML?
  4. 哪些是状态机的最佳开源实现?标准(按此顺序):基于标准、易于调试、易于嵌入、正在积极开发、支持状态机的运行时创建

用例:这是一个多租户应用。每个客户都将设计自己的编曲并将其保存到数据库中。我们称之为登机客户。客户登机后,他的所有请求都将使用他之前保存的命令。

现在让我们假设有 3 个数据源 A、B 和 C。可能的编排很少是

  • 管弦乐 1:拉 A、拉 B 和 然后按该顺序拉 C
  • Orchestion 2:拉 A,如果 A 返回错误,则拉 B,拉 B(基本上是(A 或 C)和 B)
  • Crchestrion 3:拉 A、B 和 C。顺序无关紧要。都需要拉(可能是并行的)

【问题讨论】:

  • 如果没有数据是什么,什么样的条件,做了什么工作,这是无法判断的。几乎任何程序都可以看作是一个状态机。把它写得有意义就行了。
  • java 还是 .net?图书馆对于那些有很大的不同。而且我根本不明白你想要一个状态机做什么。你想要它作为一种脚本语言吗?
  • @Falmarri - 添加示例编排作为例如顺序和条件
  • @CodeInChaos - 我基本上在看 Java。我包含 .net 只是为了查看 java 世界中是否缺少任何框架但在 .net 世界中可用
  • 我的印象是脚本语言可能是你想要的。可能是支持异步/协同程序的一种。

标签: java .net architecture jakarta-ee state-machine


【解决方案1】:

使用状态机的经验法则:

  • 您可以将其绘制为起始图表
  • 过程可能会发生变化,但在给定点(即状态)执行的算法不是 - 如果算法所做的事情受到状态的影响,仍然可以
  • 您希望将更改流程的能力扩展到非程序员的人员

出于您的目的,我会查看JBoss Business Process Management suite。您可以使用 XML 表示来定义和管理状态机,包括允许其他人更改它的 GUI 编辑器,然后将其传递给“虚拟机”以执行。定义语言为自定义代码执行和建模更复杂的行为(例如并行流程、迭代活动和计划事件)提供了许多不同的钩子。

针对评论 #1 的更新

  1. 更抽象地说,如果您可以将其绘制为框和线(UML 符合条件),那么我认为它符合条件。
  2. 鉴于您描述的用例,我会将每个数据源建模为一个状态 - 为了方便起见,您可以打破这种一对一映射(即每个状态执行多个数据源)。状态之间的转换决定了顺序。根据条件限制转换。
  3. 在我看来,另一个用户驱动这是状态机解决方案最令人信服的原因。 SCXML 或jPDL(XML 定义 jPBM 运行)实际上是将状态转换序列化为 XML。这个 XML 可以在 GUI 中操作——两个项目都有基于 Eclipse 的 GUI。这允许数据(即数据源)与特定于每个用户的过程(状态、转换和条件)一起传播。
  4. jPBM 执行引擎是可嵌入的,所以我不认为它像你想象的那么重。 jBPM 的语言——jPDL——有很好的工具支持。我查看了 SCXML,它似乎做的事情与 jPDL 大致相同,但文档和成熟度较低。此外,jPBM 允许将要执行的类定义为内联的类路径引用,而 SCXML 使用 XML 命名空间的间接寻址。

我会研究和比较 SCXML 和 jPDL 规范。我的印象是 SCMML 是 jPDL 的超集,例如 jPDL 具有重复任务作为其定义的一部分的能力,而 SCXML 则没有。

【讨论】:

  • 1) 您可以将其绘制为起始图:我不需要该图,但这就像 UML 中的活动图。 2)您能否在我的用例中详细说明这一点。 3) 是的,编排是由非 IT 用户使用我们自己的 ui 创建并保存在系统中的。 4) 我知道 jBPM 可以做到这一点,但我觉得这是重量级的。我的看法是 jBPM 支持 BPMN 规范,但不支持 SCXML 规范
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多