Jbpm笔记之一 -- 流程定义管理( 部署和定义查询、删除、查看流程图)

来源:互联网 发布:焊接软件 编辑:程序博客网 时间:2024/04/30 05:02

1、在数据库中创建表

package cn.jbpm.db;import org.hibernate.cfg.Configuration;import org.junit.Test;public class CreateDB {@Testpublic void testCreateDB(){Configuration configuration = new Configuration();configuration.configure("jbpm.hibernate.cfg.xml");//加载src下的配置文件configuration.buildSessionFactory();//建立session工厂}}

2、获取引擎的工具类

package cn.jbpm.db;import org.hibernate.cfg.Configuration;import org.junit.Test;public class CreateDB {@Testpublic void testCreateDB(){Configuration configuration = new Configuration();configuration.configure("jbpm.hibernate.cfg.xml");//加载src下的配置文件configuration.buildSessionFactory();//建立session工厂}}
3、流程部署的基本使用

package cn.jbpm.pd;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import java.util.zip.ZipInputStream;import org.jbpm.api.Configuration;import org.jbpm.api.Deployment;import org.jbpm.api.ProcessDefinition;import org.jbpm.api.ProcessEngine;import org.junit.Test;import cn.itcast.jbpm.utils.BaseJbpm;public class PDManager extends BaseJbpm{/** * * 涉及到的表 *  JBPM4_DEPLOYMENT * 部署表,用来描述一次部署的 * 字段说明: * DBID_:主键、部署的ID * STATE:状态  active *  JBPM4_LOB * 仓库表  存放了流程定义文档(xml,png) * 字段说明: * DEPLOYMENT_:部署ID外键 * NAME_:xml或者png的文件路径 * JBPM4_DEPLOYPROP * 部署属性表 * 字段说明: * DBID_:主键 * OBJNAME_:流程定义名称 * KEY_:每部署一次,生成4行记录 * langid语言的版本 jpdl-4.4 * pdid{pdkey-version} * pdkey流程定义名称,一般情况下,pdkey和objname_的值是一样的 * pdversion  版本号:如果pdkey没有发生改变,每部署一次,版本号加1,如果pdkey发生改变,则是一个全新的名称,所以版本号应该从1开始计算 *  *///流程部署//从classpath加载@Testpublic void testDeploy(){/*//1、获取流程的引擎ProcessEngine processEngine =  Configuration.getProcessEngine();//2、得到服务RepositoryServices是开一个接口  包含了用来管理发布资源的所有方法 RepositoryService repositoryService = processEngine.getRepositoryService();//3、创建部署NewDeployment newDeployment = repositoryService.createDeployment();//4、加载文件newDeployment.addResourceFromClasspath("qingjia.jpdl.xml");newDeployment.addResourceFromClasspath("qingjia.png");//5、进行实际发布newDeployment.deploy();*///使用方法链ProcessEngine processEngine =  Configuration.getProcessEngine();processEngine.getRepositoryService().createDeployment().addResourceFromClasspath("qingjia.jpdl.xml").addResourceFromClasspath("qingjia.png").deploy();}/** * 从inputstream加载 */@Testpublic void testDeployFromInputStream(){//getClassLoader获取类加载器getResourceAsStream获取流InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");processEngine.getRepositoryService()//获取服务.createDeployment().addResourceFromInputStream("qingjia.jpdl.xml", in).deploy();}/** * 从zipinoutStream加载 */@Testpublic void testDeployFromZipinputStream(){InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");ZipInputStream zipInputStream = new ZipInputStream(in);processEngine.getRepositoryService()//获取服务.createDeployment()//创建部署.addResourcesFromZipInputStream(zipInputStream)//加载文件.deploy();}/** * 查询所有的部署 */@Testpublic void testQueryAllDeploy(){List<Deployment> deploymentList = processEngine.getRepositoryService().createDeploymentQuery()//创建部署查询.list();for(Deployment deployment:deploymentList){//迭代所有部署System.out.println(deployment.getId());//获取部署idSystem.out.print("  ");System.out.println(deployment.getState());//获取部署状态}}/** * 根据部署ID查询部署 */@Testpublic void testQueryDeployByID(){Deployment deployment = processEngine.getRepositoryService()//首先获取服务.createDeploymentQuery()//创建部署查询.deploymentId("10001")//根据部署id过滤.uniqueResult();//得到的是唯一结果System.out.println(deployment.getId());//获取部署idSystem.out.println(deployment.getName());//获取部署名称System.out.print("  ");System.out.println(deployment.getState());//获取部署状态}/** * 查询所有的流程定义 */@Testpublic void testQueryAllPD(){List<ProcessDefinition> pdList = processEngine.getRepositoryService().createProcessDefinitionQuery().list();for(ProcessDefinition pd:pdList){System.out.print("deploymentId: "+pd.getDeploymentId()+",");//得到部署idSystem.out.print(" imageURL: "+pd.getImageResourceName()+",");//得到图片路径System.out.print(" key: "+pd.getKey()+",");//System.out.println(" version:"+pd.getVersion());//得到版本号//数据库里面有什么就可以得到什么}}/** * 根据部署ID查询流程定义(可以查询出一个) */@Testpublic void testQueryPDByDeploymentId(){ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery().deploymentId("10001").uniqueResult();System.out.print("deploymentId:"+pd.getDeploymentId()+",");System.out.print("imageURL:"+pd.getImageResourceName()+",");System.out.print("key:"+pd.getKey()+",");System.out.println("version:"+pd.getVersion());}/** * 根据PDID查询流程定义(只能查询出一个)一个流程控制就一个PDID */@Testpublic void testQueryPDByPDID(){ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId("qingjia-1").uniqueResult();System.out.print("deploymentId:"+pd.getDeploymentId()+",");System.out.print("imageURL:"+pd.getImageResourceName()+",");System.out.print("key:"+pd.getKey()+",");System.out.println("version:"+pd.getVersion());}/** * 根据pdkey查询流程定义(只要key不变,只要部署一次,版本号加1,版本号加1就是一个流程定义) */@Testpublic void testQueryPDByPDKEY(){List<ProcessDefinition> pdList = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("qingjia").list();for(ProcessDefinition pd:pdList){System.out.print("deploymentId:"+pd.getDeploymentId()+",");System.out.print("imageURL:"+pd.getImageResourceName()+",");System.out.print("key:"+pd.getKey()+",");System.out.println("version:"+pd.getVersion());}}/** * 删除 *   只能直接删除流程部署 *   而没有提供删除流程定义的API */@Testpublic void testDeleteDeployment(){processEngine.getRepositoryService()//获取仓库服务类.deleteDeploymentCascade("10001");}/** * (缺陷)根据key得到所有的流程定义,然后遍历每一个流程定义,在得到流程部署,然后依次删除(效率比较慢) *//** * 查询流程图 */@Testpublic void testShowImage()throws Exception{InputStream in =  processEngine.getRepositoryService().getResourceAsStream("20001", "qingjia.png");//获取资源//利用流将文件读取到磁盘上OutputStream out = new FileOutputStream("D:/processimg.png");int len = 0;while((len = in.read())!=-1){out.write(len);}out.close();in.close();}}

常见名称:

bpm(业务流程管理): business process management
jbpm:jboss business process managerment
pdl:process definition language(流程定义语言)
jpdl:jboss process Definition language

0 0
原创粉丝点击