`
zhang_xzhi_xjtu
  • 浏览: 527060 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jbpm的例子之三 使用fork

阅读更多
fork的使用有一些小的地方需要注意。

1 fork节点出去的transition必须有name属性,因为Fork要用该属性来构建子token,如果不指定的话,那么所有的transition的name都为null,则只有一个transition会被调用。
2 fork的行为是依次调用transition,所以在底层它并不是一个并发的模型,如果需要使用并发模型的话,可以考虑jbpm的异步调用,当然,也可以自己起一个Thread去完成一些task。
3 token的name是和transition的name相关的,如下例所示,rootToken的fullName为'/',fork出来的两个子token分别为'/t2','/t1'。
4 join的token必须是兄弟token。


<process-definition name='TestForkProcess'>

<start-state>
<transition to='fork'></transition>
</start-state>

<fork name='fork'>
<transition  name ='t1' to='node0'></transition>
<transition  name ='t2' to='node1'></transition>
</fork>

<node name='node0'>
<script>
System.out.println("this script is entering node "+node);
token.signal();
</script>
<transition to='joinNode'></transition>
</node>

<node name='node1'>
<script>
System.out.println("this script is entering node "+node);
token.signal();
</script>
<transition to='joinNode'></transition>
</node>

<join name='joinNode'>
<script>
System.out.println("this script is entering node "+node);
</script>
<transition to='end' />
</join>

<end-state name='end' />

</process-definition><process-definition name='TestForkProcess'>

<start-state>
<transition to='fork'></transition>
</start-state>

<fork name='fork'>
<transition  name ='t1' to='node0'></transition>
<transition  name ='t2' to='node1'></transition>
</fork>

<node name='node0'>
<script>
System.out.println("this script is entering node "+node);
token.signal();
</script>
<transition to='joinNode'></transition>
</node>

<node name='node1'>
<script>
System.out.println("this script is entering node "+node);
token.signal();
</script>
<transition to='joinNode'></transition>
</node>

<join name='joinNode'>
<script>
System.out.println("this script is entering node "+node);
</script>
<transition to='end' />
</join>

<end-state name='end' />

</process-definition>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics