疯狂Activiti6.0连载(一)———Activiti介绍
疯狂Activiti6.0连载(一)———Activiti介绍
杨大仙的程序世界 发表于5天前
疯狂Activiti6.0连载(一)———Activiti介绍
  • 发表于 5天前
  • 阅读 2407
  • 收藏 143
  • 点赞 8
  • 评论 26

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

                                            1 Activiti介绍

        在计算机尚未普及时,许多工作流程采用手工传递纸张表单的方式,一级一级审批签字,工作效率非常低下,对于数据统计以及生成报表的功能,需要经过大量的手工操作才能实现。随着电脑的普及,这些工作的参与者只需要在电脑的系统中填入工作内容,系统就会按照定义好的流程自动执行,各级审批者可以得到工作的信息并作出相应的审批和管理操作,数据统计和报表的生成均由系统代为完成,这样大大提高了工作效率,在这种背景下,各种的工作流应用以及中间件应运而生。

        工作流应用在日常工作中的应用越来越广泛,JavaEE领域出现了许多优秀的工作流引擎,例如JBoss社区的jBPM、OpenSymphony的OSWorkflow等,在2010年5月17日,以Tom Baeyens为首的工作流小组发布了一个全新的工作流引擎——Activiti,该工作流引擎的第一个版本为5.0alpha1,由于Tom Baeyens是jBPM的创始人(由于意见分歧离开JBoss),因此Activiti的团队希望该流程引擎是jBPM4的延伸,希望在jBPM中积累的经验和知识的基础上,继续进行新一代工作流解决方案的建设,因此将第一个Activiti版本定义为5.0alpha1。

        Activiti经过多年的发展,已经发布了多个版本,随着DMN(决策模型与图形)规范的推出,Activiti开始实现自己的规则引擎,本书将以Activiti6.0为基础,深入了解Activiti工作流引擎以及规则引擎的特性。

                                                1.1 工作流介绍

        工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。工作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。注:本段内容来自维基百科。

        早在20世纪70年,办公自动化概念出现的时候,工作流思想就已经出现,人们希望新的技术可以改善办公效率,但是由于当时计算机并没有普及,网络技术还不普遍等原因,70年代工作流技术仅仅停留在研究领域。到了90年代以后,各种的技术条件逐渐成熟,工作流技术被应用于电讯、软件、制造、金融和办公自动化领域。随着工作流技术的兴起,为了给全部业务的参与者提供易与理解的标准标记法,由业务流程管理倡议组织(BPMI)开发出了“业务流程建模标记法” (BPMN, Business Process Modeling Notation),BPMI组织于2005年并入到OMG组织,当前BPMN规范由OMG组织进行维护。

                                                1.2 BPMN2.0规范简述

        BPMN规范1.0版本由BPMI组织于2004年发布,全称是Business Process Modeling Notation,BPMN规范的发布是为了让业务流程的全部参与人员对流程可以进行可视化管理,提供一套让所有参与人员都易于理解的语言和标记,为业务流程的设计人员(非技术人员)和流程的实现人员(技术人员)建立起一座桥梁。BPMI组织于2005合并到OMG(Object Management Group)组织中,2008年1月发布BPMN1.1规范。BPMN2.0规范于2011年1月正式发布,并且全称改为Business Process Model And Notation(业务流程模型和符号)。

        在1.0版本的BPMN规范中,只注重流程元素的图形,这使其在流程分析人员中非常受欢迎,而BPMN2.0版本则继承了1.0版本的内容,并且注重流程执行语法和标准交换格式。

1.2.1 BPMN2.0概述

        BPMN2.0规范定义了业务流程的符号以及模型,并且为流程定义设定了转换格式,目的是为了让流程的定义实现可移植性,那么用户可以在不同的供应商环境中定义流程,并且这些流程可以移植到其他遵守BPMN2.0规范的供应商环境中。BPMN2.0在以下方面扩展了BPMN1.2:

              规范了流程元素的执行语法;

              定义了流程模型和流程图的扩展机制;

              细化了事件的组成;

              扩展了参与者的交互定义;

              定义了编排模型。

1.2.2 BPMN2.0元素

        BPMN2.0的目的是建立简单的并且易懂的业务流程模型,但是同时又需要处理高度复杂的业务流程,因此要解决这两个矛盾的要求,需要在规范中定义标准的图形和符号。BPMN中定义了5类基础的元素分类:

              流对象(Flow Objects):在一个业务流程中,流对象是用于定义行为的图形元素,主要有事件(Events)、活动(Activities)和网关(Gateways)三种流对象。

               数据(Data):主要有数据对象(Data Objects)、数据输入(Data Inputs)、数据输出(Data Inputs)和数据存储(Data Stores)4种元素。

              连接对象(Connecting Objects):用于连接流对象,主要有4种连接流对象的方式,包括顺序流(Sequence Flows)、消息流(Message Flows)、关联(Associations)和数据关联(Data Associations)。

             泳道(Swimlanes):泳道提供了有2种途径组织基础的模型元素,分别是池(Pools)和道(Lanes)。

              制品(Artifacts):制品主要用于为流程提供附加信息,当前制品包括组(Group)和注释(Text Annotation)。

        以上的元素分类以及其下面的元素,均是BPMN规范中元素的组成部分,每个对象均有自己对应的图形,以下表格为各个元素的图形及其描述。

