{"record":{"id":"8d2d07e4271063cd","repo":"flowable/flowable-engine","slug":"no-event-definition-found-for-key-eventdefiniti-8d2d07","errorCode":null,"errorMessage":"No event definition found for key '${eventDefinitionKey}' for parent deployment id ${parentDeploymentId}","messagePattern":"No event definition found for key '(.+?)' for parent deployment id (.+?)","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":404,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/cmd/GetEventModelCmd.java","lineNumber":111,"sourceCode":"            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);\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).deploymentTenantId(tenantId));\n            \n            if (eventDeployments != null && eventDeployments.size() > 0) {\n                eventDefinitionEntity = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKeyAndTenantId(\n                                eventDeployments.get(0).getId(), eventDefinitionKey, tenantId);\n            }\n            \n            if (eventDefinitionEntity == null) {\n                eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKeyAndTenantId(eventDefinitionKey, tenantId);\n            }\n            \n            if (eventDefinitionEntity == null && eventEngineConfiguration.isFallbackToDefaultTenant()) {","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/cmd/GetEventModelCmd.java#L93-L129","documentation":"GetEventModelCmd.execute() looks up an EventDefinitionEntity by key (optionally scoped to a parent deployment id) and throws FlowableObjectNotFoundException when no definition exists. The event registry only serves event models for definitions that were deployed; a key that was never deployed, or not deployed under the given parent deployment, yields no row.","triggerScenarios":"Calling the EventRegistryEngine's getEventModel (via GetEventModelCmd) with an eventDefinitionKey plus parentDeploymentId where (a) the key was never deployed, (b) the key is deployed but under a different parent deployment id, or (c) the definition was deleted.","commonSituations":"Typos in event definition keys in application config; pointing at the wrong deployment id after a redeploy (parent deployment ids change per deployment); event definitions removed by a deployment cleanup/tenant purge; copying configuration between environments where deployments differ.","solutions":["Verify the event definition key spelling against the deployed event definitions (check ACT_FO_EVENT_DEFINITION / event registry tables or RepositoryService-style queries).","Query deployments to find the actual parent deployment id that contains this key and pass that id.","Deploy the event definition (EventRegistryBuilder / event repository deploy) so the key exists before calling getEventModel.","Drop the parentDeploymentId constraint (use key-only lookup) if the definition is deployed globally.","If looking up by tenant, make sure the tenantId variant of the lookup is used instead."],"exampleFix":"// before\neventRepositoryService.getEventModelByKeyAndParentDeploymentId(\"orderCreated\", \"deploy-42\"); // deploy-42 has no such key\n// after\n// find the deployment that actually contains the key, then:\neventRepositoryService.getEventModelByKeyAndParentDeploymentId(\"orderCreated\", correctDeploymentId);","handlingStrategy":"try-catch","validationCode":"EventDefinition d = eventRepositoryService.createEventDefinitionQuery().eventDefinitionKey(key).latestVersion().singleResult();\nif (d == null) throw new IllegalStateException(\"Event definition key not deployed: \" + key);","typeGuard":"boolean isDeployed(String key) {\n    return eventRepositoryService.createEventDefinitionQuery().eventDefinitionKey(key).count() > 0;\n}","tryCatchPattern":"try {\n    EventModel model = eventRepositoryService.getEventModelByKeyAndParentDeploymentId(key, parentDeploymentId);\n} catch (FlowableObjectNotFoundException e) {\n    log.warn(\"Event definition {} not found under deployment {}\", key, parentDeploymentId, e);\n    // fall back to key-only lookup or redeploy\n}","preventionTips":["Verify keys exist with an event definition query before lookup.","Track parent deployment ids returned at deploy time instead of hardcoding them.","Avoid purging deployments referenced by running configuration.","Add integration tests that resolve every configured event key against the target DB."],"tags":["flowable","event-registry","not-found","deployment"],"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"}