flowable/flowable-engine · error · FlowableObjectNotFoundException
no decision found with id
Error message
no decision found with id '${decisionId}' What it means
findDeployedDecisionById throws FlowableObjectNotFoundException('no decision found with id ...') when neither the decision cache nor the database (findById) returns a DecisionEntity for the given id. It signals that the id references nothing that was ever deployed.
Solutions
- Verify the decision id exists: query the DmnRepositoryService (createDecisionQuery().decisionId(id)) before executing.
- Re-deploy the DMN deployment containing the decision, or repair the decision-table reference to point at an existing decision.
- Confirm you are connected to the database/environment where the decision was actually deployed.
Example fix
// before
DecisionEntity d = deploymentManager.findDeployedDecisionById(decisionId);
// after
DmnDecision d = dmnRepositoryService.createDecisionQuery().decisionId(decisionId).singleResult();
if (d == null) {
throw new FlowableObjectNotFoundException("decision " + decisionId + " is not deployed");
}
DecisionEntity entity = deploymentManager.findDeployedDecisionById(decisionId); Defensive patterns
Strategy: try-catch
Validate before calling
DmnDecision d = dmnRepositoryService.createDecisionQuery().decisionId(decisionId).singleResult(); boolean decisionExists = d != null;
Try / catch
try { return manager.findDeployedDecisionById(decisionId); } catch (FlowableObjectNotFoundException e) { log.warn("decision {} not deployed", decisionId); return null; /* or redeploy */ } Prevention
- Query DecisionQuery by id before executing
- Never delete deployments still referenced by decision tables
- Keep environments' databases consistent with what your rules reference
When it happens
Trigger: Calling findDeployedDecisionById (directly or via decisionTableEntity resolution) with a decisionId that has no matching row in ACT_DMN_DECISION.
Common situations: Decision deleted or deployment removed while a decision-table rule still references the old id; wrong database/schema or tenant environment; typo in the referenced decision id; redeploying with a changed decision key so old ids dangle.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Cannot find process instance with id
- Could not find a deployment with id
- execution " + executionId + " doesn't exist
- Invalid decision id : null
- no decision deployed with key =
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/ae7d74ff2c8ad776.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/persistence/deploy/DeploymentManager.java:74
public void deploy(DmnDeploymentEntity deployment, Map<String, Object> deploymentSettings) {
for (Deployer deployer : deployers) {
deployer.deploy(deployment, deploymentSettings);
}
}
public DecisionEntity findDeployedDecisionById(String decisionId) {
if (decisionId == null) {
throw new FlowableException("Invalid decision id : null");
}
// 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);View on GitHub (pinned to d6d39ce1c6)