当前位置: 首页 > news >正文

drools规则引擎可视化_几大工作流引擎对比

纵观jBPM:从jBPM3到jBPM5以及Activiti5:http://www.infoq.com/cn/articles/rh-jbpm5-activiti5#

工作流引擎选择(为何使用activiti而不是jbpm):http://blog.csdn.net/classfoo/article/details/20645779

Java工作流引擎:jBPM、Activiti以及SWF:http://blog.csdn.net/liangyixin19800304/article/details/12761573

JBPM(Java Business Process Management):JAVA业务流程管理,是一个可扩展、灵活、开源的流程引擎, 它可以运行在独立的服务器上或者嵌入任何Java应用中。

几种工作流引擎对比:

1、jBPM3是一个完整的工作流系统实现,面向开发人员,目的在于简化对组织核心流程进行支撑的软件创建,不支持标准。

2、jBPM4引入PVM,使其拥有更强大的扩展性,同时增加BPMS特性,这些特性包括了对BPMN的支持、面向业务人员的Web建模器和简单统计分析功能的加入。

3、jBPM5基于原先的Drools Flow,支持BPMN,通过与Drools的合并支持BAM,通过内容仓库增加对流程可视化的支持。由于放弃了jBPM4的PVM,引擎的可扩展性受到损害,并且不再支持jPDL。

4、Activiti5基于jBPM4的开源工作流系统,与Alfresco的集成增加了其流程可视化与管理能力,同时通过创新的Activiti Cycle协作组件支持流程相关人员之间的协调,最后,它加强了集成能力。

5、SWF与其说是工作流引擎,不如说是分布式计算调度框架,SWF中只包括Task和History两部分,甚至是每个Task之间如果要传递一些数据的话,都只能通过第三方存储(比如Message Queue或者Redis),不过这也给了编程更大的灵活性,问题是这种灵活性是不是非常需要。

一个SWF由Worker和Decider组成,Worker执行实际的任务,而Decider进行流程控制,两者严格上来讲没有区别,只是所执行的任务不同罢了。每个Worker和Decider会定期的去SWF的一个Task List取下一个任务。可以看出来这更像是一个“多线程”的结构,而SWF官方网站的Use Case是NASA的火星探索计划中需要处理图片的系统,这其实也是一个更多侧重于计算的系统,流程反而非常简单。

另外,SWF(Simple Workflow)的一个Workflow不能太复杂,因为所有的流程控制都集中于Decider,如果太复杂的话Decider将无比庞大,给维护和扩展带来一定的困扰。

Activiti的优势:

1、与jBPM4相比,Activiti5最令人瞩目的特性就在于它的协作工具组件

  • Activiti Modeler—建模器
  • 基于开源Signavio Web流程编辑器的一个定制版本,提供了对BPMN2.0图形化规范的支持,建模后的流程以文件格式进行存储。
  • Activiti probe—管理及监控组件
  • 对流程引擎运行期实例提供管理及监控的Web控制台。包含部署的管理、流程定义的管理、数据库表的检视、日志查看、事务的平均执行时间、失败多次的工作等功能。

2、Activiti拥有更简洁健壮的接口

Activiti中提供TaskQuery接口,可以设置各种查询过滤,排序方式,最终通过list方法执行查询,相比jbpm,它还提供了分页查询功能,双方高下立判。

3、Activiti拥有更友好的用户体验

JBPM核心引擎完全没有关于表单的任何抽象,它的工作机制是通过全局常量,流程变量,任务变量,这些概念十分技术化。

相比之下Activiti则更贴近实际的应用场景,它将为开始节点,以及人工任务提供了表单设置,用户可以设置字段名称,字段类型。通过Activiti的平台可以根据这些设置去生成表单,但如果不使用其平台只使用引擎的话,也支持通过它来表达与第三方表单的关系。这些表单设置的元数据信息也可以通过接口去获取。

4、Activiti支持启动引擎后随时热部署

JBPM存在一个软肋,一个RuntimeService只能在启动的时候指定bpmn资源,一旦启动后便不再能够去更新或者增加bpmn了,这会导致我们系统集成的困难,因为我们自然希望整个系统只有一个工作流引擎实例运行。Activiti则提供了Deploy机制,将bpmn资源的热部署,热更新都做了很好的支持

5、Activiti拥有更友好易用的Eclipse编辑插件和在线插件

6、Activiti依赖更少的jar包

Activiti依赖的第三方jar包较少,主要就是mybatics,而JBPM则依赖了一大堆的jar,从drools到繁杂的hibernate,再到自身拆分的零零散散的jar包,让人不由觉得它是一个庞大的怪物。

工作流有版本的概念,jBPM和Activiti上传一个新的版本后,版本号会增加1,旧版本还没执行完的流程实例还会继续执行。SWF的版本是个字符串,随意指定好了,这样也很好,字符串名称更明确。

嵌入式部署即将流程引擎嵌入部署于Web应用中

最后,总结一下:

shark:系统和功能都比较复杂

Osworkflow:比较灵活的轻量级的框架,但是在流程建模方面不太友好,需要手动编写xml文件去定义流程文件。

SWF:还有不能支持太复杂的流程

fa23d59b3d62fd72ca6f79a577b5ad5e.png

相关文章:

  • python3检测文件的编码格式_python判断文件的编码格式是否为UTF8 无BOM格式
  • git-2.29.2.2-64-bit安装_FairRoot安装注意事项
  • java执行sql文件_Mybatis进阶笔记:架构概述与基本执行流程梳理
  • catia二次开发_CATIA二次开发文件双手奉上,重命名非参后的CATPart
  • admin manager_Hadoop - 企业级大数据管理平台CDH(安装cloudera-manager)
  • python如何打印字符串_python 中 打印及格式化字符串的相关方法
  • selenium firefox驱动_[Selenium]2.开发环境配置
  • js regexp 匹配任意一个字符串_JavaScript基础知识:字符串的使用和基本操作
  • python列表的存储结构_3-Python内置结构-列表
  • 用python制作新用户注册系统_[宜配屋]听图阁
  • python中typeerror_Python中的TypeError类
  • python手工打码_打码兔和超人打码python版
  • python 将图片转换成像素画_Python用61行代码实现图片像素化
  • python实现自动翻页代码_python实现模拟按键,自动翻页看u17漫画
  • excel万年历_excel函数应用技巧:如何按不同要求,改变数值格式
  • 【Linux系统编程】快速查找errno错误码信息
  • Android Studio:GIT提交项目到远程仓库
  • CAP理论的例子讲解
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • express.js的介绍及使用
  • Git的一些常用操作
  • HTTP 简介
  • Python利用正则抓取网页内容保存到本地
  • Solarized Scheme
  • vue-cli在webpack的配置文件探究
  • 高性能JavaScript阅读简记(三)
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 异步
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​比特币大跌的 2 个原因
  • ​力扣解法汇总946-验证栈序列
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Linux(帮助手册)
  • #宝哥教你#查看jquery绑定的事件函数
  • $.ajax,axios,fetch三种ajax请求的区别
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (算法)N皇后问题
  • (一)基于IDEA的JAVA基础12
  • (转)socket Aio demo
  • .a文件和.so文件
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Micro Framework初体验(二)
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 的程序集加载上下文
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net访问oracle数据库性能问题