Book a Demo

Process Engine configuration parameters

Property prefixes (unibpm.*), Kafka topic names, and module names such as unibpm-camunda8-adapter are 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.

PrefixParameterDescriptionValue
unibpm.engineversionEnables Camunda 8 integration8

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

PrefixParameterDescriptionDefault value
camunda-eight-clientcamunda-api-urlBase URL of the orchestration cluster REST API v2http://camunda:8080/v2
camunda-eight-clientsearch-page-sizePage size for /v2/*/search requests100

2.2. Multi-tenancy

PrefixParameterDescriptionDefault value
camunda-eight-clientforce-default-tenantReplace the tenant with default-tenant-idtrue
camunda-eight-clientdefault-tenant-idTenant 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-tenant must remain true, otherwise the cluster responds with 400 multi-tenancy is disabled on every command.

2.3. Authorization

PrefixParameterDescriptionDefault value
camunda-eight-clientoauth2-enabledAttach a bearer token to requeststrue
camunda-eight-clientoauth2-registration-idEntry 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 with CAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTEDAPI=true, the token is ignored anyway — in that case set oauth2-enabled: false.

2.4. Linking a ticket to a process instance

PrefixParameterDescriptionDefault value
camunda-eight-clientbusiness-key-variableProcess variable name that stores the ticket identifierbusinessKey

2.5. Automatic tasks (jobs)

PrefixParameterDescriptionDefault value
camunda-eight-client.jobsenabledEnable the job activation workerfalse
camunda-eight-client.jobsworker-idWorker identifierunibpm-app
camunda-eight-client.jobsfetch-delay-msPolling interval (ms)1000
camunda-eight-client.jobsrequest-timeout-msActivation request timeout (ms)10000
camunda-eight-client.jobs.types<jobType>Job type list and parametersnot set
camunda-eight-client.jobs.kafka-topicsjobs-patternJobs topic patternreunico.unibpm.external-task.jobs.%s.prod
camunda-eight-client.jobs.kafka-topicsresultsResults topicreunico.unibpm.external-task.results
camunda-eight-client.jobs.kafka-topicsdlqDead-letter topicreunico.unibpm.external-task.dlq

The mechanism is disabled by default and is not battle-tested in production. It requires both enabled: true and a non-empty jobs.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.

PrefixParameterDescriptionEnvironment variable
spring.datasourceurlJDBC URLADAPTER_DB_URL
spring.datasourceusernameDatabase userADAPTER_DB_USERNAME
spring.datasourcepasswordDatabase passwordADAPTER_DB_PASSWORD
spring.datasource.hikarimaximum-pool-sizeConnection pool sizeADAPTER_DB_POOL_SIZE (16)

3.2. Kafka topics

PrefixParameterDescriptionDefault value
unibpm.camunda8records-topicTopic written by the exporterreunico.unibpm.c8.records
unibpm.camunda8change-state-topicState-change event topicreunico.unibpm.execution.events.prod
unibpm.camunda8user-task-event-topicUser-task event topicreunico.unibpm.task.events.prod

The last two values must match camunda-kafka-import.change-state-topic and camunda-kafka-import.user-task-event-topic in unibpm-app. A mismatch fails silently: the adapter publishes to a topic nobody reads, and tickets simply do not change state.

3.3. Record processing

PrefixParameterDescriptionDefault value
unibpm.camunda8business-key-variableVariable name used as the ticket identifierbusinessKey
unibpm.camunda8state-element-typesBPMN element types that produce state changesSTART_EVENT, INTERMEDIATE_THROW_EVENT, END_EVENT
unibpm.camunda8.deduplicationenabledSuppress redelivered recordstrue
unibpm.camunda8.deduplicationwindow-sizeDeduplication window size100000

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.

VariableDescriptionDefault
ZEEBE_BROKER_EXPORTERS_UNIBPM_CLASSNAMEExporter classrequired, com.reunico.unibpm.camunda8.exporter.UniBpmExporter
ZEEBE_BROKER_EXPORTERS_UNIBPM_JARPATHPath to the JAR inside the containerrequired, for example /usr/local/camunda/exporters/unibpm-camunda8-exporter.jar
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_BOOTSTRAPSERVERSKafka addressrequired; the broker will not start without it
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_TOPICRecords topicrequired; the broker will not start without it
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_BATCHSIZEBatch size before send500
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_FLUSHINTERVALMSForced flush interval (ms)1000
ZEEBE_BROKER_EXPORTERS_UNIBPM_ARGS_REQUESTTIMEOUTMSKafka 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 VARIABLE and PROCESS_INSTANCE must not be excluded: the adapter takes businessKey from 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/*/search endpoints depend on it.