一、什么是Activiti引擎
- Activiti引擎构成
Activiti Engine:
作为最核心的模块,提供针对BPMN 2.0规范的解析、执行、创建、管理(任务、流程实例)、查询历史记录并根据结果生成报表。
Activiti Modeler :
是模型设计器,其并非由Activiti公司所开发,而是由业界认可的Signavio公司赠送的(Signavio e原本是收费的产品,现在被免费授权给Activiti用户使用)。适用于业务人员把需求转换为规范流程定义。
Activiti Designer:
功能和Activiti Modeler类似,同样提供了基于BPMN 2.0规范的可视化设计功能,但是目前还没有完全支持BPMN规范的定义。适用于开发人员,可以把业务需求人员用Signavio设计的流程定义(XML格式)导入到Designer中,从而让开发人员将其进一步加工成为可以运行的流程定义。
Activiti Explorer:
可以用来管理仓库、用户、组,启动流程、任务办理等。此组件使用REST风格API,提供一个基础的设计模型。如果业务简单,也可以直接使用无需开发。还可以作为后台管理员的流程、任务管理系统使用。
Activiti REST:
提供Restful风格的服务,允许客户端以JSON的方式与引擎的REST API交互,通用的协议具有跨平台、跨语言的特性。
- Activiti对象图
1. ProcessEngine
说明:
- 在Activiti中最核心的类,其他的类都是由他而来。
- 产生方式:
在前面看到了两种创建ProcessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。
- 可以产生RepositoryService
- 可以产生RuntimeService
2. 各个Service的作用:
RepositoryService | 管理流程定义 |
RuntimeService | 执行管理,包括启动、推进、删除流程实例等操作 |
TaskService | 任务管理 |
HistoryService | 历史管理(执行完的数据的管理) |
IdentityService | 组织机构管理 |
FormService | 一个可选服务,任务表单管理 |
ManagerService |
|
1). RepositoryService
是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。
- 产生方式
RepositoryService repositoryService = processEngine.getRepositoryService();
- 可以产生DeploymentBuilder,用来定义流程部署的相关参数
DeploymentBuilder builder = repositoryService.createDeployment();
- 删除流程定义
repositoryService.deleteDeployment(deploymentId);
2)RuntimeService
是activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行相关的信息。
3)TaskService
是activiti的任务服务类。可以从这个类中获取任务的信息。
3)HistoryService
是activiti的查询历史信息的类。在一个流程执行完成后,这个对象为我们提供查询历史信息。
4)ProcessDefinition
流程定义类。可以从这里获得资源文件等。
5)ProcessInstance
代表流程定义的执行实例。如范冰冰请了一天的假,她就必须发出一个流程实例的申请。一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。
5)Execution
Activiti用这个对象去描述流程执行的每一个节点。在没有并发的情况下,Execution就是同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution。
总结:
* 一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
* 当流程按照规则只执行一次的时候,那么流程实例就是执行对象。
二、Activiti引擎的接口使用
- restful api调用
- 创建流程文件loadtest.bpmn20.xml(后缀必须为.bpmn20.xml,.zip,.bar)
- 创建一个新的部署,通过上传已设计好的流程xml文件
Post /activiti-rest/service/repository/deployments?tenantId=20001
3. 激活实例,如果已激活则不用执行此操作
PUT http://localhost:8080/activiti-rest/service/runtime/process-instances/loadapp%3A1%3A2543
4. 创建流程实例
Post /activiti-rest/service/runtime/process-instances
请求体中只能使用processDefinitionId
,processDefinitionKey
或message
三者之一。参数businessKey
,variables
和tenantId
都是可选的。 注意忽略变量作用域,流程变量总是local
。其中:
TenantId只能与processDefinitionKey或message一起使用!
有三种请求方式: