jBPM,并发执行和流程变量
时间:2020-03-06 14:31:40 来源:igfitidea点击:
当jBPM中的流程派生到并发路径时,这些路径中的每一个都会获得自己的流程变量副本,从而使它们彼此隔离运行。
但是,当路径再次连接时会发生什么呢?
显然可能存在冲突的更新。
上下文会恢复到派生之前的状态吗?
我可以选择从单独的轨道复制单个变量吗?
解决方案
我认为我们必须配置任务的任务控制器。在某些情况下,以不会导致冲突的方式设置"访问"属性就足够了(例如,对第一条路径的"读取"访问权和对第二条路径的"读取,写入"访问权)。如果不是这种情况,那么我们可以使用自定义逻辑来实现自己的TaskControllerHandler并实现方法void void SubmitTaskVariables(TaskInstance taskInstance,ContextInstance contextInstance,Token令牌)。请参阅:任务控制器。
我尝试了一个小实验:
<fork name="fork1" >
<transition to="right" />
<transition to="left" />
</fork>
<node name="left">
<event type="node-enter">
<script>
<expression >
left="left";
shared = left;
</expression>
<variable name='left' access='write' />
<variable name='shared' access='write' />
</script>
</event>
<transition to="join" />
</node>
<node name="right">
<event type="node-enter">
<script>
<expression >
right="right";
token.parent.processInstance.contextInstance.setVariable("fromRight", "woot!");
shared = right;
</expression>
<variable name='right' access='write' />
<variable name='shared' access='write' />
</script>
</event>
<transition to="join" />
</node>
<join name="join" >
<transition to="done"></transition>
</join>
<end-state name="done"/>
最后,我可以访问三个变量,shared,right和" fromRight",这三个变量是由脚本针对父级显式设置的。
共享变量的值来自右叉,左侧的更改似乎消失了。
请注意,对于我而言,转换实际上并不是异步的,整个实验将在一个事务中运行,这些因素可能会影响结果

