1. deploymentId和definitionId应该是一对一的关系
部署的时候,deploy()返回的就是deploymentId。deploymentId虽然是个String,不过仅包含数字,目前我还不清楚它的生成策略。
每次部署,还会产生一个definitionId。definitionId的生成与process.jpdl.xml文件有关:
<?xml version="1.0" encoding="UTF-8"?>
<process name="ProcessName" key="ProcessKey" version="1024" xmlns="http://jbpm.org/4.3/jpdl">
……
</process>
definitionId == key-version,如上面这个jpdl,部署后生成的definitionId就是"ProcessKey-1024"。不过要注意两点:
(1) 如果没有写<process key="xxx">,那么默认key == name >>> ①(特殊情况见章节3.)
(2) 如果写了<process version="xxx">,那么这个jpdl只能部署一次,因为version指定了,key-version就定死了。若不写<process version="xxx">,可以把这个jpdl部署多次,且jvm可以帮你实现version的自增1
deploymentId和definitionId是可以互查的:
/** 根据deployId找definitionId */
String definitionId = processEngine.getRepositoryService().createProcessDefinitionQuery().deploymentId(deployId).uniqueResult().getId();
/** 根据definitionId找deployId */
String deployId = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(definitionId).uniqueResult().getDeploymentId();
(单位项目的需求中,没有解释deploymentId的概念,全部用definitionId代替,好在是一对一的关系,不然就大条了……)
2. 流程定义zip包中的所有文件都是资源
ZipInputStream zis = new ZipInputStream(new FileInputStream("process.jpdl.zip"));
processEngine.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zis).deploy();
如果是部署的是zip包,那么zip包中的所有文件都是可用的资源。换句话说,你可以把杂七杂八的文件都放在zip包中一起部署。比如现在我的process.jpdl.zip里面不仅有process.jpdl.xml和process.png,还有一个resource.xml,那么这个resource.xml也是可以被获取到的,如:
Set<String> resourceSet = processEngine.getRepositoryService().getResourceNames(deployId);
for (String s : resourceSet)
System.out.println(s);
// Output:
// resource.xml
// process.jpdl.xml
// process.png
除了得到资源的InputStream外
ByteArrayInputStream bis = (ByteArrayInputStream)processEngine.getRepositoryService().getResourceAsStream(deployId, "resource.xml");
资源还可以被动态修改,不过要注意,动态修改资源这个方法在RepositoryServiceImpl中,RepositoryService接口中竟然没有这个方法,这个应该算是jBPM4.3的一个bug:
is2 = new FileInputStream("newResource.xml");
RepositoryServiceImpl rsi = (RepositoryServiceImpl)processEngine.getRepositoryService();
rsi.updateDeploymentResource(deployId, "resource.xml", is2);
这样就把newResource.xml的内容写入了resource.xml中(覆盖原有内容),此时再获取resource.xml的InputStream,输出出来的结果就是newResource.xml的内容
3. <process>标签name属性中的短横线会变成下划线赋给key属性(补充①)
假设我部署了一个jpdl.xml,<process name="test-vehicle">,那么,查询出的ProcessDefinition的属性如下:
System.out.println(pd.getName()); // definitionName == "test-vehicle"
System.out.println(pd.getKey()); // definitionKey == "test_vehicle"
System.out.println(pd.getVersion()); // definitionVersion == "1"
System.out.println(pd.getId()); // definitionId == "test_vehicle-1"
这在创建流程实例和查询流程定义的时候要特别注意:
ExecutionService.startProcessInstanceById(“test_vehicle-1”);
ExecutionService.startProcessInstanceByKey(“test_vehicle”);
startProcessInstanceById()传的是definitionId(不是deploymentId),startProcessInstanceByKey()传的是definitionKey。查询的时候,还可以通过definitionName来查。
RepositoryService.createProcessDefinitionQuery().processDefinitionName("test-vehicle");
在项目中有一个方法,是传入definitionName来创建实例,先RepositoryService.createProcessDefinitionQuery().processDefinitionName("test-vehicle")来确定时候有processDefinition存在,如果有,就ExecutionService.startProcessInstanceByKey("test-vehicle")。结果悲剧了。谨记。
分享到:
相关推荐
JBPM,全称Java Business Process Management,是一种开源的工作流管理系统,用于实现业务流程自动化。它提供了丰富的API和工具,使得开发者能够设计、部署和管理复杂的业务流程。在JBPM系统中,数据库扮演着至关...
**JBPM 3.2.3 数据库表详解** JBPM (Java Business Process Management) 是一个开源的工作流管理系统,主要用于企业级业务流程自动化。在JBPM 3.2.3 版本中,数据库设计是整个系统的核心部分,用于存储流程定义、...
### JBPM用户开发指南知识点详解 #### 一、JBPM简介 JBPM是JBOSS提供的一个开源工作流管理系统,其核心特色在于提供了一个直观易懂的流程定义语言,能够帮助开发者快速创建出复杂的业务流程。JBPM的核心优势在于其...
《jBPM4用户指南参考手册》是一份详尽的文档,旨在为用户提供全面的jBPM4系统理解和操作指导。jBPM4是JBoss流程管理器的一个版本,它是基于Java的开源业务流程管理系统(BPMS),允许企业定义、执行和监控业务流程。...
### JBPM4 每张表对应的含义 JBPM(JBoss Business Process Management)是一款开源的工作流管理系统,广泛应用于各种业务流程管理场景中。JBPM4版本是该系列中的一个重要版本,其数据库设计反映了该系统的核心功能...
### jbpm4.2开发知识点概述 #### 一、jbpm简介 - **定义与特点**:jbpm(Java Business Process Model)是一个开源的工作流引擎,用于自动化业务流程的执行。它提供了一种灵活的方式来定义复杂的业务流程,并通过...
### jBPM 工作流引擎关键知识点解析 #### 一、概述 - **jBPM**:全称为 JBoss Business Process Management,是由 JBoss 开发的一款开源工作流管理系统。该系统提供了高度灵活且易于扩展的功能,适用于各种复杂的...
### jBPM学习资料知识点详解 #### 一、jBPM概述 jBPM,即Java Business Process Management,是一款基于J2EE的轻量级工作流管理系统,专为简化业务流程设计与执行而生。该项目自2004年加入JBoss家族以来,成为其...
**jbPM 3.2 知识点详解** jbPM,全称为Java Business Process Management,是一个开源的工作流管理系统,主要用于企业级应用中的业务流程管理。jbPM 3.2是该系统的一个版本,它提供了丰富的功能,包括流程设计、...
### JBPM5.3开发指南知识点详解 #### 一、概述 JBPM是Java Business Process Management的缩写,是一款开源的工作流引擎。本教程旨在帮助开发者快速掌握JBPM5.3的基本使用方法,包括下载安装、环境搭建以及通过具体...
### 基于JBPM的企业业务流程开发 #### 摘要 随着现代企业规模的不断扩大和业务的日益复杂化,高效的企业业务流程管理(BPM)成为了提高组织效率的关键因素之一。JBPM作为一种开放源代码的工作流和业务流程管理系统...
### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...
### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)成为了企业提升效率、优化流程的关键技术之一。BPM 提供了一种程序...
### JBPM自带表及其相互之间的关系详解 JBPM(JBoss Business Process Management)是一个开源的工作流引擎,基于Java,用于实现业务流程管理(BPM)。它提供了强大的工具和API来设计、部署和运行复杂的业务流程。...
### jBPM 6.0 入门指南 #### 一、概述 ##### 1.1 什么是 jBPM? jBPM (JBoss Business Process Management) 是一个灵活且易于使用的业务流程管理(Business Process Management, BPM)框架,用于帮助开发者和业务...