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