Java的轻量级工作流引擎

48

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

我的应用程序是基于Web的,性能很重要。我担心使用jBPM/Activiti会比编写简单的工作流引擎更加耗费性能。

如果我选择自己实现,我将错过工作流程的可视化。为了性能可以做出这种权衡。

13个回答

41

我同意已经在这里发布回复的人们的观点,或者至少是他们回复中的一部分:P,但由于我目前工作的公司也遇到了类似的挑战,所以我冒昧地加上了我们的经验。

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

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

我们决定不再使用jBPM,因为我们最初的使用经验并不是很好,此外,每次发布新版本后向后兼容性都会被打破。

最终,我们使用的解决方案是开发了一个轻量级的工作流引擎,基于注释,将活动和过程作为抽象概念。它更或多或少是一个完成工作的状态机。

讨论工作流引擎时值得提到的另一点是它们依赖于后端数据库 - 我有经验的两个工作流引擎(SAG webMethodsjPBM)也是如此 - 而根据我的经验,在版本之间进行迁移有点繁琐。

因此,我认为只有在应用程序真正受益并且大部分应用程序的工作流围绕着工作流本身旋转时,才有资格使用工作流引擎,否则最好使用其他工具:

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

希望这能帮到你。


1
最后一个链接已损坏。 - Alec McGail

28

Java基于工作流引擎,如Activiti、Bonita或jBPM支持BPMN 2.0规范的广泛应用。因此,您可以以图形方式建模过程。此外,一些引擎具有仿真功能,例如Activiti(使用Activiti Crystalball)。如果您自己编写流程,则在需要更改流程时不够灵活。因此,我建议使用基于Java的BPM引擎。

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

1. Bonita:

Bonita采用零代码方法,这意味着他们提供易于使用的IDE来构建您的流程,而无需编码。为了实现这一点,Bonita有连接器的概念。例如,如果您想要消耗一个Web服务,他们会向您提供一个图形化向导。缺点是您必须手动编写纯XML SOAP信封并将其复制到图形文本框中。这种方法的问题在于,您只能实现Bonita旨在实现的用例。如果您想集成Bonita未开发连接器的系统,则必须自己编写连接器,这非常痛苦。例如,Bonita提供了用于消耗SOAP Web服务的SOAP连接器。该连接器仅适用于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同步的支持,这对于生产环境来说是个重大障碍。另一个需要考虑的问题是,Bonita是根据GPL/LGPL许可证进行许可的,这可能会在您想要将Bonita集成到其他企业应用程序中时引起问题。此外,社区支持非常薄弱。有几篇帖子已经超过2年了,这些帖子仍然没有得到回答。
另一个重要的事情是业务与IT的对齐。建模流程是一项协作性学科,其中涉及IT和业务分析师。这就是为什么你需要适当的工具来满足两个用户组(例如,开发人员的Eclipse插件和易于使用的Web建模工具)。Bonita只提供Bonita Studio,需要安装在您的机器上。这个IDE相当技术化,不适合业务用户。因此,使用Bonita实现业务与IT的对齐非常困难。
Bonita是一个处理非常简单和易于处理的流程的BPM工具。由于零编码方法,学习曲线非常低,您可以很快开始建模。您需要较少的编程技能,即可实现您的流程而无需编写代码。但是,一旦您的流程变得非常复杂,Bonita可能不是最佳选择,因为缺乏灵活性。您只能实现Bonita所预期的用例。
jBPM是一个功能强大的开源BPM引擎,具有许多功能。Web建模工具甚至支持一些van der Aalst工作流模式的预制模型(workflowpatterns.com)。由于jBPM提供了Eclipse集成和基于Web的建模工具,因此可以实现业务与IT的对齐。一个有点棘手的问题是你只能在Web建模器中定义表单,而不能在Eclipse插件中定义(据我所知)。总之,jBPM是在公司中使用的好选择。我们的障碍是可扩展性。jBPM基于规则引擎Drools。这导致整个流程实例作为BLOB存储在数据库中。当考虑搜索和可扩展性时,这是一个关键的障碍。此外,由于其复杂性,jBPM的学习曲线非常陡峭。与BPMN标准建议的Service Task不同,您必须定义自己的Java Service tasks,并且必须在引擎中手动注册它们,这会导致编程水平相当低。
最终,我们选择了Activiti,因为它是一个非常易于使用的基于框架的引擎。它提供了Eclipse插件以及现代的AngularJS Web-Modeler。通过这种方式,您可以实现业务和IT的对齐。REST-API受Spring Security的保护,这意味着您可以轻松地使用单一登录功能扩展Engine。由于Apache License 2.0,没有版权保护,这意味着您在生产环境中完全可以自由使用和扩展,这非常重要。
此外,BPMN覆盖范围非常好。并不是所有的BPMN元素都得到实现,但我不知道有哪个引擎可以做到这一点。
Activiti Explorer是演示Activiti API使用的演示前端。由于此前端基于VAADIN,因此可以非常容易地进行扩展。社区非常活跃,这意味着如果您遇到任何问题,可以很快得到帮助。
Activiti为外部表单技术提供了良好的集成点,这对于生产性使用非常重要。所有候选人的表单技术都非常受限。因此,使用标准表单技术(如XForms)与Engine结合使用是有意义的。即使是更复杂的事情也可以通过formKey属性实现。
Activiti不遵循零编码方法,这意味着如果您想编排服务,则需要进行一些编码。但即使是与SOAP服务的通信也可以通过使用Java Service Task和Apache CXF来实现。编码工作量较小。
希望我的关键点能够帮助您做出决策。明确一点,这不是Activiti的广告。正确的产品选择取决于具体的用例。我只想指出我们项目中最重要的要点。

