{"record":{"id":"2d656ddf72728d0c","repo":"flowable/flowable-engine","slug":"case-definition-was-not-found-by-key-casedefinit","errorCode":null,"errorMessage":"Case definition was not found by key '<caseDefinitionKey>'. Fallback to default tenant was also used.","messagePattern":"Case definition was not found by key '<caseDefinitionKey>'\\. Fallback to default tenant was also used\\.","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":150,"sourceCode":"                    caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKeyAndTenantId(caseDefinitionKey, defaultTenant);\n                } else {\n                    caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);\n                }\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) {","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java#L132-L168","documentation":"resolveCaseDefinition found no case definition for the key, and although a tenant was given and fallback-to-default-tenant was enabled, the fallback also failed. A distinct FlowableObjectNotFoundException is thrown so the caller knows both the tenant-specific lookup and the default-tenant fallback were exhausted.","triggerScenarios":"Starting/resolving a case by caseDefinitionKey with a non-null tenantId and fallbackToDefaultTenant=true, where neither the tenant's definition nor the default-tenant definition exists for that key.","commonSituations":"Definition deployed only to a tenant different from the requested one and not present under the default tenant either; key typo; deployment never performed in this database.","solutions":["Deploy the case definition to the requested tenant (or to the default tenant) so the key resolves","Query CaseDefinitionQuery with tenantId to see which tenants actually have the key","Verify the key spelling and that fallbackToDefaultTenant semantics match your expectation","Check the deployment's tenant id (CmmnRepositoryService) versus the value you pass"],"exampleFix":"// before\ncmmnRuntimeService.createCaseInstanceBuilder()\n    .caseDefinitionKey(\"orderCase\").tenantId(\"acme\").fallbackToDefaultTenant().start(); // missing everywhere\n// after\ncmmnRepositoryService.createDeployment().addClasspathResource(\"orderCase.cmmn.xml\")\n    .tenantId(\"acme\").deploy();\ncmmnRuntimeService.createCaseInstanceBuilder()\n    .caseDefinitionKey(\"orderCase\").tenantId(\"acme\").start();","handlingStrategy":"validation","validationCode":"boolean existsForTenant = cmmnRepositoryService.createCaseDefinitionQuery()\n    .caseDefinitionKey(key).tenantId(tenantId).count() > 0;\nboolean existsDefault = cmmnRepositoryService.createCaseDefinitionQuery()\n    .caseDefinitionKey(key).tenantId(\"default-or-empty\").count() > 0;\nif (!existsForTenant && !(existsDefault && fallback)) throw new IllegalStateException(\"Key not deployed for tenant \" + tenantId);","typeGuard":null,"tryCatchPattern":"try {\n    cmmnRuntimeService.createCaseInstanceBuilder()\n        .caseDefinitionKey(key).tenantId(tenantId).fallbackToDefaultTenant().start();\n} catch (FlowableObjectNotFoundException e) {\n    // deploy to the tenant or default tenant, then retry\n}","preventionTips":["Deploy case definitions per tenant as part of provisioning","Verify tenantId values match deployment tenants exactly","Query CaseDefinitionQuery by tenant to confirm key availability"],"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"}