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

jak*_*aks 32 java workflow jbpm activiti

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

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

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

Oli*_*POP 33

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

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

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

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

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

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

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

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

希望这可以帮助.


Ben*_*Ben 24

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

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

博尼塔:

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年,这些帖子仍未得到答复.

另一个重要的事情是Business-IT-Alignment.建模过程是一个协作学科,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是在公司中使用的良好候选者.我们的showstopper是可扩展性.jBPM基于Rules-Engine Drools.这导致整个流程实例在数据库中作为BLOBS持久化.当您考虑搜索和可伸缩性时,这是一个关键的showstopper.

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

3. Activiti:

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

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

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

Activiti为外部表单技术提供了良好的集成点,这对于高效使用非常重要.所有候选人的形式技术都​​非常严格.因此,将XForms等标准表单技术与Engine结合使用是有意义的.即使是更复杂的东西也可以通过formKey-Attribute实现.

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

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

  • Bonita是根据GPL V2获得许可的,而Activiti是根据Apache 2.0获得许可的,因此如果您编写商业软件,您可以使用Activiti但不能使用Bonita. (2认同)

dgm*_*ora 18

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

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


aco*_*hen 5

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