`

[#0x0043] jBPM Tips (on updating)

    博客分类:
  • jBPM
阅读更多

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")。结果悲剧了。谨记。

 

0
0
分享到:
评论

相关推荐

    JBPM数据库表说明.doc

    JBPM,全称Java Business Process Management,是一种开源的工作流管理系统,用于实现业务流程自动化。它提供了丰富的API和工具,使得开发者能够设计、部署和管理复杂的业务流程。在JBPM系统中,数据库扮演着至关...

    jbpm3.2.3数据库表的详细说明

    **JBPM 3.2.3 数据库表详解** JBPM (Java Business Process Management) 是一个开源的工作流管理系统,主要用于企业级业务流程自动化。在JBPM 3.2.3 版本中,数据库设计是整个系统的核心部分,用于存储流程定义、...

    JBPM流程管理 用户指南

    ### JBPM流程管理 用户指南知识点解析 #### 一、JBPM简介 JBPM是一个高度灵活且可扩展的工作流管理系统,其核心特色在于提供了一个直观的流程语言,使得开发者能够通过任务、异步等待状态、定时器以及自动化动作等...

    JBPM用户开发指南

    ### JBPM用户开发指南知识点详解 #### 一、JBPM简介 JBPM是JBOSS提供的一个开源工作流管理系统,其核心特色在于提供了一个直观易懂的流程定义语言,能够帮助开发者快速创建出复杂的业务流程。JBPM的核心优势在于其...

    jBPM4用户指南 参考手册

    《jBPM4用户指南参考手册》是一份详尽的文档,旨在为用户提供全面的jBPM4系统理解和操作指导。jBPM4是JBoss流程管理器的一个版本,它是基于Java的开源业务流程管理系统(BPMS),允许企业定义、执行和监控业务流程。...

    JBPM4 每张表对应的含义

    ### JBPM4 每张表对应的含义 JBPM(JBoss Business Process Management)是一款开源的工作流管理系统,广泛应用于各种业务流程管理场景中。JBPM4版本是该系列中的一个重要版本,其数据库设计反映了该系统的核心功能...

    jbpm4.2开发文档

    ### jbpm4.2开发知识点概述 #### 一、jbpm简介 - **定义与特点**:jbpm(Java Business Process Model)是一个开源的工作流引擎,用于自动化业务流程的执行。它提供了一种灵活的方式来定义复杂的业务流程,并通过...

    jbpm 工作流引擎

    ### jBPM 工作流引擎关键知识点解析 #### 一、概述 - **jBPM**:全称为 JBoss Business Process Management,是由 JBoss 开发的一款开源工作流管理系统。该系统提供了高度灵活且易于扩展的功能,适用于各种复杂的...

    自己写的jbpm学习资料

    ### jBPM学习资料知识点详解 #### 一、jBPM概述 jBPM,即Java Business Process Management,是一款基于J2EE的轻量级工作流管理系统,专为简化业务流程设计与执行而生。该项目自2004年加入JBoss家族以来,成为其...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    **jbPM 3.2 知识点详解** jbPM,全称为Java Business Process Management,是一个开源的工作流管理系统,主要用于企业级应用中的业务流程管理。jbPM 3.2是该系统的一个版本,它提供了丰富的功能,包括流程设计、...

    JBPM5.3开发指南

    ### JBPM5.3开发指南知识点详解 #### 一、概述 JBPM是Java Business Process Management的缩写,是一款开源的工作流引擎。本教程旨在帮助开发者快速掌握JBPM5.3的基本使用方法,包括下载安装、环境搭建以及通过具体...

    基于JBPM的企业业务流程开发

    ### 基于JBPM的企业业务流程开发 #### 摘要 随着现代企业规模的不断扩大和业务的日益复杂化,高效的企业业务流程管理(BPM)成为了提高组织效率的关键因素之一。JBPM作为一种开放源代码的工作流和业务流程管理系统...

    jbpm实战讲解.pdf

    ### JBPM实战讲解知识点概述 #### 一、JBPM概览与重要性 JBPM,全称为Java Business Process Management,是JBoss旗下的一款强大的工作流和业务流程管理框架。它旨在帮助企业通过自动化业务流程,提高效率和灵活性...

    jbpm简介\jbpm简介

    ### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...

    jbpm白皮书 介绍jbpm 入门

    ### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)成为了企业提升效率、优化流程的关键技术之一。BPM 提供了一种程序...

    jbpm自带表及其相互之间的关系详解

    ### JBPM自带表及其相互之间的关系详解 JBPM(JBoss Business Process Management)是一个开源的工作流引擎,基于Java,用于实现业务流程管理(BPM)。它提供了强大的工具和API来设计、部署和运行复杂的业务流程。...

    jbpm6.0 入门(很有权威)

    ### jBPM 6.0 入门指南 #### 一、概述 ##### 1.1 什么是 jBPM? jBPM (JBoss Business Process Management) 是一个灵活且易于使用的业务流程管理(Business Process Management, BPM)框架,用于帮助开发者和业务...

Global site tag (gtag.js) - Google Analytics