jbpm管理流程定义

    jbpm工作的过程是创建工作流引擎,部署流程定义,启动流程实例。那么流程定义又是如何管理的呢?


    要管理流程定义,首先得了解什么是流程定义,流程定义即ProcessDefinition。工作流程是执行一项工作的步骤,是一个规则,那么流程定义就是用来定义或者描述这个规则的对象。


    jbpm工作流需要数据库中十八张表来管理工作流执行过程中的数据,涉及到流程定义的表有以下几张:

        JBPM4_DEPLOYMENT:部署表,用来描述一次部署

        JBPM4_LOB:仓库表,存放了流程定义文档(xml,png)

        JBPM4_DEPLOYPROP:部署属性表


    流程定义管理的过程分为几部分:

        1、部署流程定义

        2、查询流程定义

        3、删除流程定义

        4、查看流程图


部署流程定义


    部署流程定义有三种方式,

        addResourceFromClasspath(resource):从classpath下添加,流程图画好后,会生成一个xml文件和一个png文件,把他们放到classpath下,可以直接用该方法读取文件部署。

public void testDeployFromClasspath(){
	processEngine.getRepositoryService()
	.createDeployment()
	.addResourceFromClasspath("qingjia.jpdl.xml")
	.addResourceFromClasspath("qingjia.png")
	.deploy();
}


        addResourceFromInputStream(resource,inputstream):添加一个文件,使用InputStream添加文件,只能添加一个文件。

public void testDeployFromInputStream(){
	InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("qingjia.jpdl.xml");
	processEngine.getRepositoryService()
	.createDeployment()
	.addResourceFromInputStream("qingjia.jpdl.xml", inputStream)
	.deploy();
}


        addResourceFromZipInputStream(inputstream):添加一个zip文件,里面可以有多个文件,也可以有文件夹。

public void testDeployFromZipinputStream(){
	InputStream in = this.getClass().getClassLoader().getResourceAsStream("qingjia.zip");
	ZipInputStream zipInputStream = new ZipInputStream(in);
	processEngine.getRepositoryService()
	.createDeployment()
	.addResourcesFromZipInputStream(zipInputStream)
	.deploy();
}


查询流程定义


    查询流程定义也分为两部分,一部分是查询部署,另外一部分是查询流程定义。


    查询部署时可以查询所有部署,也可以根据ID查询某一个部署。查询部署是从JBPM4_DEPLOYMENT表中得到的。

/**
 * 查询所有的部署
 */
@Test
public void testQueryAllDeploy(){
	List<Deployment> deploymentList = processEngine.getRepositoryService()
	.createDeploymentQuery()
	.list();
}

/**
 * 根据部署ID查询部署
 */
@Test
public void testQueryDeployByID(){
	Deployment deployment = processEngine.getRepositoryService()
	.createDeploymentQuery()
	.deploymentId("10001")
	.uniqueResult();
}


    查询流程定义也分为几种情况:

/**
 * 查询所有的流程定义
 */
@Test
public void testQueryAllPD(){
	List<ProcessDefinition> pdList = processEngine.getRepositoryService()
	.createProcessDefinitionQuery()
	.list();
}

/**
 * 根据部署ID查询流程定义
 */
@Test
public void testQueryPDByDeploymentId(){
	ProcessDefinition pd = processEngine.getRepositoryService()
	.createProcessDefinitionQuery()
	.deploymentId("30001")
	.uniqueResult();
}

/**
 * 根据流程定义ID查询流程定义,也就是JBPM4_DEPLOYPROP中的id,一般为“流程定义名称-版本号”
 */
@Test
public void testQueryPDByPDID(){
	ProcessDefinition pd = processEngine.getRepositoryService()
	.createProcessDefinitionQuery()
	.processDefinitionId("qingjia-2")
	.uniqueResult();
}

/**
 * 根据流程定义名称查询流程定义,一般为JBPM4_DEPLOYPROP中的OBJNAME_
 */
@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());
	}
}


删除流程定义


     如果要删除流程定义,就是删除该次部署,因为jbpm的API没有提供删除流程定义的方法。或者根据流程定义名称获取所有流程定义,然后遍历流程定义获取它的流程部署,然后删除掉流程部署。

public void testDeleteDeployment(){
	processEngine.getRepositoryService()
	.deleteDeploymentCascade("10001");
}


查看流程图


/**
 * 查询流程图
 */
@Test
public void testShowImage() throws Exception{
	InputStream inputStream = processEngine.getRepositoryService()
	.getResourceAsStream("20001", "qingjia.png");
	
	OutputStream outputStream = new FileOutputStream("c:/processimg.png");
	for(int b=-1;(b=inputStream.read())!=-1;){
		outputStream.write(b);
	}
	inputStream.close();
	outputStream.close();
}

    

    流程定义管理这些内容中,重要的是部署和删除流程定义,这是在系统中经常用到的方法。至于查看流程定义和查看流程图,相对来说次要一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值