Activiti学习笔记四-开发部署zip格式的流程文件
2015-10-26 22:37
531 查看
上章我们学习了bpmn文件的部署,下面我们开始学习部署带有流程图的流程,也就是打包后的zip文件。打包文件我们使用ant脚本来实现,具体的ant知识请自行百度。
第一步:建立如图的结构目录
![](http://img.blog.csdn.net/20151026223301856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
为了方便管理脚本,我采用每个bpmn对应一个打包脚本。
第二步:copy上章设计的bpmn文件并改名为:MyProcessZip.bpmn,对应的编辑器会自动生成png文件
第三步:编写ant脚本,build.xml脚本内容如下
对应的路径请各位修改为自己的文件路径。
第四步:运行脚本,生成zip文件
对着build.xml文件点击右键点击run as => Antbuild,控制台会输出脚本运行结果,如果没有异常的话,我们刷新工程,在deployments下的simpleProcessZip路径下可以看到压缩好的zip文件,如下图所示:
![](http://img.blog.csdn.net/20151026223404610?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
到这里,打包zip文件的任务就完成了,下面我们开始部署这个zip文件。
新建一个java文件BpmDefinitionZipTest,继承ActivitiTestCase类,BpmDefinitionZipTest.java文件内容如下:
部署时,我们需要用到ZipInputStream来读取文件,部署的时候,由于是zip压缩包,所以需要我们depBuilder.name("myProcessZip").deploy();来给部署的流程设置一个名称,部署完成后,后面的任务处理和bpmn文件是一样的了。
好了,部署zip格式的流程文件就到这里了。
第一步:建立如图的结构目录
为了方便管理脚本,我采用每个bpmn对应一个打包脚本。
第二步:copy上章设计的bpmn文件并改名为:MyProcessZip.bpmn,对应的编辑器会自动生成png文件
第三步:编写ant脚本,build.xml脚本内容如下
<span style="font-family:Microsoft YaHei;font-size:18px;"><project name="activiti" default="workflow.package.MyProcessZip"> <property name="workflow.diagrams" value="../"/> <property name="workflow.deployments" value="../../deployments" /> <target name="workflow.package.MyProcessZip"> <zip destfile="${workflow.deployments}/simpleProcessZip/myProcessZip.zip" basedir="${workflow.diagrams}/simpleProcessZip" update="true" includes="*.bpmn,*.png"> </zip> </target> </project> </span>
对应的路径请各位修改为自己的文件路径。
第四步:运行脚本,生成zip文件
对着build.xml文件点击右键点击run as => Antbuild,控制台会输出脚本运行结果,如果没有异常的话,我们刷新工程,在deployments下的simpleProcessZip路径下可以看到压缩好的zip文件,如下图所示:
到这里,打包zip文件的任务就完成了,下面我们开始部署这个zip文件。
新建一个java文件BpmDefinitionZipTest,继承ActivitiTestCase类,BpmDefinitionZipTest.java文件内容如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">package activiti.test; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInputStream; import javax.annotation.Resource; import org.activiti.engine.HistoryService; 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.repository.DeploymentBuilder; import org.activiti.engine.task.Task; import org.junit.Test; public class BpmPersonProcessZipTest extends ActivitiTestCase{ @Resource private RepositoryService repositoryService; @Resource private RuntimeService runtimeService; @Resource private TaskService taskService; @Resource private HistoryService historyService; @Test public void testDeploy(){ String filePath="/deployments/simplePersonProcess/personProcessZip.zip"; try { InputStream is = Class.class.getClass().getResource(filePath).openStream(); // 部署流程定义1 //repositoryService.createDeployment().addZipInputStream(new ZipInputStream(is)).deploy(); // 部署流程定义2 DeploymentBuilder depBuilder = repositoryService.createDeployment().addZipInputStream(new ZipInputStream(is)); depBuilder.name("personProcessZip").deploy();//自定义的流程名称 // 启动流程实例 String procId = runtimeService.startProcessInstanceByKey("myPersonProcess").getId();//这个为流程定义文件中process的Id /******************第一个任务开始******************************/ List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("fozzie").list(); for (Task task : taskList) { System.out.println("Following task is available for fozzie: " + task.getName()); // 认领任务这里由gonzo认领,因为gonzo是sales组的成员 taskService.claim(task.getId(), "fozzie"); } //查看gonzo是否能够获取该任务 taskList = taskService.createTaskQuery().taskAssignee("fozzie").list(); System.out.println("fozzie当前的任务数:" + taskList.size()); for(Task task : taskList){ System.out.println("the task name is :" + task.getName()); // 执行(完成)任务 taskService.complete(task.getId()); } System.out.println("fozzie当前的任务数:" + taskService.createTaskQuery().taskAssignee("fozzie").count()); /******************第一个任务结束******************************/ /******************第二个任务开始******************************/ taskList = taskService.createTaskQuery().taskCandidateUser("gonzo").list(); for(Task task : taskList){ System.out.println("Following task is available for gonzo: " + task.getName()); taskService.claim(task.getId(), "gonzo"); } //查看kermit是否能够获取改任务 taskList = taskService.createTaskQuery().taskAssignee("gonzo").list(); System.out.println("gonzo当前任务数:" + taskList.size()); for(Task task : taskList){ System.out.println("the task name is :" + task.getName()); taskService.complete(task.getId()); } System.out.println("gonzo当前任务数:" + taskService.createTaskQuery().taskAssignee("gonzo").count()); /******************第二个任务结束******************************/ /******************第三个任务开始******************************/ //获取第三个任务 taskList = taskService.createTaskQuery().taskCandidateUser("kermit").list(); for(Task task : taskList){ System.out.println("Following task is available for kermit: " + task.getName()); taskService.claim(task.getId(), "kermit"); } //查看gonzo是否能够获取改任务 taskList = taskService.createTaskQuery().taskAssignee("kermit").list(); System.out.println("kermit当前任务数:" + taskList.size()); for(Task task : taskList){ System.out.println("the task name is :" + task.getName()); taskService.complete(task.getId()); } System.out.println("kermit当前任务数:" + taskService.createTaskQuery().taskAssignee("kermit").count()); /******************第三个任务结束******************************/ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult(); System.out.println("流程结束时间:" + historicProcessInstance.getEndTime()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } </span>
部署时,我们需要用到ZipInputStream来读取文件,部署的时候,由于是zip压缩包,所以需要我们depBuilder.name("myProcessZip").deploy();来给部署的流程设置一个名称,部署完成后,后面的任务处理和bpmn文件是一样的了。
好了,部署zip格式的流程文件就到这里了。
相关文章推荐
- 编写一个程序,从标准输入读取一些字符,并把它们写到标准输出上。它同时应该计算checksum值,写在后面
- Intel CPU简介
- 数组和矩阵操作
- 签名时加密失败 --“对程序集签名时出错 - 拒绝访问
- 【论文笔记】Applications of Graph Theory in Computer Science
- 【转载】zabbix编译安装方法
- nginx rewrite模块探究与实验
- Universal-Image-Loader配置详细说明
- OTL连接数据库,获取表属性个数
- OC 非常用类 --- NSValue
- R语言中的机器学习包
- javascript——touch事件介绍与实例演示
- Linux extundelete命令
- servlet的执行原理与生命周期
- 2015年10月24日作业
- 论项目的风险管理
- Oracle实例和Oracle数据库(Oracle体系结构)
- JAVA_SE基础——47.接口
- 我在CSDN中的第一个博客
- 20 Factorial digit sum - Project Euler