流程定义的管理:
将定义业务流程,部署到 jbpm框架中 (流程定义 jpdl.xml 描述文件)
通过gpd 插件 先根据业务流程,绘制流程图 (holiday.jpdl.xml 和 holiday.png )
流程定义部署 :
先获得 ProcessEngine 对象,再获得对应 Service (六个Service)
ExecutionService getExecutionService() // 流程实例管理
HistoryService getHistoryService() // 历史记录管理
IdentityService getIdentityService() // 用户认证管理
ManagementService getManagementService() // 任务调度
RepositoryService getRepositoryService() // 流程定义管理
TaskService getTaskService() // 任务关联
操作流程定义,需要使用 RepositoryService
deployment 将需要发布到JBPM框架中流程文件,添加到对象中
// 1、 先获得流程引擎 (JBPM编程核心)
Configuration configuration = new Configuration();
ProcessEngine processEngine = configuration.buildProcessEngine();//新建一个引擎
// 2、通过引擎获得需要Service
RepositoryService repositoryService = processEngine.getRepositoryService();
// 3、发布流程定义
NewDeployment deployment = repositoryService.createDeployment();
deployment.addResourceFromClasspath("holiday.jpdl.xml");
deployment.addResourceFromClasspath("holiday.png");
deployment.deploy();
流程定义发布,影响的数据表分析
JBPM的数据记录采用流水号 id ,在 jbpm4_property 表中用来保存下次操作的开始id, Value 初始化值是1, 每进行过一轮数据库操作,记录+10000
jbpm4_deployment 流程定义发布表,每发布一个流程,在该表插入1条记录 ,DBID 就是流水号
jbpm4_lob 存放大数据(二进制) 存放发布流程定义文件
jbpm4_deployprop 流程定义属性表 ,每发布一个流程,将流程属性信息保存到该表
langid 是jpdl语言规范版本号、pdid 流程定义唯一标识、pdkey 流程定义关键字、pdversion 流程定义版本号
在绘制流程定义时,name值就是默认的key值 ,version每次发布相同key ,version自动+1
发布流程定义,在实际开发中,都是通过 zip压缩包发布
//发布流程定义
NewDeployment deployment = repositoryService.createDeployment();
deployment.addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("holiday.zip")));
deployment.deploy();
流程定义查询 :
通过 ProcessDefinitionQuery查询流程定义信息
ProcessDefinitionQuery processDefinitionQuery
= repositoryService.createProcessDefinitionQuery();
对 ProcessDefinitionQuery 添加查询条件
processDefinitionId(processDefinitionId)
processDefinitionKey(key)
processDefinitionName(name)
processDefinitionNameLike(name)
page(firstResult, maxResults)
orderAsc(property)
orderDesc(property)
通过 指定属性查询,可以进行排序和分页 查询
List<ProcessDefinition> list = processDefinitionQuery
.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
.page(0, 2).list();
根据发布编号 和 资源名称可以获得 该流程相关资源
// 查询流程图
// deploymentId 来自 jbpm4_deployment表 DBID
// ResourceName 来自 jbpm4_lob 表 NAME
InputStream in = repositoryService.getResourceAsStream("1", "holiday/holiday.png");
OutputStream out = new FileOutputStream("c:/test.png");
int b ;
while((b=in.read())!=-1){
out.write(b);
}
in.close();
out.close();
流程定义的删除 :
把流程 彻底从JBPM 框架中删除了
RepositoryService 提供两个方法 用来删除 流程定义
可以通过流程定义发布id删除流程定义
方式一:如果有关联流程实例信息则报错
repositoryService.deleteDeployment(deploymentId);
方式二:删除流程定义,并删除关联流程实例
repositoryService.deleteDeploymentCascade(deploymentId);
Cascade 级联的含义, 删除流程定义时,管理流程实例信息 也会被一起删除,执行删除后,关联 lob表和 prop表数据也都删除了, 关联流程实例信息也会被删除
可以通过流程定义的key来删除
如果没有指定key属性,那么流程的名称就是key
// 先根据key 进行查询,在执行删除
ProcessDefinitionQuery processDefinitionQuery =
repositoryService.createProcessDefinitionQuery();
List<ProcessDefinition> list =
processDefinitionQuery.processDefinitionKey("holiday").list();
for (ProcessDefinition processDefinition : list) {
repositoryService.deleteDeploymentCascade(processDefinition.getDeploymentId());
}
流程定义没有修改功能,可以发布一个新流程,版本自动+1
代码示例:
package com.my.jbpm;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Output