【问题标题】:Is there a mature Java Workflow Engine for BPM backed by NoSQL?是否有基于 NoSQL 的成熟的 BPM Java 工作流引擎?
【发布时间】:2018-03-22 08:14:39
【问题描述】:

我正在研究如何构建通用应用程序或微服务以支持构建以工作流为中心的应用程序。我已经对框架进行了一些研究(见下文),最有希望的候选人都非常依赖 RDBMS 来存储工作流和流程状态以及 JPA 注释实体。在我看来,这损害了设计通用的、数据驱动的工作流微服务的可能性。通过将数据对象和规则存储在 JSON 或 XML 中,似乎可以在 MondoDB 或 Cassandra 等 NoSQL 解决方案上构建一个真正通用的工作流系统。这些将允许执行代码以强制类型或模式,同时使用一两个简单的 Java 对象来检索和保存实体。正如我所看到的,这可以使单个应用程序无需修改即可部署为不同域的模型-视图对的控制器(诚然给出了一个非常聪明的界面)。

我试图找到一个支持 NoSQL 后端的工作流引擎/BPM 框架。我找到的最接近的是Activiti-Neo4J,它似乎是一个废弃的项目,可以在 Activity 和 Neo4J 之间建立连接器。

是否有支持 NoSQL 后端并泛化数据对象而不需要特定 POJO 实体的 Java 工作引擎/BPM 框架?

如果我要放弃我理想的、神奇的通用解决方案,我可能会选择像 jBPMActivi 这样的框架,因为它们具有强大的功能集并且已经成熟。在尝试寻找其他候选人时,我发现了一个名副其实的废弃项目墓地,例如this one on Java-Source.net

【问题讨论】:

  • 如果您选择投反对票,请发表评论。如果有办法改进我的问题,我想知道。我知道stackoverflow.com/help/on-topic 建议不要针对图书馆推荐提出问题,但事实是(1)StackOverflow 中的此类问题首先帮助我研究了这个问题,(2)这个问题的任何答案都可以帮助我恢复搜索因为我走到了死胡同。

标签: java nosql workflow business-process-management


【解决方案1】:

是的,Temporal Workflow 具有可插拔的持久性,可在 Cassandra 和 SQL 数据库上运行。它已针对多达 100 个 Cassandra 节点进行了测试,每秒可支持数万个事件和数亿个打开的工作流。

它允许将您的工作流逻辑建模为普通的旧 Java 类,并确保代码在各种故障中完全容错和持久。这包括局部变量和线程。

请参阅this presentation,了解有关编程模型的更多详细信息。

【讨论】:

    【解决方案2】:

    我认为工作流引擎通常基于 RDBMS 的原因不是数据库模式,而是与事务安全数据存储的组合。 事务稳健性是工作流引擎的一个重要因素,特别是对于复杂工作流中典型的长时间运行或嵌套事务。 所以也许这就是大多数引擎(如 activi)不专注于数据驱动方法的原因之一。 (这里我不是在谈论 NoSQL 数据库在大多数情况下涵盖的数据复制)

    如果您查看Imixs-Workflow Project,您会发现基于 Java Enterprise 的不同方法。该引擎使用可以使用任何类型的可序列化数据值的通用数据对象。 Lucene Search 技术解决了数据检索的问题。每个对象都被翻译成一个虚拟文档,其中包含每个项目的名称/值对。这使得搜索处理的业务数据以及查询结构化工作流数据(如状态信息或流程所有者)变得容易。所以这是一种可能的解决方案。

    除此之外,您始终可以选择将业务数据存储到 NoSQL 数据库中。只要您将两个对象链接在一起,这与正在运行的流程实例的工作流数据无关。 回到事务鲁棒性方面,将 NoSQL 数据存储的引用存储到事务感知的流程实例中是个好主意。也可以看看here

    因此,您可能遇到的唯一问题是,将事务上下文从 EJB/JPA 同步到“外部”NoSQL 数据库非常困难。例如:当您的数据成功保存到您的 NoSQL 数据存储中(例如 Casnadra),但工作流引擎的事务失败并触发角色返回时,您会怎么做?

    【讨论】:

      【解决方案3】:

      Activiti 项目的设计者也意识到了您所说的问题,但知道实现这种灵活性将是一个相当大的重写,可以说,应该从一开始就将其设计到项目中。正如您将在下面提供的链接中看到的那样,问题在于缺少用于编写关系数据库以外的不同实现的接口。在第 6 版中,他们继续进行并撕下创可贴,并使用一组接口重构了框架,可以编写和插入不同的实现(想想 Neo4J、MongoDB 或任何其他您喜欢的持久性技术)。

      在下面的链接文章中,它们提供了一些代码示例,用于上述接口的简单内存实现。看起来很酷,听起来可能正是您正在寻找的东西。

      https://www.javacodegeeks.com/2015/09/pluggable-persistence-in-activiti-6.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多