{"record":{"id":"68d805c5f0b74b50","repo":"flowable/flowable-engine","slug":"no-event-definition-found-for-key-eventdefiniti","errorCode":null,"errorMessage":"No event definition found for key '${eventDefinitionKey}' for tenant identifier '${tenantId}'","messagePattern":"No event definition found for key '(.+?)' for tenant identifier '(.+?)'","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":404,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/cmd/GetEventModelCmd.java","lineNumber":94,"sourceCode":"                throw new FlowableObjectNotFoundException(\"No event definition found for key '\" + eventDefinitionKey + \"'\", EventDefinitionEntity.class);\n            }\n\n        } else if (eventDefinitionKey != null && tenantId != null && !EventRegistryEngineConfiguration.NO_TENANT_ID.equals(tenantId) && \n                        (parentDeploymentId == null || eventEngineConfiguration.isAlwaysLookupLatestDefinitionVersion())) {\n\n            eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKeyAndTenantId(eventDefinitionKey, tenantId);\n            \n            if (eventDefinitionEntity == null && eventEngineConfiguration.isFallbackToDefaultTenant()) {\n                String defaultTenant = eventEngineConfiguration.getDefaultTenantProvider().getDefaultTenant(tenantId, ScopeTypes.EVENT_REGISTRY, eventDefinitionKey);\n                if (StringUtils.isNotEmpty(defaultTenant)) {\n                    eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKeyAndTenantId(eventDefinitionKey, defaultTenant);\n                } else {\n                    eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKey(eventDefinitionKey);\n                }\n            }\n            \n            if (eventDefinitionEntity == null) {\n                throw new FlowableObjectNotFoundException(\"No event definition found for key '\" + eventDefinitionKey + \"' for tenant identifier '\" + tenantId + \"'\", EventDefinitionEntity.class);\n            }\n\n        } else if (eventDefinitionKey != null && (tenantId == null || EventRegistryEngineConfiguration.NO_TENANT_ID.equals(tenantId)) && parentDeploymentId != null) {\n\n            List<EventDeployment> eventDeployments = deploymentManager.getDeploymentEntityManager().findDeploymentsByQueryCriteria(\n                            new EventDeploymentQueryImpl().parentDeploymentId(parentDeploymentId));\n            \n            if (eventDeployments != null && eventDeployments.size() > 0) {\n                eventDefinitionEntity = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKey(eventDeployments.get(0).getId(), eventDefinitionKey);\n            }\n            \n            if (eventDefinitionEntity == null) {\n                eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKey(eventDefinitionKey);\n            }\n            \n            if (eventDefinitionEntity == null) {\n                throw new FlowableObjectNotFoundException(\"No event definition found for key '\" + eventDefinitionKey +\n                        \"' for parent deployment id \" + parentDeploymentId, EventDefinitionEntity.class);","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/cmd/GetEventModelCmd.java#L76-L112","documentation":"When resolving by eventDefinitionKey with a specific tenantId, the manager finds the latest definition for key+tenant; if none exists the command throws FlowableObjectNotFoundException 'No event definition found for key <key> for tenant identifier <tenantId>'. The definition exists nowhere for that tenant combination.","triggerScenarios":"GetEventModelCmd with a tenantId set (not NO_TENANT_ID) and a key that has no definition deployed under that tenant — e.g. deployed only under tenant 'acme' but requested for tenant 'globex', or deployed with no tenant at all.","commonSituations":"Mismatched tenantId casing/spelling; deploying event models without setting the tenant while runtime requests a tenant; multi-tenant deployment where only some tenants received the model.","solutions":["Deploy the event model for the requested tenant (deployment .tenantId(tenantId))","Check existing definitions via createEventDefinitionQuery().eventDefinitionKey(key).tenantId(tenantId).list()","Fix the tenantId string used at runtime to match the deployment tenant (or pass null/NO_TENANT_ID for the default tenant)"],"exampleFix":"// before\neventRepositoryService.getEventModelByKey(\"orderCreated\", \"acme\"); // deployed without tenant\n// after\neventRepositoryService.createDeployment()\n    .addClasspathResource(\"order-created.event.json\")\n    .tenantId(\"acme\")\n    .deploy();\neventRepositoryService.getEventModelByKey(\"orderCreated\", \"acme\");","handlingStrategy":"validation","validationCode":"EventDefinition def = eventRepositoryService.createEventDefinitionQuery()\n    .eventDefinitionKey(key).tenantId(tenantId).latestVersion().singleResult();\nif (def == null) throw new IllegalArgumentException(\"No definition for key \" + key + \" and tenant \" + tenantId);","typeGuard":"boolean tenantDefinitionExists = eventRepositoryService.createEventDefinitionQuery()\n    .eventDefinitionKey(key).tenantId(tenantId).count() > 0;","tryCatchPattern":"try {\n    return eventRepositoryService.getEventModelByKey(key, tenantId);\n} catch (FlowableObjectNotFoundException e) {\n    log.warn(\"Missing event definition for tenant {}: {}\", tenantId, e.getMessage());\n    throw e;\n}","preventionTips":["Set .tenantId(...) on every tenant-scoped deployment","Normalize tenant id casing centrally","Deploy event models for each tenant during provisioning","Fall back to default-tenant lookup only when explicitly intended"],"tags":["flowable","event-registry","not-found","tenant","event-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-14T11:17:12.474Z"}