Process Engine configuration parameters
Property prefixes (
unibpm.*), Kafka topic names, and module names such asunibpm-camunda8-adapterare technical identifiers from the shared codebase. The product name is Cabinee.
Scope
This document describes configuration parameters of the process engine and the components Cabinee uses to work with it.
You configure unibpm-app (Cabinee backend), unibpm-camunda8-adapter, and unibpm-camunda8-exporter; the orchestration cluster itself is configured with standard Camunda variables.
Format
The tables below use the following conventions:
- Prefix — the common prefix of a parameter group (for example,
spring.datasource). - Parameter — the parameter name within the group.
- Default value — the value used in the distribution configuration (unless overridden).
1. Enabling the engine
Configured in unibpm-app.
| Prefix | Parameter | Description | Value |
|---|---|---|---|
unibpm.engine | version | Enables Camunda 8 integration | 8 |
The property is required and has no default equal to 8: Camunda 8 components are declared with @ConditionalOnProperty(... havingValue = "8"), and without the property none of them are created in the application context.
A ready-made settings block lives in engine.yaml inside the unibpm-app artifact, but that file is not imported automatically. Either import it explicitly:
SPRING_CONFIG_IMPORT=classpath:engine.yaml
UNIBPM_ENGINE_VERSION=8
or set unibpm.engine.version: 8 directly in the deployment application.yaml. If you skip this, the application starts without errors but uses the legacy EngineService implementation and will not talk to the orchestration cluster.
2. Camunda 8 client configuration (camunda-eight-client.*)
Configured in unibpm-app. Defines how the application calls the Camunda 8 REST API v2.
2.1. Connection
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
camunda-eight-client | camunda-api-url | Base URL of the orchestration cluster REST API v2 | http://camunda:8080/v2 |
camunda-eight-client | search-page-size | Page size for /v2/*/search requests | 100 |
2.2. Multi-tenancy
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
camunda-eight-client | force-default-tenant | Replace the tenant with default-tenant-id | true |
camunda-eight-client | default-tenant-id | Tenant substituted when force-default-tenant: true | <default> |
Cabinee passes the space identifier as the tenant. This is correct only when Camunda multi-tenancy is enabled and each space is registered as a tenant. Until then,
force-default-tenantmust remaintrue, otherwise the cluster responds with400 multi-tenancy is disabledon every command.
2.3. Authorization
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
camunda-eight-client | oauth2-enabled | Attach a bearer token to requests | true |
camunda-eight-client | oauth2-registration-id | Entry name from spring.security.oauth2.client.registration.* | camunda8 |
The registration is resolved at request time, not at application start. A missing registration appears as
Could not find ClientRegistration with id ...on the first engine call, not as a startup error. If the cluster is started withCAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTEDAPI=true, the token is ignored anyway — in that case setoauth2-enabled: false.
2.4. Linking a ticket to a process instance
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
camunda-eight-client | business-key-variable | Process variable name that stores the ticket identifier | businessKey |
2.5. Automatic tasks (jobs)
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
camunda-eight-client.jobs | enabled | Enable the job activation worker | false |
camunda-eight-client.jobs | worker-id | Worker identifier | unibpm-app |
camunda-eight-client.jobs | fetch-delay-ms | Polling interval (ms) | 1000 |
camunda-eight-client.jobs | request-timeout-ms | Activation request timeout (ms) | 10000 |
camunda-eight-client.jobs.types | <jobType> | Job type list and parameters | not set |
camunda-eight-client.jobs.kafka-topics | jobs-pattern | Jobs topic pattern | reunico.unibpm.external-task.jobs.%s.prod |
camunda-eight-client.jobs.kafka-topics | results | Results topic | reunico.unibpm.external-task.results |
camunda-eight-client.jobs.kafka-topics | dlq | Dead-letter topic | reunico.unibpm.external-task.dlq |
The mechanism is disabled by default and is not battle-tested in production. It requires both
enabled: trueand a non-emptyjobs.types— with an empty list the worker ends its cycle without activating anything. Details: External tasks .
3. unibpm-camunda8-adapter configuration
A separate service that reads the engine record stream from Kafka. By default it listens on port 8090: 8080 is used by the orchestration cluster.
3.1. Database
Stores the processInstanceKey → businessKey mapping. Schema camunda8_adapter is created by an init script; ddl-auto remains none.
| Prefix | Parameter | Description | Environment variable |
|---|---|---|---|
spring.datasource | url | JDBC URL | ADAPTER_DB_URL |
spring.datasource | username | Database user | ADAPTER_DB_USERNAME |
spring.datasource | password | Database password | ADAPTER_DB_PASSWORD |
spring.datasource.hikari | maximum-pool-size | Connection pool size | ADAPTER_DB_POOL_SIZE (16) |
3.2. Kafka topics
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
unibpm.camunda8 | records-topic | Topic written by the exporter | reunico.unibpm.c8.records |
unibpm.camunda8 | change-state-topic | State-change event topic | reunico.unibpm.execution.events.prod |
unibpm.camunda8 | user-task-event-topic | User-task event topic | reunico.unibpm.task.events.prod |
The last two values must match
camunda-kafka-import.change-state-topicandcamunda-kafka-import.user-task-event-topicinunibpm-app. A mismatch fails silently: the adapter publishes to a topic nobody reads, and tickets simply do not change state.
3.3. Record processing
| Prefix | Parameter | Description | Default value |
|---|---|---|---|
unibpm.camunda8 | business-key-variable | Variable name used as the ticket identifier | businessKey |
unibpm.camunda8 | state-element-types | BPMN element types that produce state changes | START_EVENT, INTERMEDIATE_THROW_EVENT, END_EVENT |
unibpm.camunda8.deduplication | enabled | Suppress redelivered records | true |
unibpm.camunda8.deduplication | window-size | Deduplication window size | 100000 |
Zeebe delivers records at least once, so after a partition leader change some records arrive again. The deduplication window is in-memory and is lost when the adapter restarts: it covers failover redelivery, not a long outage. A record is marked processed only after successful handling, so a database failure does not drop the event.
4. unibpm-camunda8-exporter configuration
The exporter is loaded into the Zeebe broker JVM and configured with the broker’s own environment variables.
| Variable | Description | Default |
|---|---|---|
ZEEBE_BROKER_EXPORTERS_UNIBPM_CLASSNAME | Exporter class | required, com.reunico.unibpm.camunda8.exporter.UniBpmExporter |
ZEEBE_BROKER_EXPORTERS_UNIBPM_JARPATH | Path to the JAR inside the container | required, for example /usr/local/camunda/exporters/unibpm-camunda8-exporter.jar |
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_BOOTSTRAPSERVERS | Kafka address | required; the broker will not start without it |
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_TOPIC | Records topic | required; the broker will not start without it |
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_BATCHSIZE | Batch size before send | 500 |
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_FLUSHINTERVALMS | Forced flush interval (ms) | 1000 |
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_REQUESTTIMEOUTMS | Kafka request timeout (ms) | 30000 |
The list of exported record types (valueTypes) and extra producer properties (producerProperties) are non-scalar, so they are set only in the broker YAML configuration, not via environment variables:
zeebe:
broker:
exporters:
unibpm:
className: com.reunico.unibpm.camunda8.exporter.UniBpmExporter
jarPath: /usr/local/camunda/exporters/unibpm-camunda8-exporter.jar
args:
bootstrapServers: kafka:29092
topic: reunico.unibpm.c8.records
valueTypes: [ PROCESS_INSTANCE, USER_TASK, VARIABLE, INCIDENT, JOB ]
The default valueTypes matches the example, so most deployments do not need to set it.
Important constraints when configuring:
- the exporter must be built for the broker version at least matching on the minor part — otherwise the broker fails at start with
NoSuchMethodError; - types
VARIABLEandPROCESS_INSTANCEmust not be excluded: the adapter takesbusinessKeyfrom the former and parent-instance / completion data from the latter; - Camunda’s built-in Elasticsearch exporter must not be disabled: Operate, Tasklist, and all
/v2/*/searchendpoints depend on it.