是否有一个由NoSQL支持的成熟的BPM Java工作流引擎?

是否有一个由NoSQL支持的成熟的BPM Java工作流引擎?,java,nosql,workflow,business-process-management,Java,Nosql,Workflow,Business Process Management,我正在研究如何构建一个通用应用程序或微服务,以支持构建以工作流为中心的应用程序。我对框架做了一些研究(见下文),最有希望的候选框架都非常依赖RDBMS来存储工作流和流程状态,并结合JPA注释实体。在我看来,这破坏了设计通用的、数据驱动的工作流微服务的可能性。通过将数据对象和规则存储在JSON或XML中,似乎可以在MondoDB或Cassandra等NoSQL解决方案的基础上构建一个真正通用的工作流系统。这将允许执行代码来强制执行类型或模式,同时使用一个或两个简单的Java对象来检索和保存实体。在

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

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

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


如果我放弃理想的、神奇的通用解决方案,我可能会选择一个像and这样的框架,因为它们有很好的功能集,而且已经成熟。在寻找其他候选人的过程中,我发现了一个名副其实的废弃项目的墓地,比如

Activiti项目的设计师也意识到了您所说的问题,但他们知道,要实现这样的灵活性需要重新编写,可以说,从一开始就应该将这种灵活性设计到项目中。正如您将在下面提供的链接中看到的,问题在于缺少接口来编写不同于关系数据库的实现的代码。在版本6中,他们继续使用Bandad,并使用一组接口重构框架,可以编写和插入不同的实现(想想Neo4J、MongoDB或其他任何你喜欢的持久化技术)

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


我认为工作流引擎通常基于RDBMS的原因不是数据库模式,而是与事务安全数据存储的结合。 事务健壮性是工作流引擎的一个重要因素,特别是对于复杂工作流中典型的长时间运行或嵌套事务。 因此,这可能是大多数引擎(如activi)不关注数据驱动方法的原因之一。(这里我不是说数据复制,在大多数情况下,NoSQL数据库都会涉及数据复制)

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

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

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

是的,具有可插入持久性,并在Cassandra和SQL数据库上运行。它经过多达100个Cassandra节点的测试,可以支持每秒数万个事件和数亿个开放工作流

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


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

如果您选择否决投票,请发表评论。如果有什么方法可以改进我的问题,我想知道。我知道建议不要问图书馆推荐书的问题,但事实是:(1)StackOverflow中的这些问题首先帮助我研究这个问题;(2)这个问题的任何答案都可以帮助我恢复搜索,因为我遇到了死胡同。