元素

图形

描述

事件(Events)

用于描述流程中发生的事件,事件会对流程产生影响,事件会被触发或者会产生结果。

活动(Activities)

活动是工作流中一个通用的术语,活动包括任务(Task)和子流程(Sub-Process)。

网关(Gateways)

网关主要用于控制流程中的顺序流的走向,使用网关可以控制流程进行分支与合并。

顺序流(Sequence Flow)

顺序流显示流程将会执行哪个活动。

消息流(Message Flows)

消息流主要用于显示消息在流程参与者之间的传递情况。

关联(Association)

主要用于连接流程元素及其制品(流程信息)。

池(Pool)

存放道的容器。

道(Lane)

用于区分流程参与人的职能范围。

数据对象(Data Object)

数据对象主要表示活动需要的或者产生的信息。

消息(Message)

消息主要用于描述流程参与者之间的沟通内容。

组(Group)

主要用于存放一些流程信息,包括流程文档、流程分析信息等。

注释(Text Annotation)

主要为阅读流程图的人提供附加的文字信息。

        以上为BPMN规范中定义的基本元素,在这些元素的基础上,还会产生多种子元素,例如网关(Gateways)元素,还可以细分为单向网关、并行网关等,这些细分的元素将会在本书的BPMN2.0规范章节详细讲解。

1.2.3 BPMN2.0的XML结构

        BPMN2.0规范中除了定义流程元素的图形外,还对流程描述文件作了语法上的定义,例如在定义一个userTask的时候,BPMN2.0规范中定义了需要有id和name属性,定义一个顺序流,需要提供id、name、sourceRef和targetRef属性。BPMN2.0定了XML规范,这样的话,一份流程描述文件可以在不同的流程引擎中使用(流程引擎需要遵守BPMN2.0规范)。

        除了BPMN2.0规定的元素以及属性外,工作流引擎的供应商还可以在这些规范的基础上添加额外的属性,但是这些扩展的属性不允许与任何的BPMN2.0元素产生冲突,除些之外,在对属性进行扩展时,所产生的流程模型与流程图,必须要让流程的参与者能够轻松看懂,而且规范中最基础的流程元素不允许发生改变,因为这是BPMN2.0规范的初衷。

        BPMN定义的XML元素以及相关众多,各个元素的作用以及其使用,将会在本书后面章节中讲述。

                                                1.3 Activiti介绍

        当BPMN2.0规范在2011年发布时,各个工作流引擎的供应商均向其靠拢,包括jBPM5和本书所介绍的Activiti。Activiti的第一个版本为5.0alpha1,一直到2010年12月发布了Activiti5.0的正式版,此过程经历了4个alpha版本、2个beta版本和1个rc版本,直到5.0正式版本才出现对BPMN2.0规范的支持。Activiti6.0于2017年5月发布,已经开始实现DMN规范。

1.3.1 Activiti的出现

        Activiti的创始人Tom Baeyens是jBPM的创始人,由于在jBPM的未来架构上产生意见分歧,Tom Baeyens在2010年离开了JBoss并加入Alfresco公司,Tom Baeyens的离开使得jBPM5完全放弃了jBPM4的架构,基于Drools Flow重新开发,而在2010年的5月,Tom Baeyens发布了第一个Activiti版本(5.0alpha1),由此看来,Activiti更像是jBPM4的延续,也许为了让其看起来更像jBPM4的延续,Activiti团队直接将Activiti的第一版本定义为5.0。

1.3.2 Activiti的发展

        从2010年5月发布第一个Activiti版本至今(2017年),Activiti经历了近几十个版本的演化,笔者成书时版本已经发布到6.0.0.RC1。Activiti采用了宽松的Apache Licence2.0开源协议,因此Activiti一出,就得到了开源社区的大力支持,在开源社区的支持下,Activiti可以吸引到更多的工作流专家参与到该项目中,并且可以促使Activiti在工作流领域的创新。

