天天看點

Activiti支援直接部署擴充名為bpmn的流程檔案

在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>