2

当 jBPM 中的流程分叉成并发路径时,这些路径中的每一个都获得自己的流程变量副本,因此它们彼此隔离运行。

但是当路径再次连接时会发生什么?显然可能存在冲突的更新。上下文是否恢复到分叉之前的状态?我可以选择从单独的轨道复制单个变量吗?

4

2 回答 2

2

我认为您必须配置任务的任务控制器。access在某些情况下,以不会导致冲突的方式设置属性就足够了(例如read,访问第一条路径和read,write访问第二条路径)。如果不是这种情况,那么您可以实现自己的并使用您的自定义逻辑TaskControllerHandler实现该方法。void submitTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token)请参阅:任务控制器

于 2008-09-22T10:08:49.157 回答
1

我尝试了一个小实验:

<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”,这些变量是由脚本针对父对象明确设置的。

共享变量从右分叉获取其值,在左侧所做的更改似乎消失了。

请注意,转换对我来说实际上并不是异步的,整个实验将在一个事务中运行,这些因素可能会影响结果

于 2009-03-02T19:36:51.440 回答