Activiti
教程
1.
activiti
介绍
Activiti
是由
Alfresco
软件在
2010
年
5
月
17
日发布的业务流程管理
(BPM)
框架
,
它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。
Activiti
基于
Apache
许可的开源
BPM
平台,创始人
Tom Baeyens
是
JBoss JBPM
的项目架构师,它的特色是提供了
eclipse
插件,开发人员可以通过插件直接绘画出业务流程图。
1.1
工作流引擎
ProcessEngine
对象,这是
Activiti
工作的核心。负责生成流程运行时的各种实例及数据,监控和管理流程的运行。
1.2
BPMN
业务流程建模与标注(
Business Process Model and Notation,BPMN
),描述流程的基本符号,包括这些图元如何组合成一个业务流程图
(Business Process Diagram)
2.
准备环境
2.1
activiti
软件环境
-
JDK1.6
或者更高版本
-
支持的数据库有
:h2,mysql,oracle,mysql,db2
等
-
支持
activiti
运行的
jar
包,可以通过
maven
依赖引入
-
开发环境为
Eclipse3.7
或者以上版本,
myeclipse
为
8.6
版本
2.2
安装流程设计器
(eclipse
插件
)
1
)打开
Help
à
Install New Software
à
Add
输入
Name: Activiti Designer
Location: http://activiti.org/designer/update/
输入完成后,单击
OK
按钮等待下载完成后安装。
安装完成后在菜单选项中会出现
activiti
的目录选项
2.3
设置
eclipse activit
插件的画流程图 选项
打开菜单
Windows –> Preferences –> Activiti –>Save
下流程图片的生成方式
勾选上
Create process definition image when saving the diagram
操作,勾选上这个操作后在画流程图后保存
eclipse
会自动生成对应的流程图片。
2.4
准备开发环境
2.4.1
创建
maven web
项目,在
maven
中添加
activiti
依赖
在
eclipse
左边工作栏右键
New
选择创建
Maven Project
项目,创建一个名为
ActivitiTest
的项目
点击
Finish
完成。
右键项目选择
Properties
,选择
Project Facets
勾选上图中的选项,点击
Apply
,再点击
OK
然后将项目转换成
web
项目
,
右键项目选择
Properties,
在
Project Facets
中做如下勾选
,
然后点击
Appy
应用和
OK
确定
然后右键项目
Properties
,选择
Deployment Assembly,
将
test
相关目录
Remove
掉之保留
main
下面需要发布的内容,如下图
然后点击
Appply
和
OK
然后在
pom.xml
文件中添加以下依赖
<project
xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>ActivitiTest</groupId>
<artifactId>ActivitiTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!– postgresql
数据库驱动包开始
根据数据库选择
–>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1103-jdbc41</version>
</dependency>
<!– postgresql
数据库驱动包结束
–>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</project>
更新
maven
项目下载
jar
包
2.4.2
初始化数据库
1
)
src/main/resource
目录下创建
activiti.cfg.xml
文件
,
内容如下
<?
xml
version
=
“1.0”
encoding
=
“UTF-8”
?>
<
beans
xmlns
=
“http://www.springframework.org/schema/beans”
xmlns:xsi
=
“http://www.w3.org/2001/XMLSchema-instance”
xmlns:context
=
“http://www.springframework.org/schema/context”
xmlns:tx
=
“http://www.springframework.org/schema/tx”
xmlns:jee
=
“http://www.springframework.org/schema/jee”
xmlns:aop
=
“http://www.springframework.org/schema/aop”
xsi:schemaLocation
=
“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd”
>
<bean id=”processEngineConfiguration”
class=”org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration”>
<property name=”jdbcDriver” value=”com.mysql.jdbc.Driver” />
<property name=”jdbcUrl” value=”jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8″ />
<property name=”jdbcUsername” value=”root” />
<property name=”jdbcPassword” value=”123456″ />
<property name=”databaseSchemaUpdate” value=”true”/>
</bean>
</
beans
>
jdbcUrl
为你电脑数据库的
url
jdbcUsername
为数据库用户名
jdbcPassword
为数据库密码
2)
在
main/java
目录下创建任意目录和类
编写创建
activiti
数据表方法
public
class
CreateTable {
/****
*
创建流程表
* */
@
Test
public
void
createTable() {
ProcessEngine
processEngine
= ProcessEngineConfiguration.
createProcessEngineConfigurationFromResource
(
“activiti.cfg.xml”
)
.buildProcessEngine();
System.
out
.println(
“——processEngine:”
+
processEngine
);
}
}
然后运行该测试方法,如果运行成功,在数据库中应该会产生
25
张
activiti
的相关数据表
2.4.3 activiti
表说明
下面是概括了几个常用的数据表
流程部署相关表
act_re_deployement
部署对象表
act_rep_procdef
流程定义表
act_ge_bytearray
资源文件表
act_ge_prperty
主键生成策略表(对于部署对象表的主键
ID
)
流程实例相关表
act_ru_execution
正在执行的执行对象表(包含执行对象
ID
和流程实例
ID
,如果有多个线程可能流程实例
ID
不一样)
act_hi_procinst
流程实例历史表
act_hi_actinst
存放历史所有完成的任务
Task
任务相关表
act_ru_task
代办任务表 (只对应节点是
UserTask
的)
act_hi_taskinst
代办任务历史表 (只对应节点是
UserTask
的)
act_hi_actinst
所有节点活动历史表 (对应流程的所有节点的活动历史,从开始节点一直到结束节点中间的所有节点的活动都会被记录)
流程变量表
act_ru_variable
正在执行的流程变量表
act_hi_variable
流程变量历史表
3.
核心
API
3.1 ProcessEngine
说明
:
1)
在
Activiti
中最核心的类,其他的类都是由他而来。
2)
产生方式
ProcessEngine
processEngine
= ProcessEngines.
getDefaultProcessEngine
();
如果是
spring
配置文件可以配置
bean
注入:
<!– 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” />
</bean>
<bean id=”processEngineFactory” class=”org.activiti.spring.ProcessEngineFactoryBean”>
<property name=”processEngineConfiguration” ref=”processEngineConfiguration” />
</bean>
<bean id=”repositoryService” factory-bean=”processEngineFactory” factory-method=”getRepositoryService” />
<bean id=”runtimeService” factory-bean=”processEngineFactory” factory-method=”getRuntimeService” />
<bean id=”formService” factory-bean=”processEngineFactory” factory-method=”getFormService” />
<bean id=”identityService” factory-bean=”processEngineFactory” factory-method=”getIdentityService” />
<bean id=”taskService” factory-bean=”processEngineFactory” factory-method=”getTaskService” />
<bean id=”historyService” factory-bean=”processEngineFactory” factory-method=”getHistoryService” />
<bean id=”managementService” factory-bean=”processEngineFactory” factory-method=”getManagementService” />
<!– activiti
结束
–>
3
)可以产生
RepositoryService
RepositoryService
repositoryService
=
processEngine
.getRepositoryService();
4)
可以产生
RuntimeService
RuntimeService
runtimeService
=
processEngine
.getRuntimeService();
5)
可以产生
TaskService
TaskService
taskService
=
processEngine
.getTaskService();
各个
Service
的作用
|
|
|
|
|
|
|
|
3.2 RepositoryService
Activiti
的仓库服务类。所谓的仓库指流程定义文档的两个文件:
bpmn
文件和流程图片
该
service
可以用来删除部署的流程定义。
3.3 RuntimeService
是
activiti
的流程执行服务类,可以从这个服务类中获取很多关于流程执行的相关的信息。
3.4 TaskService
是
activiti
的任务服务类。可以从这个类中获取任务的相关信息,如当前正在执行的个人待办和用户组待办任务。
3.5 HistoryService
是
activiti
的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所有待办节点的运行情况。
3.6 ProcessDefinition
流程定义类,可以从这里获得资源文件等。
3.7 ProcessInstance
代表流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
4.
入门
HelloWorld
程序
4.1
创建流程图方法
点击
ActivitiTest
项目,在
src/main/java
目录下创建一个
diagrams
目录用来存放流程图
在当前项目右键选择
Activiti Diagram
流程图输入流程图名称
HelloWorld
,然后点击
OK
,
在控制面板的右边栏有相关的画图图标操作
其中一个流程必须包含一个开始节点和一个结束节点,结束节点可以有多个。
然后使用
StartEvent, UserTask,EndEvent
画出下面的流程图,然后用
Connection
中的
SequenceFlow
连线连接起来。
4.2
创建流程图,如下图
完整文档下载地址:
http://download.csdn.net/download/qq_29582193/10266221