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
- Configure and start a BPMN (or CMMN) engine so its ManagementService bean is available to the REST resource.
- Verify Spring/auto-configuration includes the flowable engine configuration (flowable.process/cmmn.enabled and datasource).
- 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
- Enable BPMN or CMMN engine auto-configuration in the REST deployment
- Smoke-test job acquisition at application startup
- Monitor engine bean wiring in integration tests
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
- Cannot fail external jobs. There is no BPMN or CMMN engine…
- Cannot unacquire BPMN job. There is no BPMN engine available
- Cannot unacquire external jobs. There is no BPMN or CMMN…
- Cannot unacquire CMMN job. There is no CMMN engine available
- Can only unacquire BPMN or CMMN external job. Job with id
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)