Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Camunda BPM execution and variable scope misunderstanding

I work with the camunda BPM process engine and think it is important to understand some concepts. At the moment I struggle a little bit with the concept of Process Executions and Variable Scopes.

To understand what happens during a process execution I designed the following demo process and marked the activities inside the same execution with the same color. I could do this because I debugged the execution id inside each activity.

enter image description here

I understand most of it. What surprised me is that an input parameter opens a new execution (Task 1.3). Thanks meyerdan for clarification on this.

What I do not understand is that "Task 2.2" is inside the same execution of "Task 2.1". A quote from the camunda documentation about Executions is

Internally, the process engine creates two concurrent executions inside the process instance, one for each concurrent path of execution.

So I would have exepcted that Task 2.1 / Task 2.2 and Task 3.1 each live inside an own execution.

Is anyone able to explain this?

My main motivation to understand this is the impact it has on process variable scopes. I did not figure out so far what the Java API methods

VariableScope#getVariable / VariableScope#setVariable

VariableScope#getVariableLocal / VariableScope#setVariableLocal

really do. I first thought that the "Local" variants only refer to the current execution and the other ones only refer to the process instance execution - but that seems to be only half of the truth. These are getters and setters where I miss JavaDoc painfully ;-) Bonus points for also explaining this!

Thanks!

You will find the process in a Maven project with an executable JUnit test on GitHub.

like image 516
FrVaBe Avatar asked Dec 07 '16 15:12

FrVaBe


People also ask

What is execution scope in Camunda?

This means, if the variable is already present (whether in this execution or any of its parent scopes), it is updated. If the variable is not yet present, it is created in the highest scope, i.e. the process instance. If a variable is supposed to be set exactly on the provided execution, the local methods can be used.

How do you set variables in Camunda?

startProcessInstanceByKey("Process_1", variables); where my variables is as follows: Map variables = new HashMap(); variables. put("a", 2); variables. put("b", 5);

What is delegate expression in Camunda?

The main difference between “Java Class” and “Delegate Expression” is the instantiation of the delegates IMO. WIth Java Class, the engine will instantiate the delagates, hence you'll have almost no possibilities to set up the objects. If you use delegate expressions, you can set up, wire etc.

What are the advantages of Camunda?

“The core advantages of Camunda Platform compared to our previous commercial solution are the increased flexibility, the usage of standard technologies and knowledge, reduced licensing costs and an accelerated software development process.”


1 Answers

Have a look at Variable Scopes and Variable Visibility

A quote from the documentation (Java Object API) about the setVariable method:

Note that this code sets a variable at the highest possible point in the hierarchy of variable scopes. This means, if the variable is already present (whether in this execution or any of its parent scopes), it is updated. If the variable is not yet present, it is created in the highest scope, i.e. the process instance. If a variable is supposed to be set exactly on the provided execution, the local methods can be used.

like image 57
Falko Menge Avatar answered Sep 30 '22 03:09

Falko Menge