博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java三大主流开源工作流引擎技术分析
阅读量:5908 次
发布时间:2019-06-19

本文共 1782 字,大约阅读时间需要 5 分钟。

Java三大主流开源工作流引擎技术分析  

        首先,这个评论是我从网上,书中,搜索和整理出来的,也许有技术点上的错误点,也许理解没那么深入。但是我是秉着学习的态度加以评论,学习,希望对大家有用,进入正题!

        三大主流工作流引擎:Shark,osworkflow,jbpm!

        Shark的靠山是Enhydra。Enhydra做过什么呢?多了!从j2ee应用服务器,到o/r mapping工具,到这个工作流引擎等等。为什么Shark的持久层采用DODS来实现?就是因为他们是一家人。 

Jbpm的靠山是jboss。Jbpm3的持久层采用hibernate3来实现,也是因为这个原因吧。Jbpm3的图形化流程定义已经决定嵌入到jboss eclipse IDE中,大家看看jboss eclipse IDE preview 1.5版,我们已经可以用插件方式编辑一个jbpm3流程定义文件了。 
Osworkflow的靠山是opensymphony。我是非常喜欢这个组织的,它做出了很多的好东西。在开发工作流管理系统时,我就推荐用它的另外一个东西:webwork2。笔者主持的开源工作流引擎AgileFlow就是基于ww2+spring+hibernate架构实现的。写到这里我想是不是它可以和struts2进行完美整合?!
完成本段时说句题外话:现在基本上所有的J2EE应用程序服务器都有自己的工作流引擎,如上面提到的Enhydra,jboss和没有提到的websphere和weblogic等,可见,学习工作流引擎技术的确是非常重要的。

Shark的流程定义语言是XPDL,我们知道,XPDL的两个最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活动图的概念。活动图天生的适于工作流程建模,它相对于状态图的一个最大的优点是容易做并发线程的分叉控制,这些并发线程可以同时执行也可以顺序执行;它还有一个优点是有泳道的概念,可以控制工作流引擎中的任务的产生。Shark的如来神掌是活动图。 

Osworkflow的如来神掌又是什么呢?我们知道,它有个重要概念是State……呵呵,我们知道了,它的如来神掌是FSM。不知道FSM是什么东西??那你读大学时肯定不是好学生;当然了,不知道也不打紧,你把他类似理解为状态图就可以了。Osworkflow中的State是由step和status联合表达的,一个State就是一个step中的某个status;而state的转换由action来驱动,类似状态图中的event,因为一个event对应一个action嘛。 
Jbpm的如来神掌就没有上面的简单了,它结合应用了状态图+活动图+PetriNet的知识,而且,这里的活动图还是UML2.0版的。UML2.0的活动图中,节点不叫活动(Activity)而叫动作(action),活动成了一个高层次的概念,它包含一个动作序列。一个活动图展现一系列的动作,这些动作组成了活动。Jbpm把action也改名了,称为state。Jbpm使用的状态图的概念有transition/event等,这个自己去看吧。Jbpm来内部实现中还采用了PetriNet的概念,如token,signal等。什么?又不知道PetriNet什么东东?那你大学是学计算机的吗?不是?那你可能是学文科的,学机械/电气/土木工程/交通运输等专业都有接触PetriNet的课程,如果没有学过,还是看看jbpm吧,反正我们也不搞理论,知道大致概念就行。

 

本人观点:

做观点是件吃力不讨好的事情,好多国外的大师做的观点也是被人骂得……我的观点是:Shark……将登上头号宝座。应该说,在那篇文章发表前,国内的工作流引擎使用率最高的是osworkflow;到去年年底,Shark就占有了明显的优势地位,我分析有如下原因: 

1. 国内的企业都看中XPDL,因为这意味着在产品说明书中又可以吹牛说“我们遵循WFMC……” 
2. 因为我自诩“Shark工作流引擎在国内的主要推广者”,大部分给我反馈工作流管理系统开发选用技术的朋友都是用的Shark 
3. Shark的确是一套不错的工作流引擎,就算你只是想学习XPDL,你也可以从学习Shark开始。

4.不过我还是看好osworkflow。

转载地址:http://wnvpx.baihongyu.com/

你可能感兴趣的文章
leetcode — combination-sum-ii
查看>>
Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)
查看>>
一个for循环实现9*9乘法表
查看>>
sqlserver 日期操作的一些函数
查看>>
my07_lock-tables与single-transaction的区别
查看>>
my22_mydumper 使用总结
查看>>
Gradle for Android ( 构建变体 )
查看>>
浅析JAVA中堆内存与栈内存的区别
查看>>
redis高可用 - sentinel
查看>>
scala学习手记12 - 字段、方法和构造函数
查看>>
自定义圆形ImageView(解决Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();报错问题)
查看>>
[模板] 二分图博弈 && BZOJ2463:[中山市选2009]谁能赢呢?
查看>>
【转】centos 6.4 samba 安装配置
查看>>
Quaerus II13.0版本使用概述
查看>>
Uva 846 - Steps
查看>>
ASP.Net 请求响应流程简述
查看>>
iOS开发之基于parse的登录注册
查看>>
mysql主从复制读写分离
查看>>
Ace Admin 使用教程
查看>>
事件驱动模型
查看>>