flowable/flowable-engine · error · FlowableObjectNotFoundException
no event definitions deployed with key
Error message
no event definitions deployed with key '${eventDefinitionKey}' for deployment id '${deploymentId}' What it means
findDeployedLatestEventDefinitionByKeyAndDeploymentId throws FlowableObjectNotFoundException when no event definition matches both the given deployment id and key, i.e. that specific deployment does not contain a definition with that key.
Solutions
- Verify the deployment actually contains the key (query event definitions by DEPLOYMENT_ID_ and KEY_)
- Use the correct deploymentId, or switch to findDeployedLatestEventDefinitionByKey for the latest version
- Redeploy if the definition was moved/removed from the deployment
- Catch FlowableObjectNotFoundException to handle version-mismatch cases
Example fix
// before
def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndDeploymentId("order.created", deploymentId);
// after
try {
def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndDeploymentId("order.created", deploymentId);
} catch (FlowableObjectNotFoundException e) {
def = deploymentManager.findDeployedLatestEventDefinitionByKey("order.created"); // fall back to latest
} Defensive patterns
Strategy: try-catch
Try / catch
try {
def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndDeploymentId(key, deploymentId);
} catch (org.flowable.common.engine.api.FlowableObjectNotFoundException e) {
def = deploymentManager.findDeployedLatestEventDefinitionByKey(key); // fall back to latest
} Prevention
- Persist the deploymentId together with the definition key when resolving versions
- Fall back to key-based latest lookup for forward compatibility after redeploys
- Verify deployment contents when migrations rename event keys
When it happens
Trigger: Calling findDeployedLatestEventDefinitionByKeyAndDeploymentId for a deploymentId that never included the key (wrong deployment resolved), a deployment id that does not exist, or a key renamed after the deployment was made.
Common situations: Redeploy/resume logic reusing an old deploymentId while definitions moved to a newer deployment; referencing a deployment from a different engine/database; model refactors that changed the event key.
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
- Could not find deployment with id
- Could not find deployment with id
- Could not find deployment with id
- deployment does not exist:
- no channel definitions deployed with key
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/60659509c269f644.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/deploy/EventDeploymentManager.java:141
channelDefinition = resolveChannelDefinition(channelDefinition).getChannelDefinitionEntity();
return channelDefinition;
}
public EventDefinitionEntity findDeployedLatestEventDefinitionByKeyAndTenantId(String eventDefinitionKey, String tenantId) {
EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findLatestEventDefinitionByKeyAndTenantId(eventDefinitionKey, tenantId);
if (eventDefinition == null) {
throw new FlowableObjectNotFoundException("no event definitions deployed with key '" + eventDefinitionKey + "' for tenant identifier '" + tenantId + "'");
}
eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();
return eventDefinition;
}
public EventDefinitionEntity findDeployedLatestEventDefinitionByKeyAndDeploymentId(String eventDefinitionKey, String deploymentId) {
EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKey(deploymentId, eventDefinitionKey);
if (eventDefinition == null) {
throw new FlowableObjectNotFoundException("no event definitions deployed with key '" + eventDefinitionKey +
"' for deployment id '" + deploymentId + "'");
}
eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();
return eventDefinition;
}
public EventDefinitionEntity findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(String eventDefinitionKey, String deploymentId, String tenantId) {
EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findEventDefinitionByDeploymentAndKeyAndTenantId(deploymentId, eventDefinitionKey, tenantId);
if (eventDefinition == null) {
throw new FlowableObjectNotFoundException("no event definitions deployed with key '" + eventDefinitionKey +
"' for deployment id '" + deploymentId + "' and tenant identifier '" + tenantId + "'");
}
eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();
return eventDefinition;
}
public EventDefinitionEntity findDeployedEventDefinitionByKeyAndVersionAndTenantId(String eventDefinitionKey, int eventVersion, String tenantId) {View on GitHub (pinned to d6d39ce1c6)