[size=x-large] 续第5章JPDL
[/size]
[size=medium]5.2.4. concurrency并发
[/size]
使用fork和join活动,可以模拟流向(executions)的汇合。
例子:
流程处理的并发例子
图 5.6. 流程处理的并发例子
<process name="ConcurrencyGraphBased" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="fork" />
</start>
<fork name="fork">
<transition to="send invoice" />
<transition to="load truck" />
<transition to="print shipping documents" />
</fork>
<state name="send invoice">
<transition to="final join" />
</state>
<state name="load truck">
<transition to="shipping join" />
</state>
<state name="print shipping documents">
<transition to="shipping join" />
</state>
<join name="shipping join">
<transition to="drive truck to destiation" />
</join>
<state name="drive truck to destiation">
<transition to="final join" />
</state>
<join name="final join">
<transition to="end" />
</join>
<end name="end" />
</process>
[size=medium]5.2.5. end结束[/size]
结束流向[size=small]
5.2.5.1. end process instance结束流程处理实例[/size]
默认情况下,结束活动会终结已完成流程处理实例。因此在流程处理实例中,仍然在活动的多个并发(concurrent)流向(concurrent)也会结束。
结束活动
图 5.7. 结束活动
<process name="EndProcessInstance" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="end" />
</start>
<end name="end" />
</process>
新的流程处理实例一创建便会直接结束。
[size=small]5.2.5.2. end execution结束流向[/size]
只有流向到达结束(end)活动时会结束流程处理实例,并且其他并发流向会放弃活动。我们可以设置属性ends="execution"来达到这种状况。
[size=medium]表 5.8. end execution属性[/size]
属性 类型 默认值 是否必须 描述
ends {processinstance|execution} processinstance optional可选 流向路径到达end活动整个流程处理实例就会结束,
[size=small]5.2.5.3. end multiple多个结束[/size]
一个流程处理可以有多个end events,这样就很容易显示出流程处理实例的不同结果。示例:
多个end events
图 5.8. 多个end events
<prccess name="EndMultiple" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="get return code" />
</start>
<state name="get return code">
<transition name="200" to="ok" />
<transition name="400" to="bad request" />
<transition name="500" to="internal server error" />
</state>
<end name="ok" />
<end name="bad request" />
<end name="internal server error" />
</process>
如果你启动一个流向并使用下面的代码将它执行到get return code等待状态,流向便会以bad request的end 活动(event)结束
Execution execution = executionService.startProcessInstanceByKey("EndMultiple");
String executionId = execution.getId();
execution = executionService.signalExecutionById(executionId, "400");
同样地,使用值为200或者500就会让流向(execution)分别以ok或者internal server error的end events结束。[size=small]
5.2.5.4. end State结束状态[/size]
流向(execution)可以以不同的状态结束。可以用其他的方式列出流程处理实例的结果。可以用end event的状态属性或者end-cancel和end-error表示。
[size=large]
表 5.9. end execution 属性[/size]
属性 类型 默认值 是否必须 描述
state String 可选 状态分配给流向
不同的结束状态
图 5.9. 不同的结束状态
<process name="EndState" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="get return code" />
</start>
<state name="get return code">
<transition name="200" to="ok" />
<transition name="400" to="bad request" />
<transition name="500" to="internal server error" />
</state>
<end state="comleted" />
<end-cancel name="bad request" />
<end-error name="internal server error" />
</process>
这时,如果我们启动一个流向并使用下面的代码将流向执行到get return code等待状态,流向会以取消状态(cancel state)结束。
Execution execution = executionService.startProcessInstanceByKey("EndState");
String executionId = execution.getId();
execution = executionService.signalExecutionById(executionId, "400");
和上面一样,使用值为200或500会让流向分别以comleted或者error states结束。
[/size]
[size=medium]5.2.4. concurrency并发
[/size]
使用fork和join活动,可以模拟流向(executions)的汇合。
例子:
流程处理的并发例子
图 5.6. 流程处理的并发例子
<process name="ConcurrencyGraphBased" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="fork" />
</start>
<fork name="fork">
<transition to="send invoice" />
<transition to="load truck" />
<transition to="print shipping documents" />
</fork>
<state name="send invoice">
<transition to="final join" />
</state>
<state name="load truck">
<transition to="shipping join" />
</state>
<state name="print shipping documents">
<transition to="shipping join" />
</state>
<join name="shipping join">
<transition to="drive truck to destiation" />
</join>
<state name="drive truck to destiation">
<transition to="final join" />
</state>
<join name="final join">
<transition to="end" />
</join>
<end name="end" />
</process>
[size=medium]5.2.5. end结束[/size]
结束流向[size=small]
5.2.5.1. end process instance结束流程处理实例[/size]
默认情况下,结束活动会终结已完成流程处理实例。因此在流程处理实例中,仍然在活动的多个并发(concurrent)流向(concurrent)也会结束。
结束活动
图 5.7. 结束活动
<process name="EndProcessInstance" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="end" />
</start>
<end name="end" />
</process>
新的流程处理实例一创建便会直接结束。
[size=small]5.2.5.2. end execution结束流向[/size]
只有流向到达结束(end)活动时会结束流程处理实例,并且其他并发流向会放弃活动。我们可以设置属性ends="execution"来达到这种状况。
[size=medium]表 5.8. end execution属性[/size]
属性 类型 默认值 是否必须 描述
ends {processinstance|execution} processinstance optional可选 流向路径到达end活动整个流程处理实例就会结束,
[size=small]5.2.5.3. end multiple多个结束[/size]
一个流程处理可以有多个end events,这样就很容易显示出流程处理实例的不同结果。示例:
多个end events
图 5.8. 多个end events
<prccess name="EndMultiple" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="get return code" />
</start>
<state name="get return code">
<transition name="200" to="ok" />
<transition name="400" to="bad request" />
<transition name="500" to="internal server error" />
</state>
<end name="ok" />
<end name="bad request" />
<end name="internal server error" />
</process>
如果你启动一个流向并使用下面的代码将它执行到get return code等待状态,流向便会以bad request的end 活动(event)结束
Execution execution = executionService.startProcessInstanceByKey("EndMultiple");
String executionId = execution.getId();
execution = executionService.signalExecutionById(executionId, "400");
同样地,使用值为200或者500就会让流向(execution)分别以ok或者internal server error的end events结束。[size=small]
5.2.5.4. end State结束状态[/size]
流向(execution)可以以不同的状态结束。可以用其他的方式列出流程处理实例的结果。可以用end event的状态属性或者end-cancel和end-error表示。
[size=large]
表 5.9. end execution 属性[/size]
属性 类型 默认值 是否必须 描述
state String 可选 状态分配给流向
不同的结束状态
图 5.9. 不同的结束状态
<process name="EndState" xmlns="http://jbpm.org/4/jpdl">
<start>
<transition to="get return code" />
</start>
<state name="get return code">
<transition name="200" to="ok" />
<transition name="400" to="bad request" />
<transition name="500" to="internal server error" />
</state>
<end state="comleted" />
<end-cancel name="bad request" />
<end-error name="internal server error" />
</process>
这时,如果我们启动一个流向并使用下面的代码将流向执行到get return code等待状态,流向会以取消状态(cancel state)结束。
Execution execution = executionService.startProcessInstanceByKey("EndState");
String executionId = execution.getId();
execution = executionService.signalExecutionById(executionId, "400");
和上面一样,使用值为200或500会让流向分别以comleted或者error states结束。