flowable/flowable-engine · error · FlowableException

Cannot acquire external jobs. There is no BPMN or CMMN…

Error message

Cannot acquire external jobs. There is no BPMN or CMMN engine available

What it means

FlowableException thrown by createExternalWorkerAcquireBuilder when neither the BPMN ProcessEngine's managementService nor the CMMN engine's cmmnManagementService is injected into the REST resource. External worker job acquisition requires at least one configured engine. Without a engine binding there is nothing to acquire jobs from.

Solutions

  1. Configure and start a BPMN (or CMMN) engine so its ManagementService bean is available to the REST resource.
  2. Verify Spring/auto-configuration includes the flowable engine configuration (flowable.process/cmmn.enabled and datasource).
  3. Check startup logs for engine initialization failures that left managementService null.

Example fix

// application.yml before
flowable:
  process:
    enabled: false
// after
flowable:
  process:
    enabled: true
Defensive patterns

Strategy: fallback

Validate before calling

boolean enginesAvailable = processEngine != null || cmmnEngine != null; // check at startup
if (!enginesAvailable) throw new IllegalStateException("No engine configured for external worker REST API");

Try / catch

try { acquireJobs(request); } catch (FlowableException e) { if (e.getMessage().contains("no BPMN or CMMN engine")) { alertOps("Engine misconfiguration"); } else { throw e; } }

Prevention

When it happens

Trigger: POST /external-worker-job/acquire (acquireBuilder path) on a REST app where the BPMN and CMMN engines are both absent or their ManagementService beans failed to wire into ExternalWorkerAcquireJobResource.

Common situations: Deploying only the external-job REST module without process/cmmn engine configuration; Spring configuration that excludes the ProcessEngine auto-configuration; engine bootstrap failure at startup leaving services null.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/9294a371f05e9518. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerAcquireJobResource.java:296

                    throw new FlowableIllegalArgumentException("Variable name is required.");
                }

                variables.put(restVariable.getName(), restResponseFactory.getVariableValue(restVariable));
            }

            return variables;
        }

        return Collections.emptyMap();
    }

    protected ExternalWorkerJobAcquireBuilder createExternalWorkerAcquireBuilder() {
        if (managementService != null) {
            return managementService.createExternalWorkerJobAcquireBuilder();
        } else if (cmmnManagementService != null) {
            return cmmnManagementService.createExternalWorkerJobAcquireBuilder();
        } else {
            throw new FlowableException("Cannot acquire external jobs. There is no BPMN or CMMN engine available");
        }
    }

    protected ExternalWorkerJobFailureBuilder createExternalWorkerJobFailureBuilder(String jobId, String workerId) {
        if (managementService != null) {
            return managementService.createExternalWorkerJobFailureBuilder(jobId, workerId);
        } else if (cmmnManagementService != null) {
            return cmmnManagementService.createExternalWorkerJobFailureBuilder(jobId, workerId);
        } else {
            throw new FlowableException("Cannot fail external jobs. There is no BPMN or CMMN engine available");
        }
    }
}

View on GitHub (pinned to d6d39ce1c6)