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介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍
jbpm jbpm4.3.jar DDDDDDDD
\jbpm简介\jbpm简介\jbpm简介\jbpm简介\jbpm简介
jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
jbpm使用案例,非常不错,大家都来看看吧。
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
jbpm4源码jbpm4源码jbpm4源码
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
Research on Workflow Patterns Based on jBPM and jPDL
JBPM开发指南JBPM开发指南JBPM开发指南
jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中
jBPM源码分析jBPM源码分析jBPM源码分析jBPM源码分析
jbpm3.2表说明 很详细 1.1 JBPM_PROCESSDEFINITION:流程模版表 关系表 外键存在表 外键名称 外键存在表字段 存在原因 可能 关系 JBPM_NODE JBPM_NODE FK_PROCST_SBPRCDEF SUBPROCESSDEFINITION_ 子流程的...
JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...
jbpm学习资料,jBPM-jPDL学习笔记,很详细。。。。。。。。。。。jbpm教程
jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版