Activiti5.10简易教程一
一搭建环境
1.1 JDK 6+
activiti 运行在版本 6 以上的 JDK 上。转到 Oracle Java SE 下载页面,点击按钮“下载 JDK ”。网页中也有安装说明。要核实安装是否成功,在命令行上运行 java – version 。将打印出安装的 JDK 的版本。
1.2 Ant 1.8.1+
从 Ant[http://ant.apache.org/bindownload.cgi] 下载页面下载最新稳定版的 Ant 。解压文件,确保其 bin 文件夹在操作系统的 path 下。在命令行上运行 ant – version
来检查 Ant 是否安装成功。成功将打印安装的 Ant 版本。
1.3 Eclipse 3.7+
从 Eclipse 的下载页面下载 Eclipse Classic( 或 Eclipse JEE) 版的 eclipse 。解压下载的文件,然后就可以运行 eclipse 路径下的 eclipse 文件了。
下载地址: http://www.eclipse.org/downloads/packages/release/indigo/sr2
1.4 Activiti -eclipse designer 插件安装
在安装 Activiti -eclipse designer 插件前先安装 maven 插件, m2e(eclipse) 插件在 Install New SoftWare 安装时会出现些问题,按以下步骤安装即可。
1.4.1 先安装 GEF 插件
maven 插件安装的时候会依赖这个插件,在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://download.eclipse.org/tools/gef/updates/interim/
1.4.2 安装 SVN 插件
在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://subclipse.tigris.org/update_1.6.x
1.4.3 安装 Maven 插件
方式一 :在线安装
在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://nexus.tesla.io:8081/nexus/content/sites/m2e.extras/m2e/1.5.0/N/LATEST/
顺便 eclipse m2e 支持 site : http://www.eclipse.org/m2e/download/
如在线安装不成功,报 [the selected did not contain any resources that can run on server maven project] 错误,建议采用方式二安装。
方式二 :本地安装
下载 maven 和 eclipse-maven3-plugin 插件( eclipse-maven3-plugin 为本人 CSDN 上传)
Maven site: http://ant.apache.org/bindownload.cgi
eclipse-maven3-plugin site: http://download.csdn.net/detail/yangyi22/5663245
在 eclipse 目录下建立 myplugins 目录,将 eclipse-maven3-plugin 解压后文件复制进去,建立 links 目录,新建 maven.link 文件(名字随意取)添加文本:
path=…/eclipse/myplugins/maven ,即让 eclipse 启动时去寻找 myplugins 中的插件,如本人安装的路径: path=D:/Java~coding~site /eclipse[indigo-jee]/eclipse/myplugins/maven
1.4.4 最后安装 Activiti -eclipse designer
打开 Help à Install New Software 。在如下面板中,点击 Add 按钮,然后填入下列字段:l Name : Activiti BPMN 2.0 designer
l Location : http://activiti.org/designer/update/
安装成功后,新建 activiti 项目,视图如下:
安装 m2eclipse 插件后,重启 Eclipse ,如提示 :
Eclipse is running in a JRE, but a JDK is required
Some Maven plugins may not work when importing projects or updating source folders.
需要修改 eclipse.ini 文件,新增一项配置
-vm 配置项必须在– vmargs 配置项前,是因为执行到 -vmargs 配置项已经选择了一个默认的 JVM 了。
所以在– vmargs 前面加上这一句 :
-vm
C:/Program Files/Java/jdk1.6.0_20/bin/javaw.exe
二开始 activiti 5.10 的第一个 demo
2.1 建立 activiti-demo 工程,选择 Activiti Project
创建成功后的项目:
给 activiti-demo 项目添加 activiti 依赖包,项目右键 Build Path->Configure Build Path->libraries -> Add External Jars 选中 …\activiti-5.10\setup\files\dependencies\libs 下所有包添加即可。
2.2 将 activiti-demo 工程的数据库整合为 MySQL
将 …\activiti-5.10\setup\build\activiti-cfg 目录下的 activiti.cfg.xml 配置文件复制到项目 src\main\resources 目录下,修改数据库配置如下:
<!-- Database configurations -->
< property name = "jdbcUrl"
value = "jdbc:mysql://localhost:3306/test?autoReconnect=true" />
< property name = "jdbcDriver"
value = "com.mysql.jdbc.Driver" />
< property name = "jdbcUsername" value = "root" />
< property name = "jdbcPassword" value = "root" />
<!-- Database configurations -->
< property name = "databaseSchemaUpdate" value = "true" />
<!-- job executor configurations -->
< property name = "jobExecutorActivate" value = "false" />
2.3 设计 activiti-demo 工程的流程
在该项目的 src/main/resource/diagrams 下右键创建 Activiti diagram ,文件名为: DemoProcess.bpmn 。
-->
此时进入 Activiti Diagram Editor ,在空白处点一下,下边属性栏中设置 id 和 name , id 就是这个流程的 key ,后边启动流程的时候使用到。
注意: Activiti 5.8 升级到 5.9 以后, xxx.bpmn20.xml 和 xxx.png 已不默认生成,仅仅是生成 xxx.bpmn 文件, xxx.bpmn 中的定义内容就如 xxx.bpmn20.xml 一样。
另外,快捷菜单:“ Create deployment artifacts ”和“ Import BPMN20 file ”,在 5.9 以后去掉了。
如需设计完成流程后自动生成一个 png 图片按如下处理
l 保存无法生存 png 图片按以下处理
Window –> Preferences -> Activiti ->Save 勾选即可
或者手动操作 : 用 Activiti Designer 打开 xxx.bpmn 文件,然后右键 选择 Export Diagram... ,在弹出的对话框中设置图片的参数即可,一般使用默认就可以了。
在设计编辑器中保存 DemoProcess.bpmn 后的项目视图如下:
测试类代码 DemoProcessTest.java
package main.java;
import java.io.FileInputStream;
import java.util.List;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
/**
* Activiti 5.10 demo
* @author BruceQin
*
*/
public class DemoProcessTest {
// diagrams实际路径
private static String realPath =
"D:\\Java~coding~site\\J2EE-IDE\\Workspace\\workspace[indigo-jee]" +
"\\activiti-demo\\src\\main\\resources\\diagrams";
public static void main(String[] args) throws Exception {
// 创建 Activiti流程引擎
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
.buildProcessEngine();
// 取得 Activiti 服务
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 部署流程定义
repositoryService
.createDeployment()
.addInputStream("DemoProcess.bpmn",new FileInputStream(realPath + "\\DemoProcess.bpmn"))
.addInputStream("DemoProcess.png", new FileInputStream(realPath + "\\DemoProcess.bpmn"))
.deploy();
// 启动流程实例
ProcessInstance instance = processEngine
.getRuntimeService().startProcessInstanceByKey("DemoProcess");
String procId = instance.getId();
System.out.println("procId:"+ procId);
// 获得第一个任务
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskDefinitionKey("firstTask").list();
for (Task task : tasks) {
System.out.println("Following task is: taskID -" +task.getId()+" taskName -"+ task.getName());
// 认领任务
taskService.claim(task.getId(), "testUser");
}
// 查看testUser 现在是否能够获取到该任务
tasks = taskService.createTaskQuery().taskAssignee("testUser").list();
for (Task task : tasks) {
System.out.println("Task for testUser: " + task.getName());
// 完成任务
taskService.complete(task.getId());
}
System.out.println("Number of tasks for testUser: "
+ taskService.createTaskQuery().taskAssignee("testUser").count());
// 获取并认领第二个任务
tasks = taskService.createTaskQuery().taskDefinitionKey("secondTask").list();
for (Task task : tasks) {
System.out.println("Following task is : taskID -" +task.getId()+" taskName -"+ task.getName());
taskService.claim(task.getId(), "testUser");
}
//完成第二个任务结束结束流程
for (Task task : tasks) {
taskService.complete(task.getId());
}
// 核实流程是否结束
HistoryService historyService = processEngine.getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();
System.out.println("Process instance end time: " + historicProcessInstance.getEndTime());
}
}