flowable/flowable-engine · error · FlowableIllegalArgumentException
No deployed case definition found for key '${caseDefinitionK
Error message
No deployed case definition found for key '${caseDefinitionKey}'. What it means
FlowableIllegalArgumentException thrown as the last-resort check in getLatestCaseDefinitionByKey: after all lookup paths the caseDefinition variable is still null, so no deployed case definition exists for the key at all.
Source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/AbstractCaseStartEventSubscriptionCmd.java:107
} else {
caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);
}
if (caseDefinition == null) {
throw new FlowableObjectNotFoundException("No case definition found for key '" + caseDefinitionKey +
"'. Fallback to default tenant was also applied.", CaseDefinition.class);
}
} else {
throw new FlowableObjectNotFoundException("Case definition with key '" + caseDefinitionKey +
"' and tenantId '" + tenantId + "' was not found.", CaseDefinition.class);
}
}
}
if (caseDefinition == null) {
throw new FlowableIllegalArgumentException("No deployed case definition found for key '" + caseDefinitionKey + "'.");
}
return caseDefinition;
}
protected CaseDefinition getCaseDefinitionById(String caseDefinitionId, CommandContext commandContext) {
CmmnRepositoryService repositoryService = CommandContextUtil.getCmmnEngineConfiguration(commandContext).getCmmnRepositoryService();
CaseDefinition caseDefinition = repositoryService.createCaseDefinitionQuery()
.caseDefinitionId(caseDefinitionId)
.singleResult();
if (caseDefinition == null) {
throw new FlowableIllegalArgumentException("No deployed case definition found for id '" + caseDefinitionId + "'.");
}
return caseDefinition;
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Deploy the case definition with the expected key before triggering the subscription command.
- List deployed case definitions (repositoryService.createCaseDefinitionQuery().caseDefinitionKey(key)) to confirm presence.
- Correct the key referenced in the event-registry inbound start-event mapping.
Example fix
// before (subscription created before deployment) createSubscription(caseDefinitionKey); // key not yet deployed // after deploy(cmmnModel); createSubscription(caseDefinitionKey);
Defensive patterns
Strategy: validation
Validate before calling
long n = cmmnRepositoryService.createCaseDefinitionQuery().caseDefinitionKey(key).count(); if (n == 0) deploy(cmmnModel);
Try / catch
try { createSubscription(key); }
catch (FlowableIllegalArgumentException e) { if (e.getMessage().startsWith("No deployed case definition")) { deployAndRetry(key); } } Prevention
- Ensure deployment order: CMMN model first, then event subscriptions
- Guard against deployment cleanup deleting definitions still referenced by subscriptions
When it happens
Trigger: Reached when neither the no-tenant branch nor the tenant branch produced a definition (e.g., an unexpected combination leaves caseDefinition null after the if/else chain).
Common situations: Case model never deployed; deployment removed from the database; key mismatch between the case element's start-event mapping and the deployed case.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- No case definition found for key '${caseDefinitionKey}'
- No case definition found for key <caseDefinitionKey>
- DMN decision with key ${externalRef} was not executed. For $
- No event model found for event key ${key} for ${planItemInst
- No case definition found for key '${caseDefinitionKey}'. Fal
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/a8da36ea59bbe1dc.
Report an issue: GitHub.