{"record":{"id":"55234278a9bcbb2d","repo":"flowable/flowable-engine","slug":"case-definition-was-not-found-by-key-casedefinit-552342","errorCode":null,"errorMessage":"Case definition was not found by key '<caseDefinitionKey>' and tenant '<tenantId>'","messagePattern":"Case definition was not found by key '<caseDefinitionKey>' and tenant '<tenantId>'","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java","lineNumber":153,"sourceCode":"                }\n            }\n        } else {\n            if (parentDeploymentId != null) {\n                caseDefinition = caseDefinitionEntityManager.findCaseDefinitionByParentDeploymentAndKey(parentDeploymentId, caseDefinitionKey);\n            }\n            if (caseDefinition == null) {\n                caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);\n            }\n        }\n\n        if (caseDefinition == null) {\n            if (tenantId == null || CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {\n                throw new FlowableObjectNotFoundException(\"No case definition found for key \" + caseDefinitionKey, CaseDefinition.class);\n            } else if (fallbackToDefaultTenant) {\n                throw new FlowableObjectNotFoundException(\n                        \"Case definition was not found by key '\" + caseDefinitionKey + \"'. Fallback to default tenant was also used.\");\n            } else {\n                throw new FlowableObjectNotFoundException(\n                        \"Case definition was not found by key '\" + caseDefinitionKey + \"' and tenant '\" + tenantId + \"'\");\n            }\n        }\n\n        return caseDefinition;\n    }\n\n    protected CaseDefinition getCaseDefinition(CaseInstanceBuilder caseInstanceBuilder, CommandContext commandContext) {\n        CaseDefinition caseDefinition = null;\n        if (caseInstanceBuilder.getCaseDefinitionId() != null) {\n            String caseDefinitionId = caseInstanceBuilder.getCaseDefinitionId();\n            CmmnDeploymentManager deploymentManager = cmmnEngineConfiguration.getDeploymentManager();\n            caseDefinition = deploymentManager.findDeployedCaseDefinitionById(caseDefinitionId);\n\n        } else if (caseInstanceBuilder.getCaseDefinitionKey() != null) {\n            String caseDefinitionKey = caseInstanceBuilder.getCaseDefinitionKey();\n            String tenantId = caseInstanceBuilder.getTenantId();\n            String parentDeploymentId = caseInstanceBuilder.getCaseDefinitionParentDeploymentId();","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java#L135-L171","documentation":"resolveCaseDefinition found no case definition for the key and tenant, and no fallback to the default tenant was requested, so a FlowableObjectNotFoundException including both key and tenant is thrown. This is the strictest of the three not-found branches.","triggerScenarios":"Starting/resolving a case by caseDefinitionKey with a specific non-null tenantId (not NO_TENANT_ID) and fallbackToDefaultTenant=false, where no case definition is deployed for that key and tenant combination.","commonSituations":"Multi-tenant setup where the definition was deployed under a different tenant or the default tenant only; tenant id mismatch (case-sensitive) between request and deployment; definition not yet deployed in this environment.","solutions":["Deploy the case definition with the exact tenantId requested","Enable fallbackToDefaultTenant() on the case instance builder if default-tenant definitions should be used","Query CaseDefinitionQuery().caseDefinitionKey(key).list() to discover which tenant has the key and correct the tenantId","Confirm tenant id spelling/case matches the deployment"],"exampleFix":"// before\ncmmnRuntimeService.createCaseInstanceBuilder()\n    .caseDefinitionKey(\"orderCase\").tenantId(\"acme\").start(); // deployed under default tenant only\n// after\ncmmnRuntimeService.createCaseInstanceBuilder()\n    .caseDefinitionKey(\"orderCase\").tenantId(\"acme\").fallbackToDefaultTenant().start();\n// or deploy explicitly to acme","handlingStrategy":"validation","validationCode":"long n = cmmnRepositoryService.createCaseDefinitionQuery()\n    .caseDefinitionKey(key).tenantId(tenantId).count();\nif (n == 0) throw new IllegalStateException(\"No case definition for key \" + key + \" and tenant \" + tenantId);","typeGuard":null,"tryCatchPattern":"try {\n    cmmnRuntimeService.createCaseInstanceBuilder()\n        .caseDefinitionKey(key).tenantId(tenantId).start();\n} catch (FlowableObjectNotFoundException e) {\n    // deploy to the tenant or enable fallbackToDefaultTenant\n}","preventionTips":["Keep tenant ids in configuration consistent with deployment tenants","List tenants for a key via CaseDefinitionQuery before starting cases","Use fallbackToDefaultTenant deliberately and document the tenant strategy"],"tags":["cmmn","case-definition","tenant","not-found"],"backgroundTag":"resource-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}