jBPM,并发执行和流程变量

时间:2008-09-22 07:29:45

标签: workflow bpm jbpm

当jBPM中的进程分叉到并发路径时,这些路径中的每一个都会获得自己的进程变量副本,以便它们彼此隔离。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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”,这是由脚本明确地设置的。

共享变量从右侧分叉获取其值,左侧的变化似乎消失了。

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