是编写一个新的工作流引擎好还是使用现有的BPM引擎:jBPM 5、Activiti 5更好?
我的应用程序是基于Web的,性能很重要。我担心使用jBPM/Activiti会比编写简单的工作流引擎更加耗费性能。
如果我选择自己实现,我将错过工作流程的可视化。为了性能可以做出这种权衡。
我同意已经在这里发布回复的人们的观点,或者至少是他们回复中的一部分:P,但由于我目前工作的公司也遇到了类似的挑战,所以我冒昧地加上了我们的经验。
我们需要迁移一个正在生产相关应用程序中使用jBPM工作流引擎的应用程序,并且由于在维护该应用程序时存在相当多的挑战,我们决定看看市场上是否有更好的选择。我们来到了上面提到的列表:
我们决定不再使用jBPM,因为我们最初的使用经验并不是很好,此外,每次发布新版本后向后兼容性都会被打破。
最终,我们使用的解决方案是开发了一个轻量级的工作流引擎,基于注释,将活动和过程作为抽象概念。它更或多或少是一个完成工作的状态机。
讨论工作流引擎时值得提到的另一点是它们依赖于后端数据库 - 我有经验的两个工作流引擎(SAG webMethods 和 jPBM)也是如此 - 而根据我的经验,在版本之间进行迁移有点繁琐。
因此,我认为只有在应用程序真正受益并且大部分应用程序的工作流围绕着工作流本身旋转时,才有资格使用工作流引擎,否则最好使用其他工具:
关于状态机,我看到了这个回复,其中包含了相当完整的Java状态机框架集合。
希望这能帮到你。
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年了,这些帖子仍然没有得到回答。这要看你的需求。首先,看看你是否真正需要工作流引擎(这里或其他来源)。除非你确实需要,否则最好避免使用。
如果你真的需要提供工作流引擎功能的东西,我会选择一个已经建好的。与jbpm或activiti一起工作的人在构建工作流引擎方面比你有更多的经验,因此它可能已经调整以提高性能。
我最近开源了 Piper (https://github.com/creactiviti/piper),它是一个分布式且非常轻量级的基于 Spring 的工作流引擎。
我想添加我的评论。当您选择一个现成的引擎,例如jBPM、Activity和其他一些(有很多选择),那么您需要花费一些时间学习系统本身,这可能并不容易。特别是当您只需要自动化少量代码时。
然后,当出现问题时,您必须处理供应商的支持,这可能不像您想象的那样快速。甚至需要支付一些咨询费用。
最后,最重要的原因是,您必须在引擎的生态系统中进行开发。尽管供应商倾向于说他们的系统灵活,可以整合到任何系统中,但情况并非总是如此。最终,您将重新编写应用程序以与BPM生态系统相匹配。