2017-06-13 35 views
1

过程定义部署我试图使用以下代码Camunda经由API

DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().name(definitionName); 
    deploymentBuilder.addInputStream(definitionName, definitionFileInputStream); 
    String deploymentId = deploymentBuilder.deploy().getId(); 
    System.out.println(deploymentId); 

上述代码部署从一个文件的处理定义成功运行和新deploymentId被打印出来。

后来,我尝试使用下面的代码

List<ProcessDefinition> definitions = repositoryService.createProcessDefinitionQuery().list(); 
    System.out.println(definitions.size()); 

上面的代码成功运行,列出部署的流程定义,但输出始终为0

我已经做了一些调查,发现在ACT_GE_BYTEARRAY表中存在对应deploymentId的条目,并且BYTES_列包含定义文件的内容。

我也发现在ACT_RE_PROCDEF表中找不到相应的条目。

有什么东西搞乱了吗?从API和我发现的例子中发现,似乎上面的代码应该足够了,还是有一个缺失的步骤?

感谢您的帮助

回答

1

看来你忘了isExecutable标志上部署的流程定义。请检查您的过程模型是否包含isExecutable标志。如果您使用camunda建模器,只需在该过程的属性面板中设置此选项即可。

如果您使用非可执行定义调用#deploy(),将创建一个部署,但由于流程定义不可执行,因此不会部署该流程定义。

关于camunda平台(7.7)的最新版本,在DeploymentBuilder中增加了一种名为#deployWithResult()的新方法。此方法返回已部署的流程定义,因此很容易检查是否部署了流程定义。

3

原来这个问题与definitionName(thanks thorben!)有关,因为它必须在.bpmn20.xml.bpmn之间结束。

进一步测试之后,需要对代码的以下definitionName

deploymentBuilder.addInputStream(definitionName, definitionFileInputStream); 

离开下面definitionName无后缀是细后缀

repositoryService.createDeployment().name(definitionName);