天天看点

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>