我的应用需要从多个来源提取数据。以下需要用户定义
- 数据源的顺序
- 在订单中,条件(如果有)确定是使用数据源还是跳过数据源
一旦用户定义了上述两者,应用程序就会为其“编排”分配一个名称,随后他将使用该名称来提取数据。
我想要一些指导
- 我是否最好编写自己的代码来处理订单和条件,或者这是一个状态机用例
- 如果是状态机用例,那么哪个开源项目提供此支持更好
- 状态机有任何规范吗? SCXML?
- 状态机的最佳开源实现有哪些?标准(按此顺序):基于标准、易于调试、易于嵌入、正在积极开发、支持状态机的运行时创建
用例:这是一个 Multi-Tenancy 应用程序。每个客户都将设计自己的编排并将其保存到数据库中。我们称之为登机客户。一旦客户登机,他的所有请求都将使用他之前保存的编排。
现在假设有 3 个数据源 A、B 和 C。几乎没有可能的编排
- Orchestron 1:拉动 A、拉动 B 和 然后将 C 拉入该订单
- Orchestration 2:拉动 A,如果 A 返回错误,则拉动 B,拉动 B(所以基本上是(A 或 C)和 B)
- Crchesstrion 3:拉 A、B 和 C。顺序并不重要。全部需要拉动(可能是并行的)
最佳答案
使用状态机的经验法则:
- 您可以将其绘制为起始图表
- 流程可能会发生变化,但在给定点(即状态)执行的算法则不然 - 如果算法所做的事情受到状态的影响,那么仍然可以
- 您希望将更改流程的能力扩展到非程序员
出于您的目的,我会查看 JBoss Business Process Management suite 。您可以使用 XML 表示形式定义和管理状态机,包括允许其他人更改状态机的 GUI 编辑器,然后将其传递给“虚拟机”执行。定义语言提供了许多不同的钩子(Hook),用于自定义代码执行和建模更复杂的行为,例如并行流程、迭代 Activity 和计划事件。
针对评论 #1 进行更新
- 更抽象地说,如果你可以将其绘制为方框和线条(UML 符合条件),那么我认为它符合条件。
- 鉴于您所描述的用例,我会将每个数据源建模为一个状态 - 为了方便起见,您可以打破这种一对一映射(即每个状态执行多个数据源)。状态之间的转变决定秩序。根据条件限制转换。
- 在我看来,另一个用户驱动这是状态机解决方案最引人注目的原因。 SCXML 或 jPDL (jPBM 运行的 XML 定义)实际上是将状态转换序列化为 XML。该 XML 可以在 GUI 中操作 - 两个项目都有基于 Eclipse 的 GUI。这允许数据(即数据源)按照每个用户特定的流程(状态、转换和条件)进行传输。
- jPBM 执行引擎是可嵌入的,所以我认为它并不像您怀疑的那么重。 jBPM 的语言 - jPDL - 具有良好的工具支持。我查看了 SCXML,它的功能似乎与 jPDL 大致相同,但文档和成熟度较低。此外,jPBM 允许定义要执行的类作为内联类路径引用,而 SCXML 使用 XML 命名空间的间接寻址。
我会研究并比较 SCXML 和 jPDL 规范。我的印象是 SXCML 是 jPDL 的超集,例如 jPDL 能够重复任务作为其定义的一部分,而 SCXML 则不然。
关于java - 这是状态机的用例吗?如果是这样,您建议使用哪个开源软件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411990/