Skip to content

Remote Engine Process-Variable Configuration

Purpose#

This configuration is intended for a remote process engine: a process application that runs Camunda and Taskpool Collector while Taskpool Core (or its command handlers) is deployed separately. In this topology, process-specific Java configuration is often undesirable. The collector can instead create its process-variable filter and business-data correlator entirely from Spring properties, so the configuration can be supplied by the environment, a mounted configuration file, or a configuration service.

The feature controls two distinct outputs added to task commands:

Component What it controls Result
ProcessVariablesFilter Which Camunda process variables may become task payload A smaller, deliberate task payload
ProcessVariablesCorrelator Which process-variable values identify business data Task correlations of entry-type and entryId

Filtering does not create correlations, and correlation does not add a variable to the task payload. Configure both when the remote task platform needs both the selected payload values and references to business data.

Safe variable deserialization#

When a payload filter can exclude a variable for a task, the collector first reads available variable names with Camunda deserialization disabled. It applies the configured payload filter, adds variables needed by configured correlations, and only then reads that selected set with deserialization enabled. This allows a remote standalone engine to contain excluded complex variables whose Java classes are not present in the collector deployment. Without an applicable restriction, the collector keeps the original single deserialized read.

Variables selected for task payload or correlation must still be deserializable by the collector. A variable used only for a correlation remains out of the payload unless it also passes the payload filter.

Required collector setup#

Process-variable enrichment must be active for filtering and correlation to be applied to task commands:

polyflow:
  integration:
    collector:
      camunda:
        task:
          enricher:
            type: process-variables

For a remote command destination, use a sender strategy that dispatches after the Camunda transaction has committed. txjob writes a Camunda job and sends the accumulated commands in its own transaction, which avoids sending a command for an engine transaction that later rolls back:

polyflow:
  integration:
    sender:
      task:
        enabled: true
        type: txjob

See Taskpool Sender for sender and transactional-delivery details.

Complete remote-engine example#

The following example configures an approval process without adding an application-specific @Bean. The task payload contains only the selected variables. Every approval task is correlated to a request, and its approve task also carries a customer correlation.

polyflow:
  integration:
    collector:
      camunda:
        task:
          enabled: true
          enricher:
            type: process-variables
            process-variables-filter:
              enabled: true
              filters:
                - process-definition-key: approval
                  filter-type: INCLUDE
                  process-variables:
                    - requestId
                    - applicant
                    - customerId
                  task-variables:
                    approve:
                      - requestId
                      - customerId
            process-variables-correlator:
              enabled: true
              correlations:
                - process-definition-key: approval
                  global-correlations:
                    - entry-id-variable-name: requestId
                      entry-type: request
                  correlations:
                    approve:
                      - entry-id-variable-name: customerId
                        entry-type: customer
    sender:
      task:
        enabled: true
        type: txjob

Spring Boot's relaxed binding also accepts kebab-case names, for example process-definition-key, filter-type, and entry-id-variable-name.

Process-variable filter#

Enable the property-backed filter with:

polyflow.integration.collector.camunda.task.enricher.process-variables-filter.enabled=true

The YAML snippets below are the contents of polyflow.integration.collector.camunda.task.enricher.

Property Type Default Description
enabled Boolean false Creates the property-backed ProcessVariablesFilter.
filters list empty Filter definitions, each global or scoped to one process definition.
filters[].process-definition-key String absent Process definition key. Omit only for a global process-level filter.
filters[].filter-type INCLUDE / EXCLUDE EXCLUDE Whether the listed variables are permitted or rejected.
filters[].process-variables list of String empty Variables for every task in the process.
filters[].task-variables map of task key to list of String empty Variables per task; makes the definition task-level.

One definition can contain both process-variables and task-variables. A task-level definition requires process-definition-key. When both fields are supplied, the process-level rule applies to every task and the task-level rule is an additional restriction for the task keys listed. A variable must pass all applicable filters; in other words, the rules are combined as an allow-list intersection (or, for exclusions, the union of excluded names).

Process-level filters#

An INCLUDE filter makes the payload an allow-list. It is the usual safe choice for a remote engine because variables such as internal state, technical IDs, or large objects are not accidentally sent to the remote task platform.

process-variables-filter:
  enabled: true
  filters:
    - process-definition-key: approval
      filter-type: INCLUDE
      process-variables: [requestId, applicant, customerId]

An EXCLUDE filter sends every variable except those named. It is useful when the set of business variables is large and stable technical variables must stay local:

process-variables-filter:
  enabled: true
  filters:
    - process-definition-key: approval
      filter-type: EXCLUDE
      process-variables: [internalAudit, transientToken]

Task-level filters#

Use task-level filtering when individual tasks need different payloads. It can be combined with a process-level filter in the same definition. A task key absent from task-variables is restricted only by the process-level rule.

process-variables-filter:
  enabled: true
  filters:
    - process-definition-key: approval
      filter-type: INCLUDE
      process-variables: [requestId, applicant, customerId]
      task-variables:
        submit: [requestId, applicant]
        approve: [requestId, applicant, customerId]

Global filters and precedence#

A process-level filter without process-definition-key is global. It applies only to process definitions that do not have their own filter. A process-specific filter takes precedence over the global filter.

process-variables-filter:
  enabled: true
  filters:
    - filter-type: EXCLUDE
      process-variables: [internalAudit]
    - process-definition-key: approval
      filter-type: INCLUDE
      process-variables: [requestId, applicant]

Process-variable correlation#

Enable the property-backed correlator with:

polyflow.integration.collector.camunda.task.enricher.process-variables-correlator.enabled=true

The YAML snippets below are the contents of polyflow.integration.collector.camunda.task.enricher.

Property Type Default Description
enabled Boolean false Creates the property-backed ProcessVariablesCorrelator.
correlations list empty One correlation definition per process definition key.
correlations[].process-definition-key String required Process definition key.
correlations[].global-correlations list empty Correlations applied to every task of the process.
correlations[].correlations map of task key to list empty Additional correlations applied only to the named task.
*.entry-id-variable-name String required Camunda variable whose value becomes the business entry ID.
*.entry-type String required Business-data entry type associated with that ID.

A global correlation is useful for the primary business object of a process:

process-variables-correlator:
  enabled: true
  correlations:
    - process-definition-key: approval
      global-correlations:
        - entry-id-variable-name: requestId
          entry-type: request

Add task-specific correlations for data that is relevant only at selected user tasks:

process-variables-correlator:
  enabled: true
  correlations:
    - process-definition-key: approval
      correlations:
        approve:
          - entry-id-variable-name: customerId
            entry-type: customer
        amend:
          - entry-id-variable-name: previousRequestId
            entry-type: request

If the configured process variable is absent for a task, no correlation is created for that definition. Variable values are converted to their string representation before they are stored as entry IDs.

Defaults and custom beans#

Both property configurations are opt-in. If a feature is disabled or omitted, the collector retains its existing fallback behavior:

  • the fallback filter does not remove variables;
  • the fallback correlator creates no correlations.

An application-defined ProcessVariablesFilter or ProcessVariablesCorrelator bean takes precedence over these property-backed beans, even if the corresponding enabled property is true. Use a custom bean when filter composition or correlation logic cannot be represented by the property model.