Неправильное понимание исполнения Camunda BPM и переменной области видимости

Я работаю с движком процессов camunda BPM и считаю важным понимать некоторые концепции. На данный момент я немного борюсь с концепцией Выполнение процессов и Области действия переменных.

Чтобы понять, что происходит во время выполнения процесса, я разработал следующий демонстрационный процесс и пометил действия внутри одного выполнения тем же цветом. Я мог это сделать, потому что я отлаживал идентификатор выполнения внутри каждого действия.

введите описание изображения здесь

Я понимаю большую часть этого. Что меня удивило, так это то, что входной параметр открывает новое выполнение (задача 1.3). Благодарим meyerdan за разъяснения по этому поводу.

Я не понимаю, что «Задача 2.2» находится внутри того же выполнения «Задачи 2.1». цитата из документация camunda о казнях

Внутренне механизм процесса создает два параллельных выполнения внутри экземпляра процесса, по одному для каждого параллельного пути выполнения.

Так что я бы ожидал, что задача 2.1 / задача 2.2 и задача 3.1 находятся внутри своего собственного исполнения.

Кто-нибудь может это объяснить?

Моя главная мотивация понять это - влияние, которое это оказывает на объемы переменных процесса. Я пока не разобрался, какие методы Java API

VariableScope # getVariable / VariableScope # setVariable

VariableScope # getVariableLocal / VariableScope # setVariableLocal

действительно. Сначала я подумал, что варианты "Local" относятся только к текущему выполнению, а другие относятся только к выполнению экземпляра процесса - но это, похоже, только половина правда. Это геттеры и сеттеры, в которых я очень скучаю по JavaDoc ;-) Бонусные баллы за объяснение этого!

Спасибо!

Вы найдете процесс в проекте Maven с исполняемым тестом JUnit на GitHub.


person FrVaBe    schedule 07.12.2016    source источник
comment
Хотя это не отвечает на вопрос, вы можете найти эту вики-запись интересной: github.com/camunda/camunda-bpm-platform/wiki/PVM-Execution-Tree. Обратите внимание, что дерево выполнения и его структура не задокументированы в официальной документации. Потому что это внутреннее понятие и может меняться. Кроме того, он не отображает 1: 1 в концепции, определенные в BPMN, поэтому его довольно сложно понять. В вашем конкретном случае два одновременных выполнения создаются только тогда, когда становится активным первое одновременное действие. Любая дальнейшая параллельная деятельность просто добавляет еще одно параллельное выполнение.   -  person thorben    schedule 08.12.2016
comment
Я понимаю, что это может быть неудовлетворительным ответом, поскольку выполнение каким-то образом является частью API и также имеет значение для понимания обработки переменных. Корень всего этого - первые дни движка, в котором было принято решение о концепции исполнения. Его нельзя легко изменить из-за обратной совместимости.   -  person thorben    schedule 08.12.2016
comment
@thorben Ваш комментарий высоко ценится и, по крайней мере, подтвердил мои наблюдения. Не стесняйтесь дать это в качестве ответа. Наконец, все еще борется с влиянием get / set Variable (Local) на Scopes. Может устанавливать переменные с помощью Local и возвращать их без Local и наоборот. Странно для меня на данный момент.   -  person FrVaBe    schedule 08.12.2016
comment
Локальный всегда означает работу над выполнением, адресованным непосредственно операцией. Нелокальное выполнение означает операцию над выполнением, непосредственно адресованным операцией, или выполнением ближайшего предка, которому принадлежит переменная (или, если такого выполнения не существует, корневое выполнение, также известное как экземпляр процесса). Это то, что мы пытаемся зафиксировать в ссылке, предоставленной Falko.   -  person thorben    schedule 08.12.2016
comment
@thorben Наконец-то нашел объяснение о методах и их значении - извините, я, должно быть, пропустил это несколько раз ;-( - Пожалуйста, предоставьте свои комментарии в качестве ответа, чтобы я мог его принять. - И, конечно же, большое спасибо!   -  person FrVaBe    schedule 08.12.2016
comment
@thorben Значит, локальный означает всегда локальное выполнение, верно?   -  person Cristian    schedule 17.02.2021


Ответы (1)


Взгляните на Области действия и видимость переменных

Цитата из документации (Java Object API) о методе setVariable:

Обратите внимание, что этот код устанавливает переменную в наивысшую возможную точку в иерархии областей действия переменных. Это означает, что если переменная уже присутствует (будь то в этом исполнении или в любой из его родительских областей), она обновляется. Если переменная еще не присутствует, она создается в самом высоком объеме, то есть в экземпляре процесса. Если предполагается, что переменная должна быть установлена ​​точно в соответствии с предоставленным исполнением, можно использовать локальные методы.

person Falko Menge    schedule 08.12.2016
comment
Я сделал (я даже добавил ту же ссылку, что и вы в своем вопросе). Насколько я понимаю в документации после параллельного шлюза ожидается 2 новых исполнения (по одному на каждый путь). Но я наблюдаю другое поведение. Почему? - person FrVaBe; 08.12.2016
comment
Я добавил цитату из документации, которую вы связали, - должно быть, я как-то упустил из виду. Спасибо и +1 сейчас ;-) - person FrVaBe; 08.12.2016