1.3.3 选择Activiti还是jBPM

        根据前面的内容可以得知,jBPM5和Activiti同样支持BPMN2.0规范,但是实际上jBPM5已经推翻了jBPM3和jBPM4的架构,使用了Drools Flow作为工作流架构,这对于原来使用jBPM3和jBPM4的用户来说是非常郁闷的一件事(从零开始重新学习jBPM5),而Activiti更像是原来jBPM4的延续,因此对于原来使用jBPM3和jBPM4的用户来说,更推荐使用Activiti,但是由于JBoss中有一些优秀的项目(例如规则引擎Drools、Seam等),jBPM5与这些项目进行整合具有先天的优势,因此如何进行选择还需要进行权衡。

        除了原来的架构有所改变之外,还需要考虑的是,jBPM5采用的是LGPL开源协议,如果要在其基础上使用修改和衍生的方式做二次开发的商业软件,涉及的修改部分需要使用LGPL协议,因此对于这些商用的软件来说,如果对jBPM5的源代码进行修改并做二次开发,显然不是明智的选择。相对于jBPM5来说,Activiti采用了更为宽松的Apache License2.0协议,该协议鼓励代码共享和尊重原作者的著作权,允许对代码进行修改、再发布而不管其用途。

                                                1.4 本章小结

        本章对工作流的起源以及发展作了简单的介绍,其中主要介绍了在工作流领域的BPMN2.0规范,BPMN2.0规范为工作流应用提供了语言以及图形的标准,在1.2小节介绍BPMN2.0规范目标以及该规范的部分内容,在1.3小节讲述了Activiti的产生背景,简述了Activiti目前所拥有的优势,并且与“成熟”的jBPM进行对比,在经过对工作流领域以及Activiti的简单介绍后,本书将带领读者开始Activiti之旅。

        本文节选自《疯狂Workflow讲义(第2版)》

共有 人打赏支持
粉丝 98
博文 9
码字总数 25088
评论 (26)
大U
期待更新第二章,这章说的更多的是概念,来点干货
杨大仙的程序世界

引用来自“大U”的评论

期待更新第二章,这章说的更多的是概念,来点干货
感谢支持,将持续更新
黑子鱼咖
哦哦 6.0,我现在在折腾 5.21.不过估计不会去折腾 activiti 反而打算看看 flowable
挨踢得要死要死的某瓜

引用来自“黑子鱼咖”的评论

哦哦 6.0,我现在在折腾 5.21.不过估计不会去折腾 activiti 反而打算看看 flowable
请教一下,flowable比起来有什么优势么?
杨大仙的程序世界

引用来自“黑子鱼咖”的评论

哦哦 6.0,我现在在折腾 5.21.不过估计不会去折腾 activiti 反而打算看看 flowable
笔者曾经出版过Activit5.10,Activiti底层使用流程虚拟机,而Activiti6.0,却完全没有流程虚拟机的影子
黑子鱼咖

引用来自“黑子鱼咖”的评论

哦哦 6.0,我现在在折腾 5.21.不过估计不会去折腾 activiti 反而打算看看 flowable

引用来自“杨大仙的程序世界”的评论

笔者曾经出版过Activit5.10,Activiti底层使用流程虚拟机,而Activiti6.0,却完全没有流程虚拟机的影子
是啊,activiti 6.0的变化太大了。感觉都没精力了233.
不过倒是想折腾折腾 flowable的,毕竟又是 另一个原作者的分支,挺好奇的
黑子鱼咖

引用来自“黑子鱼咖”的评论

哦哦 6.0,我现在在折腾 5.21.不过估计不会去折腾 activiti 反而打算看看 flowable

引用来自“挨踢得要死要死的某瓜”的评论

请教一下,flowable比起来有什么优势么?
:laughing: 暂时没空去玩,所以给不出答案
zqq90
这名字是要逼死强迫疒
eurry
eurry
感谢作者,关注这一系列学下Activiti 6
亚林瓜子
疯狂的产品经理
大漠真人
快说,你是李刚什么人?还少了两个字:讲义:smiley:
糖水番茄
收藏先
OSC_OJaJGe
工作流的选择,需要分析jbmp5和activity各自的优缺点 以及其他备选方案
seno
MARK
freezingsky
activiti5半年前刚做过,一下子都6了
camelwoo
很久没有关注过工作流产品了,看上去近几年没什么新东西啊。
loyal
loyal
看你能疯狂几天...有本事来个100讲...
到那时候肯定有出版社联系你
bwboy
同样,等着看第二章!
杨大仙的程序世界

引用来自“bwboy”的评论

同样,等着看第二章!
连载二和连载三已经在我博客上了,感谢支持
杨大仙的程序世界

引用来自“loyal”的评论

看你能疯狂几天...有本事来个100讲...
到那时候肯定有出版社联系你
本文节选自《疯狂Workflow讲义》,估计10月份会出版,感谢支持
×
杨大仙的程序世界
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: