40

是编写一个新的工作流引擎还是使用现有的 BPM 引擎更好:jBPM 5、Activiti 5?

我的应用程序是基于 Web 的应用程序,性能很重要。我怀疑与编写简单的工作流引擎相比,使用 jBPM/Activiti 是否会带来性能开销。

如果我进行自我实现,我会错过工作流程的可视化。为了性能,它可以交易。

4

11 回答 11

36

我同意那些已经在这里发布回复的人,或者他们的部分回复:P,但是在我目前工作的公司中,我们遇到了类似的挑战,我冒昧地根据我们的经验发表了我的意见。

我们需要迁移在生产相关应用程序中使用 jBPM 工作流引擎的应用程序,并且由于在维护应用程序方面存在不少挑战,我们决定看看市场上是否有更好的选择。我们来到了已经提到的列表:

  • Activiti(计划通过原型进行尝试)
  • Bonita(计划通过原型进行尝试)
  • jBPM(由于过去的经验而被取消资格)

我们决定不再使用 jBPM,因为我们对它的最初体验并不是最好的,除此之外,每个新版本的发布都破坏了向后兼容性。

最后,我们使用的解决方案是开发一个轻量级的工作流引擎,基于具有活动和流程作为抽象的注释。它或多或少是一台状态机来完成它的工作。

在讨论工作流引擎时值得一提的另一点是它们依赖于支持数据库的事实——我有使用过的两个工作流引擎(SAG webMethodsjPBM)就是这种情况——根据我的经验,这有点有点开销,尤其是在版本之间的迁移期间。

所以,我想说,使用工作流引擎只适用于真正从中受益的应用程序,并且应用程序的大部分工作流都围绕工作流本身旋转,否则会有更好的工具来完成这项工作:

关于状态机,我遇到了这个响应,其中包含相当完整的状态机 Java 框架集合。

希望这可以帮助。

于 2013-02-12T09:42:54.237 回答
26

Activiti、Bonita 或 jBPM 等基于 Java 的工作流引擎支持广泛的 BPMN 2.0 规范。因此,您可以以图形方式对流程进行建模。此外,其中一些引擎具有模拟功能,如 Activiti(使用 Activiti Crystalball)。如果您自己对流程进行编码,那么当您需要更改流程时,您就不会那么灵活了。因此,我还建议使用基于 Java 的 BPM 引擎。

我对基于 BPMN 2.0 的开源引擎进行了研究。以下是与我们的具体用例相关的关键点:

1. 博尼塔:

Bonita 采用零编码方法,这意味着它们提供了一个易于使用的 IDE 来构建您的流程,而无需编码。为此,Bonita 提出了连接器的概念。例如,如果您想使用 Web 服务,它们会为您提供图形向导。缺点是您必须手动编写纯 XML SOAP 信封并将其复制到图形文本框中。这种方法的问题在于,您只能实现 Bonita 预期的用例。如果你想集成一个 Bonita 没有为其开发连接器的系统,你必须自己编写这样的连接器,这是非常痛苦的。例如,Bonita 提供了一个 SOAP 连接器来使用 SOAP Web 服务。此连接器仅适用于 SOAP 1.2,但不适用于 SOAP 1.1 (http://community.bonitasoft.com/answers/consume-soap-11-webservices-bonita-secure-web-service-connector)。如果您有一个带有 SOAP 1.1 的遗留应用程序,那么您无法轻松地将这个系统集成到您的流程中。数据库也是如此。专用数据库版本只有几个数据库连接器。如果您的版本与连接器不匹配,则必须自己编写代码。

此外,Bonita 在免费社区版中不支持 LDAP 或 Active Directory Sync,这对于生产环境来说是一个相当不错的选择。另一件需要考虑的事情是,Bonita 是根据 GPL / LGPL 许可证获得许可的,当您想将 Bonita 集成到另一个企业应用程序中时,这可能会导致问题。此外,社区支持非常薄弱。有几个帖子已超过 2 年,这些帖子仍未得到答复。

另一个重要的事情是业务-IT-对齐。建模流程是 IT 和业务分析师参与其中的协作学科。这就是为什么您需要为两个用户组提供足够的工具(例如,为开发人员提供的 Eclipse 插件和为业务人员提供的易于使用的 Web 建模器)。Bonita 只提供 Bonita Studio,需要安装在你的机器上。这个IDE技术性很强,不适合商业用户。因此,很难与 Bonita 实现 Business-IT-Alignment。

Bonita 是一个 BPM 工具,用于非常琐碎和简单的流程。由于零编码方法,学习曲线非常低,您可以非常快速地开始建模。您需要较少的编程技能,并且无需编码即可实现您的流程。但是一旦您的流程变得非常复杂,由于缺乏灵活性,Bonita 可能不是最佳解决方案。您只能实现 Bonita 预期的用例。

2. jBPM:

jBPM 是一个非常强大的开源 BPM 引擎,它有很多特性。Web 建模器甚至支持一些 van der Aalst 工作流模式的预制模型 (workflowpatterns.com)。Business-IT-Alignment 是可以实现的,因为 jBPM 提供了 Eclipse 集成以及基于 Web 的建模器。有点棘手的是,据我所知,您只能在 Web 建模器中定义表单,而不能在 Eclipse 插件中定义。总而言之,jBPM 是在公司中使用的不错选择。我们最引人注目的是可扩展性。jBPM 基于规则引擎 Drools。这导致整个流程实例在数据库中作为 BLOBS 持久化。当您考虑搜索和可扩展性时,这是一个重要的展示因素。

此外,由于复杂性,学习曲线非常高。jBPM 不像 BPMN-Standard 建议的那样提供服务任务。相反,您必须定义自己的 Java 服务任务,并且必须在引擎中手动注册它们,这会导致编程非常低级。

3.活动:

最后,我们选择了 Activiti,因为这是一个非常易于使用的基于框架的引擎。它提供了一个 Eclipse 插件以及一个现代的 AngularJS Web-Modeler。这样,您就可以实现Business-IT-Alignment。REST-API 由 Spring Security 保护,这意味着您可以使用单点登录功能非常轻松地扩展引擎。由于 Apache 许可证 2.0,没有 copyleft,这意味着您在使用和可扩展性方面完全免费,这在生产环境中非常重要。

此外,BPMN-coverage 非常好。并非所有 BPMN 元素都已实现,但我不知道有任何引擎可以做到这一点。

Activiti Explorer 是一个演示前端,它演示了 Activiti API 的使用。由于此前端基于 VAADIN,因此可以非常轻松地进行扩展。社区非常活跃,这意味着如果您有任何问题,可以非常快速地获得帮助。

Activiti 为外部表单技术提供了良好的集成点,这对于生产使用非常重要。所有候选人的形式技术都​​非常严格。因此,将 XForms 之类的标准表单技术与 Engine 结合使用是有意义的。甚至这样更复杂的事情也可以通过 formKey-Attribute 来实现。

Activiti 不遵循零编码方法,这意味着如果您想编排服务,您将需要一些编码。但即使是与 SOAP 服务的通信也可以通过使用 Java 服务任务和 Apache CXF 来实现。编码工作量很低。

我希望我的关键点可以帮助您做出决定。需要明确的是,这不是 Activiti 的广告。正确的产品选择取决于具体的用例。我只想指出我们项目中最重要的几点

于 2015-09-14T14:34:07.637 回答
20

这真的取决于你的要求。首先,看看你是否真的需要一个工作流引擎(这个或其他来源)。除非你真的需要它,否则你应该避免它。

如果你真的需要提供工作流引擎的东西,我会选择一个已经构建好的。使用 jbpm 或 activiti 的人在构建工作流引擎方面比你有更多的经验,所以它可能已经被调整以提高性能。

于 2013-01-23T12:36:27.663 回答
3

我最近开源了 Piper ( https://github.com/creactiviti/piper ) 一个分布式的、非常轻量级的、基于 Spring 的工作流引擎。

于 2017-07-05T21:02:05.400 回答
3

我想添加我的评论。当你选择了一个现成的引擎,比如jBPM、Activity等(有很多),那么你必须花一些时间学习系统本身,这可能不是一件容易的事。特别是当您只需要自动化一小段代码时。

然后,当出现问题时,您必须处理供应商的支持,这并不像您想象的那么快。甚至支付一些咨询费用。

最后,一个最重要的原因,你必须在引擎的生态系统中发展。尽管供应商倾向于说他们的系统可以灵活地集成到任何系统中,但情况可能并非如此。最终,您最终会重新编写应用程序以匹配 BPM 生态系统。

于 2017-11-23T02:58:39.060 回答
2

问题是当您要求使用工作流引擎时,您真正想要实现什么。

您希望通过使用工作流引擎实现的总体目标是在运行时更灵活地更改业务逻辑。建模部分肯定是这里最重要的部分之一。BPMN 2.0 是该领域的事实标准,所有讨论的引擎都支持该标准。

第二个目标是以描述“当……时应该发生什么”问题的方式来控制业务流程。这部分与您在项目中面临的业务需求有很大关系。

一些工作流引擎(ActivityJBPM)可以帮助您通过“编码”您的流程来满足此要求。这意味着您以某种方式对“何时应该发生什么”范式进行建模,您可以在其中决定在各种情况下工作流引擎应执行代码的哪一部分(例如任务或事件)。关于这个概念的讨论很多。开发人员自然会问,这可能连自己都不能实现。(实际上并不像乍一看那么容易)

其他一些工作流引擎(Imixs-WorkflowBonita)可以帮助您以更加以用户为中心的方式回答“当......时应该发生什么”的要求。这是以人为中心的业务流程管理领域,它通过面向任务的工作流引擎支持人的技能和活动。重点更多地放在组织内部的任务和流程的分配上。工作流引擎可帮助您将任务分配给特定用户或用户组,并保护、记录和监控长期运行的业务流程。也许这些是您并不想自己实现的东西。

所以我的建议是,不要把需要单独考虑的东西混在一起,因为工作流程涵盖了非常广泛的领域。

于 2016-08-29T22:05:09.503 回答
1

是的,在我看来,你没有理由自己写。大多数开源 BPM/工作流框架都非常灵活,您只需要学习基础知识。如果您选择 jBPM,您将获得的不仅仅是一个简单的工作流引擎,因此这取决于您要构建什么。

干杯

于 2013-01-25T16:08:21.320 回答
1

我建议您使用开箱即用的解决方案。鉴于工作流引擎的开发需要大量的资源和时间,现成的引擎是更好的选择。看看工作流引擎。它是一个轻量级组件,使您能够将任何复杂性的自定义可执行工作流添加到任何 Java 解决方案中。

于 2017-04-27T18:29:15.433 回答
1

CamundaBPM 是一种选择。你可以在这里查看: https ://camunda.com/

于 2020-04-05T16:34:35.117 回答
1

我在工作中也必须这样做。我入围了 Activiti、Camunda 和 jBPM,因为它们是业内最强大的开源工作流引擎之一,可以处理复杂的企业流程。它们都受 Apache 许可条款的约束。

Activiti 是从 jBPM 分支出来的,而 Camunda 是从 Activiti 分支出来的。

在建模器方面,Activiti 和 jBPM 有基于 Web 的建模器,而 Camunda 有一个桌面建模器。Activiti 和 jBPM 也提供 Eclipse 插件,而 Camunda 没有。Activiti 和 Camunda 的建模者使用 BPMN.IO 工具包。如果您需要在您的 web 应用程序中嵌入工作流模型,您可以查看以下链接

如果你想要 spring 支持,你最好的选择是 Camunda,因为 Activiti 在他们的文档中提到他们的 Spring 支持是实验性的,而 jBPM 不提供原生 spring 支持

在开发者友好性方面,Activiti 和 Camunda 拥有良好的文档和活跃的社区来帮助您入门。我发现 Camunda 的文档真的很有帮助。但是,我听说 jBPM 的文档没有帮助,而且很难集成。

在性能方面,Camunda 超过了 Activiti 和 jBPM。有科学证据表明,Camunda BPMN 引擎的性能优于 Activiti 引擎。Camunda BPM 7 的性能比 JBoss jBPM 6 好 10 倍。因此,从性能角度来看,Camunda 是最佳选择。

Camunda 提供了比 Activiti 更高的 BPMN 覆盖(几乎完整的 BPMN 覆盖)。与 Activiti 和 jBPM 不同,Camunda 有一个健壮的持久层并提供高级死锁预防。而在使用 Activiti 时,进程内实例事务在高并发下仍然会死锁。

Camunda BPM 7 的战略目标是“开发人员友好”,而 JBoss jBPM 6 则致力于“零代码 BPM”的理想。Camunda BPM 7 提供了 JBoss jBPM 6 所缺少的创新、强大的功能,例如 CMMN、驾驶舱和容器支持。

由于 Camunda 的性能优于这两种替代方案并且具有很高的可用性,我推荐 Camunda。

我通过这些网站获取信息,您可以访问它们

于 2021-03-25T07:56:57.490 回答
0

你可以看看@Apache Ant 来构建一个工作流引擎。它更加健壮,并且是一个纯状态机,已经内置了大部分所需的需求。

除此之外,您还可以在 Java/Groovy/JS 语言中嵌入不同的动态代码/脚本,因此它非常强大。它还允许任务扩展。

它周围有相当多的工具,或者如果需要 IDE,您可以在它之上构建。

更新:Spring 状态机也可用,重量相对轻且不臃肿:https ://projects.spring.io/spring-statemachine/

于 2014-05-22T14:25:39.937 回答