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

京东购买地址:https://item.jd.com/12246565.html

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

工作流Activiti教学视频:https://my.oschina.net/JavaLaw/blog/1577577

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)

疯狂Activiti6.0连载(1)Activiti介绍

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

活动(Activities)

疯狂Activiti6.0连载(1)Activiti介绍

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

网关(Gateways)

疯狂Activiti6.0连载(1)Activiti介绍

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

顺序流(Sequence Flow)

疯狂Activiti6.0连载(1)Activiti介绍

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

消息流(Message Flows)

疯狂Activiti6.0连载(1)Activiti介绍

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

关联(Association)

疯狂Activiti6.0连载(1)Activiti介绍

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

池(Pool)

疯狂Activiti6.0连载(1)Activiti介绍

存放道的容器。

道(Lane)

疯狂Activiti6.0连载(1)Activiti介绍

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

数据对象(Data Object)

疯狂Activiti6.0连载(1)Activiti介绍

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

消息(Message)

疯狂Activiti6.0连载(1)Activiti介绍

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

组(Group)

疯狂Activiti6.0连载(1)Activiti介绍

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

注释(Text Annotation)

疯狂Activiti6.0连载(1)Activiti介绍

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

        以上为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之旅。

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

京东购买地址:https://item.jd.com/12246565.html

疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397

工作流Activiti教学视频:https://my.oschina.net/JavaLaw/blog/1577577

本书代码目录:https://gitee.com/yangenxiong/CrazyActiviti

疯狂Activiti6.0连载(1)Activiti介绍

疯狂Activiti6.0连载(1)Activiti介绍

转载于:https://my.oschina.net/JavaLaw/blog/1542434

相关文章:

  • 2021-09-30
  • 2021-11-07
  • 2021-09-18
  • 2021-07-28
  • 2021-07-28
  • 2021-11-10
  • 2021-11-18
  • 2021-10-19
猜你喜欢
  • 2021-09-01
  • 2021-09-27
  • 2021-12-27
  • 2021-06-26
  • 2021-08-10
  • 2021-04-29
  • 2021-06-18
相关资源
相似解决方案