jbpm学习二



jbpm中最重要的对象莫过于ProcessEngine对象,他是工作流引擎对象,一切工作流的启动都离不开此对象。

查看 jbpm的API,ProcessEngine对象主要有6个方法,


ProcessEngine具有6个service获得的方法:


RepositoryService : 流程定义管理 (发布,管理,定义流程)

ExecuteService : 流程实例管理 (启动流程实例,监控流程实例运行状态,控制实例流程流转)

TaskService: 任务管理 (任务查看,任务办理)

IdentityService: JBPM用户管理 (管理 用户,组信息)

HistoryService:  历史记录管理 (管理 实例,任务,活动历史记录信息)

ManagementService: 管理JOB(JOB定时任务)

一.RepositoryService对象

RepositoryService对象是由ProcessEngine.getRepositoryService()获得的。

1.jbpm发布流程定义代码如下:

  // 1、先获得流程引擎的对象
  Configuration configuration = new Configuration();
  ProcessEngine processEngine = configuration.buildProcessEngine();
  // 2、 获得对应Service对象
  RepositoryService repositoryService = processEngine.getRepositoryService();
  NewDeployment deployment = repositoryService.createDeployment();
  // 3、发布流程定义
  deployment.addResourceFromClasspath("holiday.jpdl.xml");
  deployment.addResourceFromClasspath("holiday.png");
  //实际开发中都用下面的方法,发布Zip压缩包,方便
  //deployment.addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("holiday.zip")));
  // 执行发布
  deployment.deploy();

流程发布成功后,那么问题来了,发布一个流程都会影响那些表呢?

众所周知,jbpm共18张表,但是发布一个流程只用到4张表,分别如下所示:

(1)jbpm4_property 属性表

此表永远只有一条记录,vlaue记录下一次定义流程的流水id,每次事物结束后,value递增10000。

(2)jbpm4_deployment 流程定义发布表

每次新发布一条流程定义,此表添加一条记录,DBID是该流程定义流水号

(3)jbpm4_lob 大数据表

此表存放定义的流程文件,BLOB_VALUE存放流程文件内容

(4)jbpm4_deployprop 发布流程定义属性表

每次流程定义发布后,会存入4条数据,分别是jpdl版本号,流程定义编号pdid,流程定义关键字pdkey,版本pdversion.


2.执行查询代码

RepositoryService可以获取两个查询对象,分别是

DeploymentQuery:查询jbpm4_deployment表(使用较少)

ProcessDefinitionQuery:查询jbpm4_deployprop表(重点使用),可以对Query设置条件进行查询

	RepositoryService repositoryService = new Configuration().buildProcessEngine().getRepositoryService();
	ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
	List<ProcessDefinition> list = processDefinitionQuery.list();
	System.out.println("共有几个定义:" + list.size());
	for (ProcessDefinition processDefinition : list) {
		System.out.println("流程定义编号pdid:" + processDefinition.getId());
		System.out.println("流程定义名称name:" + processDefinition.getName());
		System.out.println("流程定义关键字 pdkey:" + processDefinition.getKey());
		System.out.println("流程定义版本号 pdversion:" + processDefinition.getVersion());
	}

3.查看流程图

	Configuration configuration = new Configuration();
	ProcessEngine buildProcessEngine = configuration.buildProcessEngine();
	RepositoryService repositoryService = buildProcessEngine.getRepositoryService();
		
	String deploymentId = "1";
	String resourcename = "holiday.png";
		
	InputStream in = repositoryService.getResourceAsStream(deploymentId, resourcename);
	FileOutputStream out = new FileOutputStream("d:/xx.png");
	int b;
	while((b = in.read()) != -1){
		out.write(b);
	}
		
		in.close();
		out.close();

查的是jbpm4_lob4表,deploymentId是流程流水号,resourcename除了可以使png等图片,还可以是xml格式的文件。(deploymentId和resourcename可以通过processDefinitionQuery对象获得).


4.流程定义删除

有两种方式删除流程定义:

(1)repositoryService.deleteDeployment(deploymentId);

(2)repositoryService.deleteDeploymentCascade(deploymentId); //deploymentId是流程流水号

	Configuration configuration = new Configuration();
	ProcessEngine buildProcessEngine = configuration.buildProcessEngine();
	RepositoryService repositoryService = buildProcessEngine.getRepositoryService();		
	repositoryService.deleteDeploymentCascade("1");
第一种方式如果有关联流程实例信息就会报错,第二种除了删除流程定义,还会删除关联流程实例,开发中一般都会用第二种。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值