2
Bonita是根据GPL V2许可证授权的,而Activiti则是根据Apache 2.0许可证授权的。因此,如果您编写商业软件,可以使用Activiti但不能使用Bonita。 - Emanuel Moecklin

20

这要看你的需求。首先,看看你是否真正需要工作流引擎(这里或其他来源)。除非你确实需要,否则最好避免使用。

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


5

1
我看了一下,它看起来非常有前途,我会试一试。谢谢。 - giannisapi

3

我想添加我的评论。当您选择一个现成的引擎,例如jBPM、Activity和其他一些(有很多选择),那么您需要花费一些时间学习系统本身,这可能并不容易。特别是当您只需要自动化少量代码时。

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

最后,最重要的原因是,您必须在引擎的生态系统中进行开发。尽管供应商倾向于说他们的系统灵活,可以整合到任何系统中,但情况并非总是如此。最终,您将重新编写应用程序以与BPM生态系统相匹配。


2
问题是当你要求一个工作流引擎时,你真正想要实现什么。
使用工作流引擎的一般目标是在运行时更加灵活地改变业务逻辑。建模部分无疑是其中最重要的部分。BPMN 2.0 是这个领域的事实标准,在所有讨论的引擎中都支持该标准。
第二个目标是通过描述“在什么情况下应该发生什么”来控制业务流程。这部分与项目中所面临的业务需求有很大关系。
一些工作流引擎(如ActivityJBPM)可以通过“编码”您的流程来帮助您回答这个需求。这意味着您以一种方式对“在什么情况下应该发生什么”的范例进行建模,从而决定工作流引擎在各种情况下应执行哪个代码部分(例如任务或事件)。对于这个概念正在进行很多讨论。开发人员自然会问,是否可以自己实现这个概念。(事实上,这并不像乍一看那么容易)
一些其他的工作流引擎(Imixs-WorkflowBonita)可以以更加用户为中心的方式帮助您回答“当……时应该发生什么”这个需求。这是人本业务流程管理领域,它通过任务导向的工作流引擎支持人类技能和活动。重点更多地放在组织内任务和流程的分配上。工作流引擎帮助您将任务分配给特定的用户或用户组,并保护、记录和监控长时间运行的业务流程。也许这些不是您真正想自己实现的事情。
所以我的建议是,不要混淆需要单独考虑的事情,因为工作流涵盖了非常广泛的领域。

1
在我看来,没有理由自己编写BPM/工作流框架。大多数开源的BPM/工作流框架都非常灵活,你只需要学习基础知识即可。如果你选择jBPM,你将获得比简单的工作流引擎更多的东西,所以这取决于你想要构建什么。祝好!

@sallaboy 是的,这就是困惑之处。相比于你在 jBPM 3.2 开发者指南中解释的自己的 GOP 框架,使用 jBPM5 会有多大的性能开销?jBPM 是不是慢了一倍?我并不需要 BPM 引擎提供的太多功能。我只需要一个简单的基于状态机的任务执行。 - jaks
如果您不打算拥有长期持久的业务(高级流程),则可以使用简单的框架。GOP示例只是演示了JBPM 3.x内部如何创建,但框架通常更加健壮。如果您不使用持久性并且不需要实时响应(小于10毫秒),则可以使用jBPM5。 - salaboy

1
我建议您使用现成的解决方案。考虑到工作流引擎的开发需要大量的资源和时间,现成的引擎是更好的选择。请查看Workflow Engine。它是一个轻量级组件,可以让您将任何复杂度的自定义可执行工作流添加到任何Java解决方案中。

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覆盖率(几乎完全覆盖),而且与Activiti和jBPM相反,Camunda具有强大的持久化层并提供先进的死锁预防功能。而在使用Activiti时,进程内实例事务仍会在高并发下发生死锁。
Camunda BPM 7的战略目标是“开发者友好”,而JBoss jBPM 6则追求“零代码BPM”理想。Camunda BPM 7提供了创新、强大的功能,这些功能在JBoss jBPM 6中缺失,例如CMMN、驾驶舱和容器支持。
作为Camunda比另外两个替代方案表现更好且易用性高,我推荐使用Camunda。
我通过这些网站获得了这些信息,您可以访问它们。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接