Activiti基础知识

一、简介

Activiti是基于Apache许可的开源BPM平台。基于Spring,ibatis等框架,并在此之上构建了非常清晰的开发框架。是由Alfresco软件发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

二、内置相关表结构

Activiti基础知识_持久化

Activiti基础知识_sql_02

Activiti基础知识_Activiti_03

三、核心类

1 ProcessEngine

流程引擎的抽象,可以通过此类获取需要的所有服务。

2 服务(Service)类

通过ProcessEngine获取,Activiti将不同生命周期的服务封装在不同Service中,包括定义、部署、运行。通过服务类可获取相关生命周期中的服务信息。

2.1 TaskService
流程运行过程中,每个任务节点的相关操作接口,如complete,delete,delegate等。
2.2 RepositoryService
流程定义和部署相关的存储服务。
2.3 RuntimeService
流程运行时相关的服务,如根据流程好启动流程实例startProcessInstanceByKey。
2.4 HistoryService
历史记录相关服务接口。

3 CommandContextIntercepter或CommandExecutor

Activiti使用命令模式作为基础开发模式,如Service中调用的各个方法都对应相应的命令对象。Service将请求委托给命令对象,命令对象来命令接受者,接受者接收后执行并返回结果。而CommandContextIntercepter的作用是拦截所有命令,并在命令前后执行一些公共方法。

4 核心业务对象

org.activiti.engine.impl.persistence.entity包下的类,包括Task,ProcessInstance,Execution等。会根据不同职责实现相应接口的方法(如需要持久化则继承PersistentObject接口),与传统的实体类不同。

5. 上下文组件(Context)

用来保存生命周期比较长,全局性的信息,类似Application,主要包括如下三类。

5.1 CommandContext
命令上下文,保存每个命令必要的资源,如持久化需要的session。
5.2 ProcessEngineConfigurationImpl
流程引擎相关配置信息,整个引擎全局的配置信息,如数据源DataSource等。该对象为单例,在流程引擎创建的时候初始化。
5.3 ExecutionContext
持有ExecutionEntity对象。

6. 持久化组件

Activiti使用ibatis作OR映射,并在此基础上增加设计了自己的持久化框架。在流程引擎创建时初始化。顶层接口Session、SessionFactory。Session有两个实现类:DbSqlSession,负责sql表达式的执行。AbstractManager负责对象的持久化操作。SessionFactory有两个实现类:DbSqlSessionFactory负责DbSqlSession相关操作,GenericManagerFactory负责AbstractManager相关操作。

7. Event-Listener组件

Activiti允许客户代码介入流程执行,提供了事件监听组件。监听的事件类型可以分为TaskListener、JavaDelegate、Expression、ExecutionListener。ProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,方便调用handleInvocation。

8. Cache组件

DbSqlSession中有cache的实现,Activiti基于List和Map来做缓存。如查询时先查缓存,没有则直接查询并放入缓存。

9. 异步执行组件

Activiti可以执行任务,JobExecutor为启核心类,JobExecutor包含三个主要属性:JobAcquisitionThread,BlockingQueue,ThreadPoolExecutor。方法ProcessEngines在引擎启动时调用JobExecutor.start,JobAcquisitionThread 线程即开始工作,其run方法不断循环执行AcquiredJobs中的job,执行一次后线程等待一定时间直到超时或者JobExecutor.jobWasAdded方法,因为有新任务而被调用。

10. PVM:Process Virtal Machine

流程虚拟机API暴露了流程虚拟机的POJO核心,流程虚拟机API描述了一个工作流流程必备的组件,这些组件包括:

    PvmProcessDefinition:流程的定义,形象点说就是用户画的那个图。静态含义。

    PvmProcessInstance:流程实例,用户发起的某个PvmProcessDefinition的一个实例,动态含义。

    PvmActivity:流程中的一个节点

    PvmTransition:衔接各个节点之间的路径,形象点说就是图中各个节点之间的连接线。

    PvmEvent:流程执行过程中触发的事件

四、springboot整合activiti

整合过程中因为使用activiti5.23版本进行流程编辑,部署的时候需要在act_re_deployment这个表添加VERSION_,PROJECT_RELEASE_VERSION_字段。

执行删除部分SQL如下 :

1、ACT_RU_TASK 运行时任务节点表

delete from ACT_RU_TASK where ID_ = ? and REV_ = ?

2、ACT_RU_IDENTITYLINK 运行时流程人员表,主要存储任务节点与参与者的相关信息

delete from ACT_RU_IDENTITYLINK where ID_ = ?

3、ACT_RU_EXECUTION 运行时流程执行实例表

delete from ACT_RU_EXECUTION where ID_ = ? and REV_ = ?

执行更新部分SQL如下:

1、 ACT_HI_PROCINST 历史流程实例表

update ACT_HI_PROCINST set PROC_DEF_ID_ = ?, START_TIME_ = ?,  END_TIME_ = ?, DURATION_ = ?, END_ACT_ID_ = ?, DELETE_REASON_ = ?  where ID_ = ?

2、ACT_HI_ACTINST 历史节点表

update ACT_HI_ACTINST set EXECUTION_ID_ = ?, ASSIGNEE_ = ?, END_TIME_   = ?, DURATION_ = ? where ID_ = ?

3、 ACT_HI_TASKINST 历史任务实例表

update ACT_HI_TASKINST set EXECUTION_ID_ = ?, NAME_ = ?,   PARENT_TASK_ID_ = ?, DESCRIPTION_ = ?, OWNER_ = ?, ASSIGNEE_ = ?,   CLAIM_TIME_ = ?, END_TIME_ = ?, DURATION_ = ?, DELETE_REASON_ = ?,   TASK_DEF_KEY_ = ?, FORM_KEY_ = ?, PRIORITY_ = ?, DUE_DATE_ = ? where   ID_ = ?