jbpm学习二

来源:互联网 发布:slack mac下载 编辑:程序博客网 时间:2024/06/05 16:07


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 0
原创粉丝点击