<strong><span style="font-size:32px;">1、流程部署操作,增、删、改(添加)、查</span></strong>
package cs.jbpm.b_processdefinition;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipInputStream;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessDefinitionQuery;
import org.jbpm.api.ProcessEngine;
import org.junit.Test;
public class ProcessDefinitionTest {
// 使用指定的配置文件生成ProcessEngine对象
// private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
// 使用默认的配置文件生成ProcessEngine对象(jbpm.cfg.xml)
// private ProcessEngine processEngine = new Configuration().buildProcessEngine();
// 获取单例的ProcessEngine对象(使用的是默认的配置文件:jbpm.cfg.xml)
private ProcessEngine processEngine = Configuration.getProcessEngine();
//1、 部署(添加)
// jbpm4_deployment
// jbpm4_lob
// jbpm4_deployprop
@Test
public void testDeploy() throws Exception {
// NewDeployment deployment = processEngine.getRepositoryService().createDeployment();
// deployment.addResourceFromClasspath("helloworld/helloworld.jpdl.xml");
// deployment.addResourceFromClasspath("helloworld/helloworld.png");
// deployment.deploy();
String deploymentId = processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromClasspath("helloworld/hellow.jpdl.xml")//
.addResourceFromClasspath("helloworld/hellow.png")//
.deploy();
System.out.println("部署成功:deploymentId = " + deploymentId);
}
// 部署(zip)
@Test
public void testDeploy_zip() throws Exception {
// 找到zip资 源
InputStream in = this.getClass().getClassLoader().getResourceAsStream("cs/jbpm/b_processdefinition/first.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
// 部署
String deploymentId = processEngine.getRepositoryService()//
.createDeployment()//
.addResourcesFromZipInputStream(zipInputStream)//
.deploy();
System.out.println("部署成功:deploymentId = " + deploymentId);
}
// 2、查询所有
@Test
public void findAll() throws Exception {
// 查询
List<ProcessDefinition> list = processEngine.getRepositoryService()//
.createProcessDefinitionQuery()//
// 过滤条件
// .processDefinitionKey("")//
// .processDefinitionNameLike("%xx%")//
// 排序条件
// .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)//
// .orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)//
// 执行查询
// .uniqueResult();
// .count();
// .page(firstResult, maxResults)//
.list();
// 显示
for (ProcessDefinition pd : list) {
System.out.println("id=" + pd.getId()// 格式为:{key}-{version},用于唯一的标识一个流程定义
+ ", name=" + pd.getName()// 流程定义的名称,jpdl.xml中根元素的name属性的值
+ ", key=" + pd.getKey()// 流程定义的key,jpdl.xml中根元素的key属性的值,默认是name属性的值
+ ", version=" + pd.getVersion()// 自动生成的,同一个名称的第一个为1,以后的自动加1.
+ ", deploymentId=" + pd.getDeploymentId()); // 所属的部署对象
}
}
@Test
public void testMap() {
//map中只能有一个唯一的key,如果有两个拿最后放入的key
Map<String,String> maps=new HashMap<String,String>();
maps.put("a", "a-1");
maps.put("a", "a-2");
for(String m:maps.values()){
System.out.println(m);
}
}
// 查询所有最新版本的流程定义
@Test
public void findAllLatestVersions() throws Exception {
// 1、查询所有,让所有最大的版本都排到最后面
List<ProcessDefinition> list=processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
.list();
// 2、过滤出所有最新的版本
//map中只能有一个唯一的key,如果有两个拿最后放入的key
Map<String,ProcessDefinition> maps=new HashMap<String,ProcessDefinition>();
for (ProcessDefinition pd : list) {
pd.getName();
maps.put(pd.getKey(), pd);
}
//3、 显示
for (ProcessDefinition pd : maps.values()) {
System.out.println("id=" + pd.getId()// 格式为:{key}-{version},用于唯一的标识一个流程定义
+ ", name=" + pd.getName()// 流程定义的名称,jpdl.xml中根元素的name属性的值
+ ", key=" + pd.getKey()// 流程定义的key,jpdl.xml中根元素的key属性的值,默认是name属性的值
+ ", version=" + pd.getVersion()// 自动生成的,同一个名称的第一个为1,以后的自动加1.
+ ", deploymentId=" + pd.getDeploymentId()); // 所属的部署对象
}
}
//3、 删除
@Test
public void deleteById() throws Exception {
String deploymentId = "10001";
// // 删除指定的部署对象(流程定义),如果有关联的执行信息,就会报错
// processEngine.getRepositoryService().deleteDeployment(deploymentId);
// 删除指定的部署对象(流程定义),如果有关联的执行信息,会被同时删除
processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
}
// 删除指定key的所有版本的流程定义
@Test
public void deleteByKey() throws Exception {
// 查询出指定key的所有版本的流程定义
List<ProcessDefinition> lists=processEngine.getRepositoryService().createProcessDefinitionQuery()
.processDefinitionKey("test")
.list();
// 一一删除
for (ProcessDefinition pd : lists) {
processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
}
}
//4、 查看流程图(xxx.png)
@Test
public void getImageResource() throws Exception {
String deploymentId = "40001";
String resourceName = "helloworld/hellow.png";
// 获取指定部署对象中的所有资源的名称
Set<String> names=processEngine.getRepositoryService().getResourceNames(deploymentId);
System.out.println("所有的资源名称:");
for (String name : names) {
System.out.println("\t"+name);
}
// 获取指定部署对象中的指下资源的内容
InputStream in=processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
// 保存到e盘
String path="e:"+File.separator+"process.png";
OutputStream out=new FileOutputStream(path); //输出流到d盘
for (int i=-1;(i=in.read())!=-1;) { //读到流的末尾返回-1
out.write(i);
}
out.close();
in.close();
}
}