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

时间:2013-01-23 07:13:29

标签: java workflow jbpm activiti

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

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

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

9 个答案:

答案 0 :(得分:33)

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

我们需要在生产相关的应用程序中迁移使用jBPM工作流引擎的应用程序,因为在维护应用程序方面存在相当多的挑战,我们决定看看市场上是否有更好的选择。我们来到了已经提到过的名单:

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

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

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

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

所以,我想说使用工作流引擎只能用于真正受益于它的应用程序,并且应用程序的大部分工作流程都围绕着工作流本身旋转,否则就有更好的工具可用于工作:

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

希望这有帮助。

答案 1 :(得分:17)

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

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

答案 2 :(得分:2)

问题是当你要求工作流引擎时你真正想要实现的目标。

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

第二个目标是通过描述'当......'问题时应该发生什么来控制业务流程。这部分与您在项目中遇到的业务需求有很大关系。

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

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

所以我的建议是,不要混淆需要单独考虑的事情,因为工作流程涉及的范围很广。

答案 3 :(得分:1)

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

干杯

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我最近开源的Piper(https://github.com/creactiviti/piper)是一个分布式,重量很轻,基于Spring的工作流引擎。

答案 6 :(得分:0)

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

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

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我也不得不在我的工作中做同样的事情。我将 Activiti、Camunda 和 jBPM 列入候选名单,因为它们是业内最强大的开源工作流引擎之一,可以处理复杂的企业流程。它们都受 Apache 许可条款的约束。

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

在建模器方面,Activiti 和 jBPM 有基于网络的建模器,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。

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