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