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",这三个变量是由脚本针对父级显式设置的。
共享变量的值来自右叉,左侧的更改似乎消失了。
请注意,对于我而言,转换实际上并不是异步的,整个实验将在一个事务中运行,这些因素可能会影响结果