{"record":{"id":"b32f07096dd6908d","repo":"flowable/flowable-engine","slug":"no-case-definition-deployed-with-key-casedefinit-b32f07","errorCode":null,"errorMessage":"no case definition deployed with key '<caseDefinitionKey>' for tenant identifier '<tenantId>'","messagePattern":"no case definition deployed with key '<caseDefinitionKey>' for tenant identifier '<tenantId>'","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/deployer/CmmnDeploymentManager.java","lineNumber":89,"sourceCode":"            caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();\n        }\n        return caseDefinition;\n    }\n\n    public CaseDefinition findDeployedLatestCaseDefinitionByKey(String caseDefinitionKey) {\n        CaseDefinition caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKey(caseDefinitionKey);\n\n        if (caseDefinition == null) {\n            throw new FlowableObjectNotFoundException(\"no case definition deployed with key '\" + caseDefinitionKey + \"'\", CaseDefinition.class);\n        }\n        caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();\n        return caseDefinition;\n    }\n\n    public CaseDefinition findDeployedLatestCaseDefinitionByKeyAndTenantId(String caseDefinitionKey, String tenantId) {\n        CaseDefinition caseDefinition = caseDefinitionEntityManager.findLatestCaseDefinitionByKeyAndTenantId(caseDefinitionKey, tenantId);\n        if (caseDefinition == null) {\n            throw new FlowableObjectNotFoundException(\"no case definition deployed with key '\" + caseDefinitionKey + \"' for tenant identifier '\" + tenantId + \"'\", CaseDefinition.class);\n        }\n        caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();\n        return caseDefinition;\n    }\n\n    public CaseDefinition findDeployedCaseDefinitionByKeyAndVersionAndTenantId(String caseDefinitionKey, Integer caseDefinitionVersion, String tenantId) {\n        CaseDefinition caseDefinition = (CaseDefinitionEntity) caseDefinitionEntityManager\n                .findCaseDefinitionByKeyAndVersionAndTenantId(caseDefinitionKey, caseDefinitionVersion, tenantId);\n        if (caseDefinition == null) {\n            throw new FlowableObjectNotFoundException(\"no case definition deployed with key = '\" + caseDefinitionKey + \"' and version = '\" + caseDefinitionVersion + \"'\", CaseDefinition.class);\n        }\n        caseDefinition = resolveCaseDefinition(caseDefinition).getCaseDefinition();\n        return caseDefinition;\n    }\n\n    public CaseDefinitionCacheEntry resolveCaseDefinition(CaseDefinition caseDefinition) {\n        String caseDefinitionId = caseDefinition.getId();\n        String deploymentId = caseDefinition.getDeploymentId();","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/deployer/CmmnDeploymentManager.java#L71-L107","documentation":"Same lookup as the by-key variant but additionally constrained to a tenant: findDeployedLatestCaseDefinitionByKeyAndTenantId finds nothing matching both key and tenantId and throws FlowableObjectNotFoundException. Multi-tenancy means the definition may exist globally but not under the given tenant.","triggerScenarios":"Starting a case by key with tenantId set, where the case definition was deployed either without that tenant id or under a different tenant; passing a wrong/default tenant string from configuration.","commonSituations":"Tenant id mismatch after introducing multi-tenancy (definitions deployed pre-tenant with null tenant); case sensitivity differences in tenant ids ('acme' vs 'ACME'); config file carrying another environment's tenant.","solutions":["Deploy the case definition with the same tenantId: deployment.tenantId(tenantId).deploy()","Verify the tenantId string matches exactly the one used at deployment time (including null/empty)","List definitions with createCaseDefinitionQuery().caseDefinitionTenantId(tenantId).caseDefinitionKey(key) to see what exists"],"exampleFix":"// before\nrepositoryService.createDeployment().addClasspathResource(\"credit.cmmn\").deploy(); // no tenant\nruntimeService.createCaseInstanceBuilder().caseDefinitionKey(\"credit\").caseDefinitionTenantId(\"acme\").start();\n// after\nrepositoryService.createDeployment().addClasspathResource(\"credit.cmmn\").tenantId(\"acme\").deploy();","handlingStrategy":"validation","validationCode":"CaseDefinition def = repositoryService.createCaseDefinitionQuery().caseDefinitionKey(key).caseDefinitionTenantId(tenantId).latestVersion().singleResult(); if (def == null) { /* deploy or fix tenantId */ }","typeGuard":null,"tryCatchPattern":"try { builder.caseDefinitionKey(key).caseDefinitionTenantId(tenantId).start(); } catch (FlowableObjectNotFoundException e) { /* wrong tenant or missing deployment */ }","preventionTips":["Always deploy with .tenantId(...) when the app is multi-tenant","Centralize tenant id resolution to avoid case-sensitivity drift"],"tags":["not-found","multi-tenancy","case-definition"],"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-18T11:17:12.947Z"}