适用于 Java 的轻量级工作流引擎

2022-09-01 02:22:08

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

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

如果我采用自我实现,我将错过工作流程的可视化。为了表现,它可以被交易。


答案 1

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

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

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

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

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

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

因此,我想说的是,使用工作流引擎仅适用于真正从中受益的应用程序,并且大多数应用程序的工作流都围绕工作流本身旋转,否则有更好的工具可以完成工作:

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

希望这有帮助。


答案 2

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

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

1. 博尼塔:

Bonita具有零编码方法,这意味着它们提供了易于使用的IDE来构建您的流程,而无需编码。为了实现这一目标,Bonita拥有连接器的概念。例如,如果您想使用Web服务,他们将为您提供一个图形wizzard。缺点是您必须手动编写纯 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 Sync,这对于生产环境来说是一个很大的障碍。另一件需要考虑的事情是,Bonita是在GPL / LGPL许可证下授权的,当您想要将Bonita集成到另一个企业应用程序中时,这可能会导致问题。此外,社区支持非常薄弱。有几个帖子已经超过2年了,这些帖子仍然没有回答。

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

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

2. 日本制造专利管理平台:

jBPM是一个非常强大的开源BPM引擎,它有很多功能。Web建模器甚至支持一些范德阿尔斯特工作流程模式的预制模型(workflowpatterns.com)。业务-IT-一致性是可以实现的,因为 jBPM 提供了 Eclipse 集成以及基于 Web 的建模器。有点棘手的是,据我所知,您只能在Web建模器中定义表单,而不能在Eclipse插件中定义表单。总而言之,jBPM是公司使用的一个很好的候选者。我们的优势在于可扩展性。jBPM基于规则引擎Drools。这导致整个过程实例作为 BLOB 保留在数据库中。当您考虑搜索和可伸缩性时,这是一个至关重要的障碍。

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

3. 活动:

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

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

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

Activiti为外部形式技术提供了良好的集成点,这对于高效使用非常重要。所有候选人的形态技术都非常严格。因此,将标准表单技术(如 XForms)与引擎结合使用是有意义的。即使是这样更复杂的事情也可以通过formKey-Attribute来实现。

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

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


推荐