在5.9及其之前的版本activiti不支援直接部署“bpmn”為擴充名的流程,是以之前在這篇文章中講解如何打包bar檔案時要求把bpmn重名為bpmn20.xml再打包。
不是了bpmn結尾的流程定義檔案之後啟動流程時會提示對應的流程不存在,這是因為activiti未能識别bpmn擴充名的檔案,它不知道如何處理當然也就沒有作為流程定義存儲到資料,最後你也就不能啟動這個流程。
是以解決這個問題的辦法就是在部署時重命名資源檔案,如下典型的代碼:
?
1
2
3
<code>string filename =</code><code>"/users/henryyan/project/foo.bpmn"</code><code>;</code>
<code>repositoryservice.createdeployment()</code>
<code> </code><code>.addinputstream(</code><code>"foo.bpmn20.xml"</code><code>,</code><code>new</code>
<code>fileinputstream(filename)).deploy();</code>
上面的部署方式可以正常啟動一個流程。
但是下面的代碼就不能直接啟動了。
<code>repositoryservice.createdeployment().addclasspathresource(</code><code>"diagrams/gateway.bpmn"</code><code>).deploy();</code>
activiti會報錯資訊如下:
從5.10版本開始我可以直接部署bpmn擴充名的流程定義檔案了,順便說一下bpmn是activiti designer 5.9(designer的重大變更說明)之後預設的擴充名,部分設計器也是預設以bpmn作為擴充名。
現在就可以這樣部署流程定義檔案了:
<code> </code><code>.addinputstream(</code><code>"foo.bpmn"</code><code>,</code><code>new</code>
當然這個看着不太爽,因為僅僅就是一個資源名稱的更改(由foo.bpmn20.xml改為foo.bpmn)。
來點優雅的,借助cdi:
4
5
6
7
<code>@test</code>
<code>@deployment</code><code>(resources = {</code><code>"diagrams/foo.bpmn"</code>
<code>})</code>
<code>public</code>
<code>void</code> <code>startprocess()</code><code>throws</code>
<code>exception {</code>
<code> </code><code>runtimeservice runtimeservice = activitirule.getruntimeservice();</code>
<code> </code><code>processinstance processinstance = runtimeservice.startprocessinstancebykey(</code><code>"foo"</code><code>);</code>
<code> </code><code>…</code>
<code>}</code>