Activiti 简易教程一 version5.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按钮,然后填入下列字段:lName: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 -->
<propertyname="jdbcUrl"
value="jdbc:mysql://localhost:3306/test?autoReconnect=true"/>
<propertyname="jdbcDriver"
value="com.mysql.jdbc.Driver"/>
<propertyname="jdbcUsername"value="root"/>
<propertyname="jdbcPassword"value="root"/>
<!-- Database configurations -->
<propertyname="databaseSchemaUpdate"value="true"/>
<!-- job executor configurations -->
<propertyname="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 + <a href="file://\\DemoProcess.png">\\DemoProcess.png</a>)) .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()); } } |
一搭建环境
1.1 JDK 6+
1.2 Ant 1.8.1+
1.3 Eclipse 3.7+
1.4 Activiti -eclipse designer插件安装
1.4.1 先安装GEF插件
1.4.2 安装SVN插件
1.4.3安装Maven插件
1.4.4 最后安装Activiti -eclipse designer
二开始activiti 5.12.1的第一个demo
2.1 建立activiti-demo工程,选择Activiti Project
2.2 将activiti-demo工程的数据库整合为MySQL
2.3 设计activiti-demo工程的流程
以上详细描述参照Activiti 简易教程一 version5.10(http://blog.csdn.net/yangyi22/article/details/9225849)
测试类代码 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.ProcessEngines; 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; public class DemoProcessTest { // diagrams实际路径 private static String realPath = "D:\\Java~coding~site\\J2EE-IDE\\Workspace\\workspace[indigo-jee]" + "\\activiti-512demo\\src\\main\\resources\\diagrams"; public static void main(String[] args) throws Exception { // 创建 Activiti流程引擎 //方式一 自动寻找activiti.cfg.xml ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //方式二 指定加载activiti.cfg.xml // 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.png")) .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()); } } |
依赖jar包说明
Activiti5.10以后的版本已经去掉第三方的jar包,从官网下载的Activiti5.12.1的依赖包仅仅包含activiti相关的jar,目录libs下的jar包如下:
运行测试代码,会发现少了很多依赖包,我的处理的方法是直接从5.10版本导入缺少的jar包,导入后测试代码通过。
jar包:
|