flowable/flowable-engine · error · FlowableObjectNotFoundException
No event definition found for key '${eventDefinitionKey}' fo
Error message
No event definition found for key '${eventDefinitionKey}' for parent deployment id ${parentDeploymentId} What it means
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.
Source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/cmd/GetEventModelCmd.java:111
if (eventDefinitionEntity == null) {
throw new FlowableObjectNotFoundException("No event definition found for key '" + eventDefinitionKey + "' for tenant identifier '" + tenantId + "'", EventDefinitionEntity.class);
}
} else if (eventDefinitionKey != null && (tenantId == null || EventRegistryEngineConfiguration.NO_TENANT_ID.equals(tenantId)) && parentDeploymentId != null) {
List<EventDeployment> eventDeployments = deploymentManager.getDeploymentEntityManager().findDeploymentsByQueryCriteria(
new EventDeploymentQueryImpl().parentDeploymentId(parentDeploymentId));
if (eventDeployments != null && eventDeployments.size() > 0) {
eventDefinitionEntity = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKey(eventDeployments.get(0).getId(), eventDefinitionKey);
}
if (eventDefinitionEntity == null) {
eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKey(eventDefinitionKey);
}
if (eventDefinitionEntity == null) {
throw new FlowableObjectNotFoundException("No event definition found for key '" + eventDefinitionKey +
"' for parent deployment id " + parentDeploymentId, EventDefinitionEntity.class);
}
} else if (eventDefinitionKey != null && tenantId != null && !EventRegistryEngineConfiguration.NO_TENANT_ID.equals(tenantId) && parentDeploymentId != null) {
List<EventDeployment> eventDeployments = deploymentManager.getDeploymentEntityManager().findDeploymentsByQueryCriteria(
new EventDeploymentQueryImpl().parentDeploymentId(parentDeploymentId).deploymentTenantId(tenantId));
if (eventDeployments != null && eventDeployments.size() > 0) {
eventDefinitionEntity = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKeyAndTenantId(
eventDeployments.get(0).getId(), eventDefinitionKey, tenantId);
}
if (eventDefinitionEntity == null) {
eventDefinitionEntity = eventDefinitionEntityManager.findLatestEventDefinitionByKeyAndTenantId(eventDefinitionKey, tenantId);
}
if (eventDefinitionEntity == null && eventEngineConfiguration.isFallbackToDefaultTenant()) {View on GitHub (pinned to d6d39ce1c6)
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.
Example fix
// before
eventRepositoryService.getEventModelByKeyAndParentDeploymentId("orderCreated", "deploy-42"); // deploy-42 has no such key
// after
// find the deployment that actually contains the key, then:
eventRepositoryService.getEventModelByKeyAndParentDeploymentId("orderCreated", correctDeploymentId); Defensive patterns
Strategy: try-catch
Validate before calling
EventDefinition d = eventRepositoryService.createEventDefinitionQuery().eventDefinitionKey(key).latestVersion().singleResult();
if (d == null) throw new IllegalStateException("Event definition key not deployed: " + key); Type guard
boolean isDeployed(String key) {
return eventRepositoryService.createEventDefinitionQuery().eventDefinitionKey(key).count() > 0;
} Try / catch
try {
EventModel model = eventRepositoryService.getEventModelByKeyAndParentDeploymentId(key, parentDeploymentId);
} catch (FlowableObjectNotFoundException e) {
log.warn("Event definition {} not found under deployment {}", key, parentDeploymentId, e);
// fall back to key-only lookup or redeploy
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- deployment does not exist:
- No event definition found for key '${eventDefinitionKey} for
- No deployment found for id = '${deploymentId}'
- Could not find deployment with id ${deploymentId}
- Could not find deployment with id ${deploymentId}
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/8d2d07e4271063cd.
Report an issue: GitHub.