{"record":{"id":"690d55f654ad3c0c","repo":"flowable/flowable-engine","slug":"no-decision-found-for-key-decisionkey-there-was-690d55","errorCode":null,"errorMessage":"No decision found for key <decisionKey>. There was also no fall back decision found without tenant.","messagePattern":"No decision found for key <decisionKey>\\. There was also no fall back decision found without tenant\\.","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":null,"severity":"error","filePath":"modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/AbstractExecuteDecisionCmd.java","lineNumber":106,"sourceCode":"            if (decision == null) {\n                // If there is no decision table found linked to the deployment id, try to find one without a specific deployment id.\n                decision = decisionEntityManager.findLatestDecisionByKeyAndTenantId(decisionKey, tenantId);\n\n                if (decision == null) {\n                    // if fallback to default tenant is enabled do a final lookup query\n                    if (executeDecisionContext.isFallbackToDefaultTenant() || dmnEngineConfiguration.isFallbackToDefaultTenant()) {\n                        String defaultTenant = dmnEngineConfiguration.getDefaultTenantProvider().getDefaultTenant(tenantId, ScopeTypes.DMN, decisionKey);\n                        if (StringUtils.isNotEmpty(defaultTenant)) {\n                            decision = decisionEntityManager.findLatestDecisionByKeyAndTenantId(decisionKey, defaultTenant);\n                            if (decision == null) {\n                                throw new FlowableObjectNotFoundException(\"No decision found for key: \" + decisionKey +\n                                    \". There was also no fall back decision found for default tenant \" + defaultTenant);\n                            }\n                            \n                        } else {\n                            decision = decisionEntityManager.findLatestDecisionByKey(decisionKey);\n                            if (decision == null) {\n                                throw new FlowableObjectNotFoundException(\"No decision found for key: \" + decisionKey +\n                                    \". There was also no fall back decision table found without tenant.\");\n                            }\n                        }\n                        \n                    } else {\n                        throw new FlowableObjectNotFoundException(\"No decision found for key: \" + decisionKey +\n                            \", parent deployment id \" + parentDeploymentId + \" and tenant id: \" + tenantId +\n                            \". There was also no fall back decision found without parent deployment id.\");\n                    }\n                }\n            }\n            \n        } else if (StringUtils.isNotEmpty(decisionKey) && StringUtils.isNotEmpty(parentDeploymentId) &&\n                        !dmnEngineConfiguration.isAlwaysLookupLatestDefinitionVersion()) {\n            \n            List<DmnDeployment> dmnDeployments = CommandContextUtil.getDeploymentEntityManager().findDeploymentsByQueryCriteria(\n                new DmnDeploymentQueryImpl().parentDeploymentId(parentDeploymentId));\n","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/AbstractExecuteDecisionCmd.java#L88-L124","documentation":"Tenant fallback path where the DefaultTenantProvider returns an empty tenant: Flowable looks up the latest decision by key with no tenant filter, and if none is found throws FlowableObjectNotFoundException stating there was no fall back decision without tenant.","triggerScenarios":"resolveDefinition: fallback enabled, getDefaultTenant returned empty, and findLatestDecisionByKey(decisionKey) returned null.","commonSituations":"Decision not deployed at all; decision key typo; a tenant-filtered context (e.g. executing within a tenant-scoped command) with fallback enabled but the key never deployed tenant-agnostically.","solutions":["Deploy the DMN file so the decision exists for the key (unscoped or in the expected tenant)","Verify the exact decision key with a repository query (createDecisionQuery().decisionKey(...))","Check why the DefaultTenantProvider returns empty and fix it if a specific tenant was intended","Confirm you are connected to the database/schema where the deployment occurred"],"exampleFix":"// before\ndmnEngine.execute(\"decisonKey\", vars); // typo\n// after\ndmnEngine.execute(\"decisionKey\", vars); // matches deployed decision id/key","handlingStrategy":"try-catch","validationCode":"Decision d = dmnRepositoryService.createDecisionQuery()\n    .decisionKey(decisionKey).singleResult();\nif (d == null) throw new IllegalStateException(\"decision not deployed: \" + decisionKey);","typeGuard":null,"tryCatchPattern":"try { dmnEngine.executeDecisionByKey(tenantId, decisionKey, vars); }\ncatch (FlowableObjectNotFoundException e) {\n  LOG.warn(\"no decision and no tenant-less fallback for key {}\", decisionKey);\n  // deploy DMN or fix tenant provider\n}","preventionTips":["Ensure DMN resources are deployed before execution (deployment step in startup/CI)","Fix DefaultTenantProvider when a tenant-specific execution is intended","Query the repository to confirm the key exists before executing"],"tags":["dmn","tenant","not-found","flowable"],"backgroundTag":"record-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}