Java 这是状态机的用例吗?如果是的话,你建议哪种开源?

Java 这是状态机的用例吗?如果是的话,你建议哪种开源?,java,.net,architecture,jakarta-ee,state-machine,Java,.net,Architecture,Jakarta Ee,State Machine,我的应用程序需要从多个来源提取数据。以下内容需要用户定义 数据源的顺序 在订单中,条件(如果有)决定是使用数据源还是跳过数据源 一旦用户定义了以上两个,应用程序将为其“编排”分配一个名称,他随后将使用该名称提取数据 我想得到一些指导 我是否更擅长编写自己的代码来处理顺序和条件,或者这是一个状态机用例 如果它是一个状态机用例,那么哪一个是提供这种支持的更好的开源项目 是否有状态机的规范?SCXML 状态机的最佳开源实现是什么?标准(按此顺序):基于标准,易于调试,易于嵌入,正在积极开发,支持运行时

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

  • 数据源的顺序
  • 在订单中,条件(如果有)决定是使用数据源还是跳过数据源
  • 一旦用户定义了以上两个,应用程序将为其“编排”分配一个名称,他随后将使用该名称提取数据

    我想得到一些指导

  • 我是否更擅长编写自己的代码来处理顺序和条件,或者这是一个状态机用例
  • 如果它是一个状态机用例,那么哪一个是提供这种支持的更好的开源项目
  • 是否有状态机的规范?SCXML
  • 状态机的最佳开源实现是什么?标准(按此顺序):基于标准,易于调试,易于嵌入,正在积极开发,支持运行时创建状态机
  • 用例:这是一个多租户应用程序。每个客户都将设计自己的Orchestration并将其保存到db。我们称之为客户登机。一旦客户登机,他的所有请求都将使用他先前保存的orcestration

    现在让我们假设有3个数据源A、B和C

    • 管弦乐队1:拉A,拉B和 然后按顺序拉C
    • 管弦乐队2:拉动A,如果返回错误,则拉动B,拉动B(基本上是(A或C)和B)
    • 拉A、B和C。顺序无关紧要。所有需要拉动(可能平行)

    使用状态机的经验法则:

    • 您可以将其绘制为开始图表
    • 该过程很可能是变化,但在给定点(即状态)执行的算法不正常-如果算法的行为受到状态的影响,则仍然正常
    • 您希望将更改流程的能力扩展到非程序员
    为了你的目的,我会看这本书。您可以使用XML表示定义和管理状态机,包括允许其他人修改状态机的GUI编辑器,然后将状态机传递给“虚拟机”执行。定义语言为自定义代码执行和建模更复杂的行为(如并行过程、迭代活动和计划事件)提供了许多不同的挂钩

    更新对评论的回应#1

  • 更抽象地说,如果你能把它画成框和线(UML将符合要求),那么我认为它符合要求
  • 考虑到您描述的用例,我将把每个数据源建模为一个状态——为了方便起见,您可以打破这种一对一的映射(即,每个状态执行多个数据源)。状态之间的转换决定顺序。根据条件限制转换
  • 在我看来,另一个用户驱动这是使用状态机解决方案最令人信服的原因。SCXML或(XML定义jPBM运行)有效地将状态转换序列化为XML。这个XML可以在GUI中操作——两个项目都有基于Eclipse的GUI。这允许数据(即数据源)随特定于每个用户的流程(状态、转换和条件)移动
  • jPBM执行引擎是可嵌入的,所以我认为它并不像您想象的那么重。jBPM的语言jPDL具有良好的工具支持。我回顾了SCXML,它似乎做了与jPDL大致相同的事情,但文档和成熟度较低。此外,jPBM允许定义要内联执行的类作为类路径引用,而SCXML使用XML名称空间的间接寻址
    我将研究并比较SCXML和jPDL规范。我的印象是,SXCML是jPDL的超集,例如,jPDL有能力重复任务作为其定义的一部分,而SCXML似乎不是这样。

    如果没有数据是什么,什么样的条件,做了什么工作,这是不可能判断的。几乎任何程序都可以看作是状态机。只要写下它的意义就行了。java还是.net?对于那些人来说,图书馆是完全不同的。我完全不明白你想要一台状态机做什么。您想将其作为脚本语言吗?@falmari-添加了示例编排,例如用于订单和conditions@CodeInChaos-我基本上是在找Java。我加入.net只是为了看看java世界中是否有任何框架缺失,但在.net世界中可用。我的印象是,脚本语言可能就是您想要的。可能是一个支持异步/协同例程的。1)您可以将其绘制为开始图:我不需要该图,但这类似于UML中的活动图。2) 你能在我的用例中详细说明一下吗。3) 是,业务流程由非it用户使用我们自己的ui创建并保存在系统中。4) 我知道jBPM可以做到这一点,但我觉得这是重量级的。我认为jBPM支持BPMN规范,但不支持SCXML规范