初始Activiti
一、工作流的定义:
工作流,简单的理解就是工作流程,工作流在我们日常生活中无处不在,例如说:员工请假,首先需要提交请假申请,然后提交的申请转到上级领导手里,领导检查过后并同意,最后通知员工领导同意该请假申请,这一系列的流程就相当于一个工作流程,这一切的工作都会在上级确认并同意后自动运行,这就是工作流技术。Georgakopoulos给出的工作流定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。
常见的oa系统等就经常用到工作流
常见开源工作流引擎框架:OSWorkFlow、jBPM(jboss business process management)、Activity(对jBPM升级)工作流
二、工作流介绍:
工作流引擎:ProcessEngine对象,这是Activity的核心,负责生成流程运行时的各种实例即数据、监控和管理流程的运行。
//该方法会自动加载classpath下名为activiti.cfg.xml文件
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//可以产生RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//可以产生RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//可以产生TaskService
TaskService taskService = processEngine.getTaskService();
//可以产生managementService
ManagementService managementService = processEngine.getManagementService();
//可以产生IdentityService
IdentityService identityService = processEngine.getIdentityService();
//可以产生HistoryService
HistoryService historyService = processEngine.getHistoryService();
//可以产生FormService
FormService formService = processEngine.getFormService();
//可以产生DynamicBpmnService
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
各个Service的作用:
RepositoryService |
管理流程定义 |
RuntimeService |
执行管理,包括启动、推进、删除流程实例等操作 |
TaskService |
任务管理 |
HistoryService |
历史管理(执行完的数据管理) |
IdentityService |
组织机构管理 |
FormService |
一个可选服务,任务表单管理 |
ManagerService |
activiti的引擎管理类 |
简单介绍:
1)RepositoryService
是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工
作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计
算机。除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。
暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操
作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引
擎自动生成的流程图。获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml。
2)RuntimeService
Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
3)TaskService
Activiti的任务管理类。可以从这个类中获取任务的信息。
4)HistoryService
Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根
据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实
例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
5)ManagementService
Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不
在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
三、BPM:
BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内
四、BPMN:
业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何让组合成一个业务流程图(Business Process Diagram),整个BPMN是用一组符号来描述业务流程中发生的各种事件的。BPMN通过在这些符号事件之间连线来描述一个完整的业务流程。
接下来我们来大致了解一下常用符号的含义:
1)事件Event
事件是驱动工作流发展的核心对象,在工作流的流程定制中会经常看到。
2)活动Activity
活动是工作或任务的一个通用术语。一个活动可以是一个任务,也可以是当前流程
的子处理流程。并且,活动会有不同的类型。例如Activiti中定义了
UserTask,ScriptTask,ServiceTask,MailTask等等多种类型。这些活动是构成整个业
务流程的主体
3)网关GateWay
网关是用来处理角色的,他决定了工作流的业务走向。有几种常用的网关需要了解
一下:
3.1)排他网关
只有一条路径会被选择。流程执行到该网关时,会按照输出流的顺序逐个计算,当
条件的结果为true时,继续执行当前网关的输出流。如果有多条线路计算结构都是true,则会执行第一个值为true的路线。如果所有网关计算结果都没有true,引擎会抛出异常。排他网关需要和条件顺序流结合使用,default属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。
3.2)并行网关
所有路径会被同时选择。并行执行所有输出顺序流,为每一条顺序流创建一个并行执行路线。最终,在所有的执行路线都执行完后才继续向下执行。
3.3)包容网关
可以同时执行多条路线。相当于是排他网关和并行网关的结合。可以在网关上设置条件,计算每条路线上的表达式。当表达式计算结果为true时,创建一个并行线路并继续执行。最终,当所有需要执行的线路都执行完成后才继续向下执行。
3.4)事件网关
专门为中间捕获事件而设置。允许设置多个输出流指向多个不同的中间捕获事件。
当流程执行到事件网关后,流程出于等待状态,需要等待抛出对应的事件才能将等
待状态转换为活动状态。
五、数据库
Activity的后台是有数据库的支持,所有的表都以ACT开头。表名的第二部分是表示表的用途的两个字母标识。用途也和服务的API对应
Activity的工作流数据库有23张表
-act_ge_* :通用数据,用于不同场景下,如存放资源文件
-act_hi_* :HI表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等。
-act_re_* :RE表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)
-act_ru_* :RU表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据.Activity只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表就可以一直很小速度很快
-act_id_* :ID表示identity,这些表包含身份信息,比如用户,组等等
1)表结构:
1.1)资源流程规则表
act_re_deployment 部署信息表
act_re_model 流程设计模型部署表
act_re_procdef 流程定义数据表
1.2)运行时数据库表
act_ru_execution 运行时流程执行实例表
act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
act_ru_task 运行时任务节点表
act_ru_variable 运行时流程变量数据表
1.3)历史数据库表
act_hi_actinst 历史节点表
act_hi_attachment 历史附件表
act_hi_comment 历史意见表
act_hi_identitylink 历史流程人员表
act_hi_detail 历史详情表,提供历史变量的查询
act_hi_procinst 历史流程实例表
act_hi_taskinst 历史任务实例表
act_hi_varinst 历史变量表
1.4)组织机构表
act_id_group 用户组信息表
act_id_info 用户扩展信息表
act_id_membership 用户与用户组对应信息表
act_id_user 用户信息表
1.5)通用数据表
act_ge_bytearray 二进制数据表
act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
六、activity.cfg.xml
Activity核心配置文件,配置流程引擎创建工具的基本参数和数据库连接参数
七、Activiti使用步骤
通常使用Activiti时包含以下几个步骤:
.部署Activiti:Activiti包含一堆jar包,因此需要把业务系统和Activiti的环境集成在一起进行部署。
.定义流程:使用Activiti的建模工具定义业务流程.bpmn文件。
.部署流程定义:使用Activiti提供的API把流程定义内容存储起来,在Activiti执行过程汇总可以查询定义的内容。Activiti是通过数据库来存储业务流程的。
.启动流程实例:流程实例也叫ProcessInstance。启动一个流程实例表示开始一次业务流程的运作。例如员工提交请假申请后,就可以开启一个流程实例,从而推动后续的审批等操作。
.用户查询代办任务(task):因为现在系统的业务流程都交给activiti管理,通过activiti就可以查询当前流程执行到哪个步骤了。当前用户需要办理哪些任务也就同样可以由activiti帮我们管理,开发人员不需要自己编写sql语句进行查询了
.用户办理任务:用户查询到自己待办任务后,就可以办理某个业务,如果这个业务办理完成还需要其他用户办理,就可以由activiti帮我们把工作流程往后面的步骤推动。
.流程结束:当任务办理完成没有下一个任务节点的时候,这个流程实例就执行完成了。