{"record":{"id":"abf060caedd5b8df","repo":"flowable/flowable-engine","slug":"no-event-definitions-deployed-with-key-eventd","errorCode":null,"errorMessage":"no event definitions deployed with key = '${eventDefinitionKey}'","messagePattern":"no event definitions deployed with key = '(.+?)'","errorType":"exception","errorClass":"FlowableObjectNotFoundException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/deploy/EventDeploymentManager.java","lineNumber":163,"sourceCode":"        return eventDefinition;\n    }\n\n    public EventDefinitionEntity findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(String eventDefinitionKey, String deploymentId, String tenantId) {\n        EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKeyAndTenantId(deploymentId, eventDefinitionKey, tenantId);\n\n        if (eventDefinition == null) {\n            throw new FlowableObjectNotFoundException(\"no event definitions deployed with key '\" + eventDefinitionKey +\n                    \"' for deployment id '\" + deploymentId + \"' and tenant identifier '\" + tenantId + \"'\");\n        }\n        eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();\n        return eventDefinition;\n    }\n\n    public EventDefinitionEntity findDeployedEventDefinitionByKeyAndVersionAndTenantId(String eventDefinitionKey, int eventVersion, String tenantId) {\n        EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findEventDefinitionByKeyAndVersionAndTenantId(eventDefinitionKey, eventVersion, tenantId);\n\n        if (eventDefinition == null) {\n            throw new FlowableObjectNotFoundException(\"no event definitions deployed with key = '\" + eventDefinitionKey + \"'\");\n        }\n\n        eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();\n        return eventDefinition;\n    }\n\n    /**\n     * Resolving the event will fetch the event definition, parse it and store the {@link EventDefinition} in memory.\n     */\n    public EventDefinitionCacheEntry resolveEventDefinition(EventDefinition eventDefinition) {\n        String eventDefinitionId = eventDefinition.getId();\n        String deploymentId = eventDefinition.getDeploymentId();\n\n        EventDefinitionCacheEntry cachedEventDefinition = eventDefinitionCache.get(eventDefinitionId);\n\n        if (cachedEventDefinition == null) {\n            EventDeploymentEntity deployment = engineConfig.getDeploymentEntityManager().findById(deploymentId);\n            List<EventResourceEntity> resources = engineConfig.getResourceEntityManager().findResourcesByDeploymentId(deploymentId);","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/deploy/EventDeploymentManager.java#L145-L181","documentation":"Thrown by EventDeploymentManager when finding an event definition by key, version, and tenant id yields no persisted entity. Flowable signals this as FlowableObjectNotFoundException so callers know that specific key/version/tenant combination has never been deployed. The message only mentions the key, but the lookup also involved version and tenant.","triggerScenarios":"Calling findDeployedEventDefinitionByKeyAndVersionAndTenantId(eventDefinitionKey, eventVersion, tenantId) when no EventDefinitionEntity matches the key, version and tenantId — typically a version number that was never deployed or an invalid tenantId.","commonSituations":"Hardcoded version numbers after a redeploy bumped the version; pinning version 1 while only version 2 exists; tenant mismatch; asking for a definition before deployment completed.","solutions":["List available versions first with EventDefinitionQuery.eventDefinitionKey(key).list() and pick an existing eventVersion.","Use findDeployedLatestEventDefinitionByKeyAndTenantId instead of pinning a version when the latest is acceptable.","Verify tenantId matches the deployment's tenant (or use the default tenant).","Deploy the missing event model version if it is genuinely absent."],"exampleFix":"// before\nEventDefinitionEntity def = eventDeploymentManager\n    .findDeployedEventDefinitionByKeyAndVersionAndTenantId(\"orderEvent\", 1, \"acme\");\n// after\nEventDefinition def = eventRepositoryService.createEventDefinitionQuery()\n    .eventDefinitionKey(\"orderEvent\").latestVersion().tenantId(\"acme\").singleResult();","handlingStrategy":"validation","validationCode":"EventDefinition def = eventRepositoryService.createEventDefinitionQuery()\n    .eventDefinitionKey(key).eventDefinitionVersion(version).tenantId(tenantId).singleResult();\nif (def == null) throw new IllegalStateException(\"no event definition \" + key + \" v\" + version + \" for tenant \" + tenantId);","typeGuard":null,"tryCatchPattern":"try {\n    def = manager.findDeployedEventDefinitionByKeyAndVersionAndTenantId(key, version, tenantId);\n} catch (FlowableObjectNotFoundException e) {\n    def = manager.findDeployedLatestEventDefinitionByKeyAndTenantId(key, tenantId); // fallback to latest\n}","preventionTips":["Prefer latest-version lookups over hardcoding version numbers.","List deployed versions for a key before pinning one.","Keep version pins in configuration that is updated together with deployments.","Verify tenantId conventions (empty string vs null) match your deployment code."],"tags":["flowable","event-registry","versioning","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-18T11:17:12.947Z"}