-
Feature Request
-
Resolution: Fixed
-
L3 - Default
-
None
-
None
The aim of this issue is to support scenarios where multiple process engines share a database but work on different processes. This is mostly the case when users embedd the process engine inside multiple different applications but want to have a shared database for
a) monitoring.
b) want to support asynchronous inter-process communication though the job executor (using the process engine as a distributed middleware)
In this situation we need to make sure that the job executor only acquires and executes jobs that can actually be executed by the process engine in question. In the context of this issue we refer to that situation as a "heterogeneous cluster" ie. there are multiple process engine nodes in the cluster working on different deployments.
AT:
- the job executor may operate in two modes: "acquire all" or "acquire active". (think about naming)
- In "acquire all" mode it will acquire and execute all jobs that are "executable".
- In "acquire active" mode
- the process engine maintains a set of deploymentIds
- the job executor will only acquire Jobs which are "executable" and where the deployment Id is either null or in the list of deploymentIds
- If a process application is registered (ManagementService.registerProcessApplication) and the process engine is operating in "acquire active" mode: the deployment id is added to the set. (unregistering the process application removes it from the set)
- management information & interaction API is exposed through the management service and the Process Engine MBean
Summing up the implementation:
- process engine config has a property "jobExecutorDeploymentAware", corresponding to the modes as described in the AT
- the set of registered deployments is maintained regardless of the mode (however, it is not used, if "jobExecutorDeploymentAware" is false
- every deployment is registered (in the DeployCmd), regardless whether its a deployment via Java API or as a declared process application
- inspection of registered deployment as well as explicitly registering and unregistering is possible via ManagementService and process engine MBean
- registering is only possible, if the deloyment exists in the data base
- the job executor docs have been moved to camunda.org (see User Guide -> Process Engine -> The Job Executor)
- this feature is documented in the "Cluster Setups" subsection