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

本文介绍了Jbpm的流程定义管理,包括如何在数据库中创建相关表,以及如何进行流程部署、定义查询、删除操作,同时讲解了如何查看流程图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在数据库中创建表

package cn.jbpm.db;

import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class CreateDB {

	@Test
	public 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 {

	@Test
	public 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加载
	@Test
	public 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加载
	 */
	@Test
	public void testDeployFromInputStream(){
		//getClassLoader获取类加载器	getResourceAsStream获取流
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");
		processEngine.getRepositoryService()//获取服务
		.createDeployment()
		.addResourceFromInputStream("qingjia.jpdl.xml", in)
		.deploy();
	}
	/**
	 * 从zipinoutStream加载
	 */
	@Test
	public void testDeployFromZipinputStream(){
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
		ZipInputStream zipInputStream = new ZipInputStream(in);
		processEngine.getRepositoryService()//获取服务
		.createDeployment()//创建部署
		.addResourcesFromZipInputStream(zipInputStream)//加载文件
		.deploy();
	}
	
	/**
	 * 查询所有的部署
	 */
	@Test
	public void testQueryAllDeploy(){
		List<Deployment> deploymentList = processEngine.getRepositoryService()
		.createDeploymentQuery()//创建部署查询
		.list();
		for(Deployment deployment:deploymentList){//迭代所有部署
			System.out.println(deployment.getId());//获取部署id
			System.out.print("  ");
			System.out.println(deployment.getState());//获取部署状态
		}
	}
	/**
	 * 根据部署ID查询部署
	 */
	@Test
	public void testQueryDeployByID(){
		
		Deployment deployment = processEngine.getRepositoryService()//首先获取服务
		.createDeploymentQuery()//创建部署查询
		.deploymentId("10001")//根据部署id过滤
		.uniqueResult();//得到的是唯一结果
		System.out.println(deployment.getId());//获取部署id
		System.out.println(deployment.getName());//获取部署名称
		System.out.print("  ");
		System.out.println(deployment.getState());//获取部署状态
	}
	/**
	 * 查询所有的流程定义
	 */
	@Test
	public void testQueryAllPD(){
		List<ProcessDefinition> pdList = processEngine.getRepositoryService()
		.createProcessDefinitionQuery()
		.list();
		for(ProcessDefinition pd:pdList){
			System.out.print("deploymentId: "+pd.getDeploymentId()+",");//得到部署id
			System.out.print(" imageURL: "+pd.getImageResourceName()+",");//得到图片路径
			System.out.print(" key: "+pd.getKey()+",");//
			System.out.println(" version:"+pd.getVersion());//得到版本号
			//数据库里面有什么就可以得到什么
		}
	}
	/**
	 * 根据部署ID查询流程定义(可以查询出一个)
	 */
	@Test
	public 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
	 */
	@Test
	public 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就是一个流程定义)
	 */
	@Test
	public 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
	 */
	@Test
	public void testDeleteDeployment(){
		processEngine.getRepositoryService()//获取仓库服务类
		.deleteDeploymentCascade("10001");
	}
	/**
	 * (缺陷)根据key得到所有的流程定义,然后遍历每一个流程定义,在得到流程部署,然后依次删除(效率比较慢)
	 */
	/**
	 * 查询流程图
	 */
	@Test
	public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值