2017-06-13 222 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);