flowable/flowable-engine · error · FlowableObjectNotFoundException
no case definition deployed with key = '<caseDefinitionKey>'
Error message
no case definition deployed with key = '<caseDefinitionKey>' and version = '<caseDefinitionVersion>'
What it means
findDeployedCaseDefinitionByKeyAndVersionAndTenantId looks up a specific version of a case definition by key, version and tenant. When the database has no matching row it throws FlowableObjectNotFoundException. Note the message omits the tenant, which can mislead when the tenant constraint is the actual reason for the miss.
Source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/deployer/CmmnDeploymentManager.java:99
}
caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();
return caseDefinition;
}
public CaseDefinition findDeployedLatestCaseDefinitionByKeyAndTenantId(String caseDefinitionKey, String tenantId) {
CaseDefinition caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKeyAndTenantId(caseDefinitionKey, tenantId);
if (caseDefinition == null) {
throw new FlowableObjectNotFoundException("no case definition deployed with key '" + caseDefinitionKey + "' for tenant identifier '" + tenantId + "'", CaseDefinition.class);
}
caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();
return caseDefinition;
}
public CaseDefinition findDeployedCaseDefinitionByKeyAndVersionAndTenantId(String caseDefinitionKey, Integer caseDefinitionVersion, String tenantId) {
CaseDefinition caseDefinition = (CaseDefinitionEntity) caseDefinitionEntityManager
.findCaseDefinitionByKeyAndVersionAndTenantId(caseDefinitionKey, caseDefinitionVersion, tenantId);
if (caseDefinition == null) {
throw new FlowableObjectNotFoundException("no case definition deployed with key = '" + caseDefinitionKey + "' and version = '" + caseDefinitionVersion + "'", CaseDefinition.class);
}
caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();
return caseDefinition;
}
public CaseDefinitionCacheEntry resolveCaseDefinition(CaseDefinition caseDefinition) {
String caseDefinitionId = caseDefinition.getId();
String deploymentId = caseDefinition.getDeploymentId();
CaseDefinitionCacheEntry cachedCaseDefinition = caseDefinitionCache.get(caseDefinitionId);
if (cachedCaseDefinition == null) {
CmmnDeploymentEntity deployment = deploymentEntityManager.findById(deploymentId);
deployment.setNew(false);
deploy(deployment, null);
cachedCaseDefinition = deployment.getCaseDefinitionCacheEntry(caseDefinitionId);
if (cachedCaseDefinition == null) {View on GitHub (pinned to d6d39ce1c6)
Solutions
- Confirm available versions via createCaseDefinitionQuery().caseDefinitionKey(key).list() and use an existing version
- Use latestVersion() resolution instead of pinning an exact version
- Check the tenantId parameter too, since it is part of the lookup but not the error message
Example fix
// before
managementService // or repository lookup
...findCaseDefinitionByKeyAndVersionAndTenantId("credit", 3, "acme"); // only v2 deployed
// after
...findCaseDefinitionByKeyAndVersionAndTenantId("credit", 2, "acme"); Defensive patterns
Strategy: validation
Validate before calling
List<CaseDefinition> defs = repositoryService.createCaseDefinitionQuery().caseDefinitionKey(key).caseDefinitionTenantId(tenantId).orderByCaseDefinitionVersion().desc().list(); // pick an existing version
Try / catch
try { def = lookupByKeyVersionTenant(key, version, tenant); } catch (FlowableObjectNotFoundException e) { def = latestAvailable(key, tenant); } Prevention
- Avoid pinning exact versions in config; use latest resolution
- Check tenantId when an exact-version lookup unexpectedly misses
When it happens
Trigger: Requesting a version that was never deployed or was removed (cascade delete of a deployment), with an exact-version pin (e.g. version=3) while only versions 1-2 exist; tenant mismatch not visible in the message.
Common situations: Pinning version numbers in config after a redeploy reset versions; deleting old deployments then falling back to a pinned old version; environment-specific tenants differing between staging and prod.
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
- Cannot find case definition with id
- Cannot find case definition for id:
- Cannot find case definition for id:
- No case definition found for id = '
- no deployed case definition found with id '<caseDefinitionId
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/cd0276f566c5ad7e.
Report an issue: GitHub.