Process composition is supported in jBPM by means of the process-state
.
The process state is a state that is associated with another process definition. When graph
execution arrives in the process state, a new process instance of the sub-process is created
and it is associated with the path of execution that arrived in the process state. The
path of execution of the super process will wait till the sub process instance has ended.
When the sub process instance ends, the path of execution of the super process will leave
the process state and continue graph execution in the super process.
<process-definition name="hire"> <start-state> <transition to="initial interview" /> </start-state> <process-state name="initial interview"> <sub-process name="interview" /> <variable name="a" access="read,write" mapped-name="aa" /> <variable name="b" access="read" mapped-name="bb" /> <transition to="..." /> </process-state> ... </process-definition>
This 'hire' process contains a process-state
that spawns an 'interview' process.
When execution arrives in the 'first interview', a new execution (=process instance) of
the 'interview' process is created. If no explicit version is specified, the latest version
of the sub process as known when deploying the 'hire' process is used. To make jBPM
instantiate a specific version the optional version
attribute can be
specified. To postpone binding the specified or latest version until actually creating the
sub process, the optional binding
attribute should be set to
late
.
Then variable 'a' from
the hire process is copied into variable 'aa' from the interview process.
The same way, hire variable 'b' is copied into interview variable 'bb'.
When the interview process finishes, only variable 'aa' from the
interview process is copied back into the 'a' variable of the
hire process.
In general, When a subprocess is started, all variable
s with
read
access are read from the super process and fed into the newly created sub process before the signal
is given to leave the start state. When the sub process instances is finished, all the
variable
s with write
access will be copied from the sub
process to the super process. The mapped-name
attribute of the variable
element allows you to specify the variable name that should be used in the sub process.