Я попытался провести небольшой эксперимент:
<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"/>
В конце концов, я имел доступ к трем переменным, общий, справа и «fromRight», который был установлен с помощью сценария против родителя в явном виде.
Общая переменная приняла свое значение с правой вилки, изменения, сделанные слева, казалось, исчезли.
Обратите внимание, что переходы на самом деле не асинхронный для меня, и весь эксперимент будет работать в одной транзакции, эти факторы могут повлиять на исход
Я так думаю, что это правильный ответ. Используя jBPM, вы пишете «программу рабочего процесса» и должны решать свои собственные, уникальные проблемы, потому что никакая общая переменная синхронизации не может быть идеальной. – 2008-10-28 22:45:08