目录
官网:https://www.activiti.org/documentation
git:https://github.com/Activiti/Activiti
介绍
Activiti项目是基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,以JAVA编程实现的工作流引擎。
BPMN(Business Process Modeling Notation)叫业务流程建模符号,它定义了一个业务流程图(Business Process Diagram),该业务流程图基于一个流程图(flowcharting),该流程图被设计用于创建业务流程操作的图形化模型。其中一个业务流程模型(Business Process Model),指一个由的图形对象(graphical objects)组成的网状图,图形对象包括活动(acticities)和用于定义这些活动执行顺序的流程控制器(flow controls)。
架构原理
整体结构
流程引擎
逻辑描述
- 通过入口配置文件activiti.cfg.xml,得到ProcessEngineConfiguration实例。
- 由ProcessEngineConfiguration实例得到ProcessEngine实例。
- 通过ProcessEngine实例得到Activiti提供所有接口服务。
架构组件说明
- EngineServices:该接口中定义了获取各种服务类实例对象的方法。
- ProcessEngine:继承EngineServices接口,并增加了对流程引擎名称的获取以及关闭流程引擎的支持。
- ProcessEngineImpl: 是引擎默认的实现类,对ProcessEngine接口中定义的方法进行实现,对外提供服务。实际上,这些对外提供的服务是由 ProcessEngineConfigurationImpl 构造的,ProcessEngineImpl 调用 ProcessEngineConfigurationImpl 的方法获得服务。
- ProcessEngines:该类负责管理所有的流程引擎ProcessEngine集合,并负责流程引擎实例对象的注册、获取、注销等操作。
- ProcessEngineConfiguration:该抽象类实现EngineServices接口,提供了一系列创建流程引擎配置类ProcessEngineConfiguration实例对象的方法。
- ProcessEngineConfigurationImpl:该抽象类继承ProcessEngineConfiguration,负责创建一系列服务类实例对象、流程引擎实例对象以及ProcessEngineImpl类实例对象。该类可以通过流程配置文件交给Spring容器管理或者使用编程方式动态构建。
- SpringProcessEngineConfiguration:主要用于整合Spring框架时使用,提供了几个重要功能:创建流程引擎实例对象,流程引擎启动之后自动部署配置的流程文档(需要设置),设置流程引擎连接的数据源、事务管理器等。
- StandaloneProcessEngineConfiguration:标准的流程引擎配置类。
- MultiSchemaMultiTenantProcessEngineConfiguration:“多数据库多租户”流程引擎配置类,Activiti通过此类为开发人员提供了自动路由机制,这样当流程引擎需要连接多个数据库进行操作时,客户端无须关心引擎到底连接的是哪一个数据库,该类通过路由规则自动选择需要操作的数据库,数据库的操作对客户端来说是透明的,客户端无须关心其内部路由实现机制。
- JtaProcessEngineConfiguration:顾名思义,通过类名也知道该类支持JTA。
- StandaloneInMemProcessEngineConfiguration:该类通常可以在开发环境中自测使用,默认采用H2数据库存储数据。
- EngineServices提供的服务类如下:
service | description | 作用 |
RepositoryService | Activiti的资源管理类 | 流程定义和部署相关的存储服务 |
RuntimeService | Activiti的流程运行管理类 | 流程运行时相关的服务,如根据流程好启动流程实例startProcessInstanceByKey |
TaskService | Activiti的任务管理类 | 流程运行过程中,每个任务节点的相关操作接口,如complete,delete,delegate等 |
HistoryService | Activiti的历史管理类 | 历史记录相关服务接口 |
ManagerService | Activiti的引擎管理类 | 引擎管理service,和具体业务无关,主要用于查询引擎配置、数据库、作业等 |
FormSerivice | Activiti的表单管理类 | 用于读取和流程、任务相关的表单数据 |
IdentityService | Activiti的认证管理类 | 管理和查询用户、组之间的关系 |
ps:其中Activiti在新版本(Activiti7.0)中,IdendityService和FormService都已经删除了
表结构说明
25张表(activiti7.0:28张)
- ACT_RE_*: RE表示repository(3)。这个前缀的表包含了流程定义和流程 静态资源(图片、规则等等)
- ACT_RU_*: RU表示runtime(6)。这些运行时的表,包含流程实例,认为,变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保持这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。
- ACT_HI_*: HI表示history(8)。这些表包含历史数据,比如历史流程实例,遍历,任务等等。
- ACT_GE_*: GE表示general(2)。通用数据,用于不同场景。
- ACT_ID_*: ID表示id(4)。认证及用户相关数据。
- ACT_EVT_LOG: 事件日志。
- ACT_PROCDEF_INFO: 流程关联信息。
工作机制实现过程
- 业务流程图要规范化,要遵守一套标准。
- 业务流程图本质上是一个xml文件,这样就可以存入所有数据。
- 读取业务流程图的过程就是解析xml文件的过程。
- 读取一个业务流程图中的节点就相当于是解析一个xml结构,进一步将数据插入到MySQL的表中,形成一条记录。
- 将所有的节点都读取并存入MySQL表中。
- 后面只要读取MySQL表中的记录就可以了,读一条记录就相当于读一个节点。
- 业务流程的推进,后面就转化为读取标准数据,并且处理数据,结束时这一行数据进入历史库。
设计器
二种方式:
- Idea通过actiBPM插件在线流程设计,保存xml文件。
- 通过引入activiti-modeler在线流程设计器来实现。但目前activiti最高只支持5.23版本。
集成实践
实践源码:https://github.com/huhua1990/cp3-activiti-flowable.git(已实现基础流程架构)
activiti API参考:http://www.mossle.com/docs/activiti/index.html#N16608