- 浏览: 9617 次
- 性别:
- 来自: 上海
最新评论
-
wytheit:
多谢啊,好东西啊!请问我集成过程中报错:java.lang.C ...
birt3.7.1源代码 -
wangdy0987:
挺好的,谢谢。
activiti学习笔记 -
yin_bp:
,good job
activiti学习笔记 -
ssee:
顶。。。。谢谢了。。
activiti学习笔记
准备工作
JDK 5+
JDK1.5以上版本
Ant 1.8.1+
Ant1.8.1以上版本,运行自带的Demo必须。开发不要求。
Eclipse 3.6.2
Eclipse3.6.2以上版本,Activiti5可视化流程设计插件必须。开发不要求。
Activiti5
下载
http://activiti.org/download.html,当前使用版本5.4。
包含的内容
下载的Activiti发布文件包含如下内容,先关注doc、dependencies下内容。
├─docs
│ ├─javadocs API DOC
│ └─userguide 用户手册
├─setup 演示程序的配置脚本
│ └─files
│ ├─cfg.activiti
│ ├─cfg.cycle
│ ├─cfg.modeler
│ ├─demo
│ ├─dependencies 依赖JAR包说明
│ │ └─libs Activiti5可能用到的所有JAR包,具体什么环境下用什么包参照上级目录的说明文件。
│ ├─h2
│ ├─tomcat
│ └─webapps
└─workspace 源代码
├─activiti-cxf-examples
├─activiti-cycle-examples
├─activiti-engine-examples
├─activiti-groovy-examples
├─activiti-modeler-examples
└─activiti-spring-examples
Activiti的持久化方式
Activiti使用Mybatis3做持久化工作,可以在配置中设置流程引擎启动时创建表。
Activiti使用到的表都是ACT_开头的。
ACT_RE_*:流程定义存储。
ACT_RU_*:流程执行记录,记录流程启动到结束的所有动作,流程结束后会清除相关记录。
ACT_ID_*:用户记录,流程中使用到的用户和组。
ACT_HI_*:流程执行的历史记录。
ACT_GE_*:通用数据及设置。
使用到的表:
ACT_GE_BYTEARRAY:流程部署的数据。
ACT_GE_PROPERTY:通用设置。
ACT_HI_ACTINST:流程活动的实例。
ACT_HI_ATTACHMENT:
ACT_HI_COMMENT:
ACT_HI_DETAIL:
ACT_HI_PROCINST:流程实例。
ACT_HI_TASKINST:任务实例。
ACT_ID_GROUP:用户组。
ACT_ID_INFO:
ACT_ID_MEMBERSHIP:
ACT_ID_USER:用户。
ACT_RE_DEPLOYMENT:部署记录。
ACT_RE_PROCDEF:流程定义。
ACT_RU_EXECUTION:流程执行记录。
ACT_RU_IDENTITYLINK:
ACT_RU_JOB:
ACT_RU_TASK:执行的任务记录。
ACT_RU_VARIABLE:执行中的变量记录。
Activiti自带的几个组件简介和配置说明
activiti-administrator
自带的用户管理系统,维护用户和组,需要配置数据连接参数,在activiti-administrator\WEB-INF\applicationContext.xml中,并加入JDBC驱动包。
activiti-cycle
PVM活动检测的,由activiti-rest提供服务,不需配置。
activiti-explorer
可以查看用户任务和启动流程,由activiti-rest提供服务,不需配置。
activiti-kickstart
简单的点对点流程定义维护工具,需要配置数据连接,把activiti.cfg.xml文件放在classes下,并加入驱动包。
activiti-modeler
在线编辑和维护流程定义的工具,最后以文件夹方式部署,需要配置activiti-modeler\WEB-INF\classes\configuration.properties文件。
activiti-probe
PVM的观测服务,由activiti-rest提供服务,不需配置,可以查看deployment、processdefinition、processinstance、database。
其他几个应用的服务提供者,需要配置数据连接,把activiti.cfg.xml文件放在classes下,并加入驱动包。
数据库
Activiti支持的数据库
Activiti database type |
Versions tested |
Notes |
h2 |
1.2.132 |
Default configured database |
mysql |
5.1.11 |
|
oracle |
10.2.0 |
|
postgres |
8.4 |
|
db2 |
DB2 9.7 using db2jcc4 |
|
mssql |
2008 using JDBC jtds-1.2.4 |
名词解释
关键对象
Deployment:流程部署对象,部署一个流程是创建。
ProcessDefinitions:流程定义,部署成功后自动创建。
ProcessInstances:流程实例,启动流程是创建。
Task:任务,在Activiti中的Task仅指有角色参与的任务,即定义中的UserTask。
Execution:执行计划,流程实例和流程执行中的所有节点都是Execution,如UserTask、ServiceTask等。
服务接口
ProcessEngine:流程引擎接口,提供流程管理和运作的所有接口。
RuntimeService:运行时服务接口,提供流程启动服务,运行中流程查询,运行变量设置和获取。
TaskService:用户任务接口(UserTask),提供运行时任务查询、领取、完成、删除及变量设置用户管理等服务。
IdentityService:用户和组管理接口。
ManagementService:流程引擎管理接口。
HistoryService:流程处理查询接口,包括执行中流程查询和历史流程查询。
Activiti使用
流程定义
l 流程图如下:
l 流程定义如下:
<definitions id="definitions"
targetNamespace="http://activiti.org/bpmn20"
xmlns:activiti="http://activiti.org/bpmn"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">
<process id="financialReport" name="Monthly financial report reminder process">
<startEvent id="theStart" />
<sequenceFlow id='flow1' sourceRef='theStart' targetRef='writeReportTask' />
<userTask id="writeReportTask" name="Write monthly financial report" >
<documentation>
Write monthly financial report for publication to shareholders.
</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>accountancy</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id='flow2' sourceRef='writeReportTask' targetRef='verifyReportTask' />
<userTask id="verifyReportTask" name="Verify monthly financial report" >
<documentation>
Verify monthly financial report composed by the accountancy department.
This financial report is going to be sent to all the company shareholders.
</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id='flow3' sourceRef='verifyReportTask' targetRef='theEnd' />
<endEvent id="theEnd" />
</process>
</definitions>
配置文件
默认文件名称:activiti.cfg.xml
,放在classpath下。
内容如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>
</beans>
结合Spring
l Spring中定义数据连接及事务管理
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/boss?autoReconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
l 定义Activiti配置
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
<property name="mailServerHost" value="mail.xxxx.com" />
<property name="mailServerPort" value="25" />
<property name="mailServerDefaultFrom" value="hrj@xxxx.com" />
<property name="mailServerUsername" value="xxxx" />
<property name="mailServerPassword" value="xxxx" />
</bean>
l 定义流程引擎
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
l 定义流程中使用的对象
<bean id="myServiceTask" class="hrj.activiti.MyServiceTask">
<property name="processEngine" ref="processEngine" />
</bean>
<bean id="myActivityBehavior" class="hrj.activiti.MyActivityBehavior">
<property name="processEngine" ref="processEngine" />
</bean>
<bean id="myExecutionListener" class="hrj.activiti.MyExecutionListener">
</bean>
<bean id="valueBean" class="hrj.activiti.ValueBean">
<property name="value" value="张三李四" />
</bean>
创建流程引擎
l 根据默认的配置文件创建默认的流程引擎。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
l 也可以通过代码由ProcessEngineConfiguration创建一个流程引擎,这种方式不需要配置文件,可以在ProcessEngineConfiguration中设置配置文件中有的所有参数。
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResourceDefault()
.setMailServerHost("gmail.com")
.setJdbcUsername("mickey")
.setJdbcPassword("mouse")
.buildProcessEngine();
l 由Spring创建流程引擎。见结合Spring
部署流程
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("FinancialReportProcess.bpmn20.xml")
.deploy();
还可以通过字符串,zip包,inputStream等方式部署流程。
启动流程
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");
启动流程使用流程定义中的process
id="financialReport",可以绑定一个String
类型的businessKey和 Map类型的流程变量集合
查询任务
流程定义中,第一个任务是指定accountancy角色处理的。
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>accountancy</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
取得任务接口
TaskService taskService = processEngine.getTaskService();
查询流转到accountancy的任务
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();
领取任务
如果fozzie是accountancy下的一个用户
for (Task task : tasks) {
// fozzie领取任务
taskService.claim(task.getId(), "fozzie");
}
完成任务
查询用户fozzie可处理的任务
tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();
for (Task task : tasks) {
//完成任务
taskService.complete(task.getId());
}
查询
流程部署查询
DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
List<Deployment> deploymentList = deploymentQuery.list();
流程定义查询
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
List<ProcessDefinition> processDefinitionList = processDefinitionQuery.orderByProcessDefinitionId().asc().list();
处理中的流程实例查询
RuntimeService runtimeService = processEngine.getRuntimeService();
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().list();
处理完成的流程实例查询
HistoricProcessInstanceQuery historicProcessInstanceQuery = processEngine.getHistoryService()
.createHistoricProcessInstanceQuery();
List<HistoricProcessInstance> historicProcessInstanceList = historicProcessInstanceQuery.finished().orderByProcessInstanceStartTime().asc().list();
流程处理记录查询
l 仅得到流程中的UserTask节点
HistoricTaskInstanceQuery historicTaskInstanceQuery = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery();
List<HistoricTaskInstance> historicTaskInstanceList = historicTaskInstanceQuery.processInstanceId(processInstanceId)
.orderByHistoricActivityInstanceStartTime().asc().list();
l 查询流程中所有节点
HistoricActivityInstanceQuery historicActivityInstanceQuery=processEngine.getHistoryService().createHistoricActivityInstanceQuery();
List<HistoricActivityInstance> historicActivityInstanceList = historicActivityInstanceQuery.processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
常用的节点
Start events
流程的开始,必须。
Timer start event
用于定时启动的流程,可定时启动一次,或按时重复启动流程。
定时启动一次的流程:
<startEvent id="theStart">
<timerEventDefinition>
<timeDate>2011-03-11T12:13:14</timeDate>
</timerEventDefinition>
</startEvent>
重复启动的流程:
<startEvent id="theStart">
<timerEventDefinition>
<timeCycle>R4/2011-03-11T12:13:00/PT5M</timeCycle>
</timerEventDefinition>
</startEvent>
时间格式定义参照ISO8601。
R4:重复4次。
2011-03-11T12:13:00:启动的时间。
P:重复。
T5M:每5分钟,T表示时间,5M是5分钟,05S是5秒。
Sequence flow
顺序流
描述当前的节点(开始事件,任务,子流程、结束事件等)完成后流转到哪里。
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />
有条件的顺序流
当前节点在满足定义条件后的流转方向。
<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[${order.price > 100 && order.price < 250}]]>
</conditionExpression>
</sequenceFlow>
默认的顺序流
用于关口(Gateway)之后,和条件顺序流同时存在,不满足所有条件的时候流转去哪里。
<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow2" />
<sequenceFlow id="flow1" sourceRef="exclusiveGw" targetRef="task1">
<conditionExpression xsi:type="tFormalExpression">${conditionA}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="task2"/>
<sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="task3">
<conditionExpression xsi:type="tFormalExpression">${conditionB}</conditionExpression>
</sequenceFlow>
Gateways
Exclusive gateway
互斥关口,流程经过关口后只会走一个顺序流,即使关口后的顺序流都是无条件的。
<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />
<sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1">
<conditionExpression xsi:type="tFormalExpression">${input == 1}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2">
<conditionExpression xsi:type="tFormalExpression">${input == 2}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3">
<conditionExpression xsi:type="tFormalExpression">${input == 3}</conditionExpression>
</sequenceFlow>
Parallel Gateway
并行关口,用在开头,流程经过关口后会同时经过所有顺序流,用在结尾,所有流程完成后会一起通过并行关口。
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" />
<parallelGateway id="fork" />
<sequenceFlow sourceRef="fork" targetRef="receivePayment" />
<sequenceFlow sourceRef="fork" targetRef="shipOrder" />
<userTask id="receivePayment" name="Receive Payment" />
<sequenceFlow sourceRef="receivePayment" targetRef="join" />
<userTask id="shipOrder" name="Ship Order" />
<sequenceFlow sourceRef="shipOrder" targetRef="join" />
<parallelGateway id="join" />
<sequenceFlow sourceRef="join" targetRef="archiveOrder" />
<userTask id="archiveOrder" name="Archive Order" />
<sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" />
<endEvent id="theEnd" />
User task
人工任务,必须要有人或人的组参与。
<userTask id='theTask' name='important task' >
<humanPerformer>
<resourceAssignmentExpression>
<formalExpression>kermit</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>
Script Task
脚本任务,可以执行一段脚本,Javascript,grove都可以使用,可以在脚本中定义或修改变量,来控制流程的流转。
<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy">
<script>
sum = 0
for ( i in inputArray ) {
sum += i
}
def scriptVar = "test123" //局部变量,当前脚本可用。
execution.setVariable("myVar", scriptVar) //设置变量,整个流程可用。
</script>
</scriptTask>
- Activiti5学习笔记.rar (129.6 KB)
- 下载次数: 200
相关推荐
Activiti学习笔记,介绍Activiti的组成结构,工作流BPMN2.0规范等
在“Activiti学习笔记三:管理流程定义”中,我们将深入探讨如何使用Activiti来管理和操作流程定义。 首先,流程定义是Activiti中的核心概念,它是流程模型的静态表示,描述了工作流的结构和规则。流程定义通常以...
在本篇Activiti学习笔记中,我们将探讨如何在工作流引擎Activiti中分配组任务,这对于构建企业级流程管理系统至关重要。Activiti是一个轻量级、开源的业务流程管理(BPM)和工作流系统,它提供了强大的流程定义、...
在本篇Activiti学习笔记中,我们将深入探讨工作流定义中的关键概念——角色组,以及它们在Activiti流程引擎中的应用。Activiti是一款强大的、开源的企业级工作流和业务自动化引擎,广泛应用于业务流程管理(BPM)...
Activiti 学习笔记11:接收活动(receiveTask,即等待活动)
本学习笔记将聚焦于流程执行的历史记录,这是理解流程运行情况、追踪问题以及优化流程的关键。 一、Activiti 的历史记录功能 历史记录是 Activiti 中的一个重要特性,它允许开发者和管理员查看已经执行过的流程实例...
在本篇学习笔记中,我们将深入探讨并行网关的工作原理、使用场景以及如何在 Activiti 中进行配置。 一、并行网关的概念 并行网关,也称为并发网关,允许流程实例同时沿着多个路径进行,这些路径可以是独立的,然后...
本篇学习笔记将深入探讨SequenceFlow的概念、作用以及如何在流程设计中使用。 一、SequenceFlow简介 SequenceFlow 是 Activiti 流程模型中的概念,它表示了流程实例从一个活动(Activity)到另一个活动的流转。每个...
本篇学习笔记将深入探讨如何在Activiti中进行个人任务的分配。 一、理解个人任务 在Activiti中,个人任务(User Task)代表了流程中的一个节点,这个节点只能由特定的用户或用户组来处理。这种任务的分配方式确保了...
理解并熟练操作流程变量是深入学习 Activiti 的关键部分。 在 Activiti 中,流程变量可以在以下场景中发挥作用: 1. **定义变量**:在 BPMN2.0 流程图中,可以通过 `user task`、`service task` 或其他元素的属性...
本学习笔记主要聚焦在开始活动节点以及如何判断流程是否结束,同时涵盖了查询历史流程实例的相关内容。 一、开始活动节点(Start Event) 在 Activiti 流程图中,开始活动节点(Start Event)标志着流程的起始点。...
在企业工作流管理系统中,Activiti 是一个广泛使用的开源流程引擎,它允许开发者设计、运行和管理业务流程。本篇文章将深入探讨Activiti中的一个重要概念——排他网关(Exclusive Gateway),也称为独占网关。排他...
本学习笔记将深入探讨流程实例和任务执行这两个关键概念。 流程实例是 Activiti 中的一个核心概念,它代表了流程定义在实际运行中的一个具体执行。当你启动一个流程,实际上就是创建了一个流程实例。流程实例是动态...
### Activiti5学习笔记核心知识点解析 #### 一、Activiti5概述与环境搭建 **Activiti5**是一款开源的工作流引擎,基于Java语言开发,主要用于实现业务流程管理(BPM)和工作流自动化。其核心特性包括流程建模、...
本学习资料集合包含两份文档:《Activiti学习笔记.docx》和《Activitiʵ۸.pdf》,它们将帮助你快速入门并逐步深入理解Activiti的核心功能。 《Activiti学习笔记.docx》可能是作者在学习过程中整理的笔记,通常这类...
### Activiti5学习笔记知识点概览 #### 一、Activiti5概述与环境搭建 - **JDK版本**: 使用Activiti5至少需要JDK 1.5或更高版本。建议使用较新版本以获得更好的性能和支持。 - **构建工具**: Ant 1.8.1或以上版本是...
本文将深入探讨Activiti 5.9 的学习笔记,特别是关于流程发布的部分,这对于理解如何在实际环境中部署和运行流程至关重要。 ### 1. Activiti 简介 Activiti 是一个轻量级、灵活且强大的业务流程管理系统(BPM),它...
深入学习,我们关注到Activiti数据库的各个部分: 1. 资源库流程规则表: - act_re_deployment:包含部署信息。 - act_re_model:流程设计模型的部署信息。 - act_re_procdef:存储流程定义数据。 2. 运行时...