flowable/flowable-engine · error · FlowableException
Cannot unacquire CMMN job. There is no CMMN engine available
Error message
Cannot unacquire CMMN job. There is no CMMN engine available
What it means
FlowableException thrown by unaquireJob when the job is CMMN-scoped but the cmmnManagementService is null. The engine required to release the CMMN external worker job lock is not configured in the REST resource. Same pattern as the BPMN-side check.
Solutions
- Enable/configure the CMMN engine so cmmnManagementService is injected.
- Remove stale CMMN external worker jobs if the CMMN engine is intentionally absent.
- Confirm the deployment's engine auto-configuration includes flowable.cmmn.enabled=true.
Example fix
// before
flowable:
cmmn:
enabled: false
// after
flowable:
cmmn:
enabled: true Defensive patterns
Strategy: fallback
Validate before calling
boolean canUnacquireCmmn = cmmnEngine != null; // verify before handling CMMN-scoped jobs
Try / catch
try { unaquireJob(jobId, request); } catch (FlowableException e) { if (e.getMessage().contains("no CMMN engine")) { alertOps("CMMN engine not configured"); } else { throw e; } } Prevention
- Enable the CMMN engine when case external worker jobs exist
- Purge stale CMMN jobs on process-only deployments
- Verify flowable.cmmn.enabled in configuration
When it happens
Trigger: POST /external-worker-job/unacquire/jobs/{jobId} for a job with scopeType CMMN where the CMMN engine's management service is not wired into the resource.
Common situations: Process-only deployments that still have CMMN jobs in the database; CMMN engine auto-configuration disabled; standalone REST module without engine beans.
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 acquire external jobs. There is no BPMN or CMMN…
- 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…
- An assignee is required when delegating a task.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/d5de469c8f37c343.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerUnacquireJobResource.java:105
if (restApiInterceptor != null) {
restApiInterceptor.unacquireExternalWorkerJob(job, request);
}
managementService.unacquireExternalWorkerJob(jobId, workerId);
} else {
throw new FlowableException("Cannot unacquire BPMN job. There is no BPMN engine available");
}
} else if (ScopeTypes.CMMN.equals(job.getScopeType())) {
if (cmmnManagementService != null) {
if (restApiInterceptor != null) {
restApiInterceptor.unacquireExternalWorkerJob(job, request);
}
cmmnManagementService.unacquireExternalWorkerJob(jobId, workerId);
} else {
throw new FlowableException("Cannot unacquire CMMN job. There is no CMMN engine available");
}
} else {
throw new FlowableIllegalArgumentException(
"Can only unacquire BPMN or CMMN external job. Job with id '" + jobId + "' is from scope '" + job.getScopeType() + "'");
}
return ResponseEntity.noContent().build();
}
protected void unaquireExternalWorkerJobs(String workerId, String tenantId) {
if (managementService != null) {
if (StringUtils.isNotEmpty(tenantId)) {
managementService.unacquireAllExternalWorkerJobsForWorker(workerId, tenantId);
} else {
managementService.unacquireAllExternalWorkerJobsForWorker(workerId);
}
View on GitHub (pinned to d6d39ce1c6)