flowable/flowable-engine · error · FlowableObjectNotFoundException
no decisions deployed with key
Error message
no decisions deployed with key '${definitionKey}' What it means
findDeployedLatestDefinitionByKey throws FlowableObjectNotFoundException when no decision with the given key is deployed at all (findLatestDecisionByKey returns null). The decision key is the logical identifier used by decision tables to reference decisions across versions.
Solutions
- List deployed decisions via dmnRepositoryService.createDecisionQuery().list() and confirm the exact key.
- Deploy the DMN resource containing the decision before executing the decision table.
- Align the decisionTable decision reference key with the key in the .dmn XML (e.g. after a rename/refactor).
Example fix
// before
DecisionEntity d = manager.findDeployedLatestDefinitionByKey("approveOrder"); // NPE risk / not found
// after
DmnDecision d = dmnRepositoryService.createDecisionQuery().latest().decisionKey("approveOrder").singleResult();
if (d == null) {
dmnRepositoryService.createDeployment().addClasspathResource("approveOrder.dmn").deploy();
}
d = manager.findDeployedLatestDefinitionByKey("approveOrder"); Defensive patterns
Strategy: validation
Validate before calling
boolean keyDeployed = dmnRepositoryService.createDecisionQuery()
.latest().decisionKey(decisionKey).count() > 0; Try / catch
try { return manager.findDeployedLatestDefinitionByKey(key); } catch (FlowableObjectNotFoundException e) { throw new IllegalStateException("DMN for key '" + key + "' not deployed — deploy resources first", e); } Prevention
- Make DMN deployment an explicit startup/CI step before rule execution
- Grep .dmn files for the decision keys your decision tables reference
- Add an integration test that resolves every referenced decision key
When it happens
Trigger: Calling findDeployedLatestDefinitionByKey with a key that has never been deployed, or after all deployments containing that decision were deleted.
Common situations: DMN deployment not made in the target environment; decision key renamed in the .dmn XML while the decision table still references the old key; wrong database or tenant setup.
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 decision deployed with key =
- no decisions deployed with key
- no decisions deployed with key
- Could not find a deployment with id
- no decision found with id
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/227dbb553e291ccb.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/persistence/deploy/DeploymentManager.java:85
// first try the cache
DecisionCacheEntry cacheEntry = decisionCache.get(decisionId);
DecisionEntity decision = cacheEntry != null ? cacheEntry.getDecisionEntity() : null;
if (decision == null) {
decision = engineConfig.getDecisionEntityManager().findById(decisionId);
if (decision == null) {
throw new FlowableObjectNotFoundException("no decision found with id '" + decisionId + "'");
}
decision = resolveDecision(decision).getDecisionEntity();
}
return decision;
}
public DecisionEntity findDeployedLatestDefinitionByKey(String definitionKey) {
DecisionEntity definition = decisionEntityManager.findLatestDecisionByKey(definitionKey);
if (definition == null) {
throw new FlowableObjectNotFoundException("no decisions deployed with key '" + definitionKey + "'");
}
definition = resolveDecision(definition).getDecisionEntity();
return definition;
}
public DecisionEntity findDeployedLatestDefinitionByKeyAndTenantId(String definitionKey, String tenantId) {
DecisionEntity definition = decisionEntityManager.findLatestDecisionByKeyAndTenantId(definitionKey, tenantId);
if (definition == null) {
throw new FlowableObjectNotFoundException("no decisions deployed with key '" + definitionKey + "' for tenant identifier '" + tenantId + "'");
}
definition = resolveDecision(definition).getDecisionEntity();
return definition;
}
public DecisionEntity findDeployedLatestDecisionByKeyAndDeploymentId(String definitionKey, String deploymentId) {
DecisionEntity definition = decisionEntityManager.findDecisionByDeploymentAndKey(deploymentId, definitionKey);
View on GitHub (pinned to d6d39ce1c6)