Activiti工作流学习总结(二)
- Activiti流程引擎配置
ProcessEngineConfiguration对象代表一个Activiti流程引擎的全部配置,该类提供一系列创建ProcessEngineConfiguration的静态方法
创建ProcessEngineConfiguration的静态方法
createProcessEngineConfigurationFromResourceDefault
createProcessEngineConfigurationFromResource
createProcessEngineConfigurationFromInputStream
createStandaloneProcessEngineConfiguration
ProcessEngineConfiguration及其子类
Activiti的命令拦截器
Activiti涉及命令模式、责任链模式
配置文件
Maven的pom.xml文件,Activiti的默认配置文件activiti.cfg.xml
History属性有点像log4j的日志输出级别,有四个值
none :不保存任何历史数据,流程执行过程中最高效
activity:保存流程实例与流程行为,其他数据不保存
audit:出activity级别会保存的数据外,还会保存全部的流程任务极其属性,audit为history的默认值
full:保存历史数据的最高级别,还会保存其他全部流程相关的细节数据(包括一些流程参数)
<!--数据库配置方式一:直接使用jdbc的各种属性来配置,全部交给了activiti-->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activi1" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="root" />
<!-- 数据库配置方式二:将数据库的各种配置交给DBCP,然后activiti只配置DBCP数据库 -->
<propertyname="dataSource"ref="dataSource"></property>
<!-- DBCP数据库 -->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property>
<propertyname="url"value="jdbc:mysql://localhost:3306/activi1"></property>
<propertyname="username"value="root"></property>
<propertyname="password"value="root"></property>
</bean>
DBCP数据源配置
ProcessEngineConfiguration提供了一个DataSource属性
C3P0数据源配置
DBCP与C3P0的属性名称不一样
Activiti默认支持H2数据库,H2是使用Java语言编写的,使用H2数据库不需要安装服务器或者客户端,只需提供一个jar包即可使用
H2数据库更适合单元测试
H2数据库的下载安装
http://jingyan.baidu.com/album/afd8f4de4683af34e386e97f.html?picindex=2
没有配置databaseType属性,Activiti会使用Connection的getDatabaseMetaData方法获取数据库元数据,一旦配置了databaseType属性,将会以该值为准。
注意这三个值的区别
pom.xml文件中添加依赖(自动加载依赖的jar包)
- 流程引擎的创建
ProcessEngine的创建
ProcessEngineConfiguration的buildProcessEngine方法
ProcessEngines的init方法
在Activiti中,一个ProcessEngine实例代表一个流程引擎,ProcessEngine保存着各个服务组件的实例
RepositoryService:提供一系列管理流程定义和流程部署的API
RuntimeService:在流程运行时对流程实例进行管理与控制
TaskService:对流程任务进行管理。例如任务提醒、任务完成和分配任务等
IdentityService:提供对流程角色数据进行管理的API,这些角色数据保罗用户组、用户以及他们之间的关系
ManagementService:提供对流程引擎进行管理和维护的服务
HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据
具体开发流程(代码实现)
开发中遇到的问题
流程图的后缀为
类关联关系
HelloWorld工作流开发
流程图
流程配置
- 用户组与用户
IdentityService主要用于管理Activiti的身份数据模块,API包括用户组数据管理、用户数据管理、用户信息管理和关系数据管理
Group对象(接口)--GroupEntity(实体)
User对象(接口)--UserEntity(实体)
Activiti数据查询
Activiti提供API供开发者使用,每个服务组件的createXXXQuery方法可以获取 这些查询对象,返回一个Query实例
Query是全部查询对象的父接口,定义了若干个基础方法,包括设置排序方、数据量统计(count)、列表。分页和唯一记录查询
Activiti的查询API分为:
1 标准查询 以Java对象的方式,创建一个指定类型的Query对象,然后链式编程查询。 缺点:不支持复杂的查询。 2 Nativit查询 采用标准SQL的方式查询,因此支持复杂的查询。 缺点:仅支持部分对象的查询。
asc:设置查询结果的排序方式为升序
count:计算查询结果的数据量
desc:设置查询结果的排序方式为降序
list:封装查询结果,返回相应类型的集合
listPage:分页返回查询结果
singleResult:查询单条符合条件的数据,如果查询不到,则返回null,如果查到到多条记录,则抛出异常
- 流程存储
RepositoryService主要用于对Activiti中的流程存储的相关数据进行操作,包括对流程存储数据的管理、流程部署以及对流程的基本操作
Deployment对象(接口)--DeploymentEntity(实体)
DeploymentBuilder对象
流程定义管理
ProcessDefinition对象(接口),一个ProcessDefinition实例表示一条流程定义数据--ProcessDefinitionEntity(实体)
DeploymentQuery对象、ProcessDefinitionQuery对象
- 流程任务管理
TaskService操作流程任务的API,包括任务的查询、创建与删除、权限设置和参数设置
Task(接口)--TaskEntity(实体)
一个Task实例表示流程中一个任务
Attachment(接口、任务附件)--AttachmentEntity(实体)
Comment(任务评论)、Event(接口)--CommentEntity(实体)
任务声明与完成:claim方法进行任务受理人指定(类似于setAssignee方法)、complete方法进行任务完成
- 流程控制
RuntimeService主要用于管理流程在运行时产生的数据以及提供对流程进行操作的API
流程运行时产生的数据包括流程参数、事件、流程实例以及执行流,流程的操作包括开始流程、让流程前进等
Activiti中,启动一个流程后,会创建一个流程实例(ProcessInstance),每个流程实例至少会有一个执行流(Execution)
ProcessInstance是执行流(Execution)的子接口
- 历史数据管理和流程引擎管理
HistoryService、ManagementService、HistoricProcessInstanceQuery
工作管理,JobQuery对象
- 流程事件
事件的分类
按事件位置:开始事件、结束事件、中间事件、边界事件
按特性:Catching事件、Throwing事件
- 流程任务
任务有:UserTask、ServiceTask、SendTask、ScripTask、ReceiveTask、ManualTask、BusinessTask
流程文件中全部XML元素均直接或者间接继承于BaseElement
FlowElement:FlowNode、SequenceFlow(流程节点和顺序流)
FlowNode:Activiti(行为)、Event(事件)、GateWay(关口)
Activiti的流程中表示行为的元素有三类:SubProcess(嵌入子流程)、CallActiviti(调用子流程)、Task(任务)