flowable/flowable-engine · error · FlowableObjectNotFoundException
no channel definitions deployed with key
Error message
no channel definitions deployed with key '${channelDefinitionKey}' What it means
findDeployedLatestChannelDefinitionByKey throws FlowableObjectNotFoundException when no channel definition has been deployed with the given channel key. The lookup is by latest key; nothing matching exists in the database.
Solutions
- Verify the channel key is deployed in the target database
- Deploy the channel model with that key first
- Check for typos / case differences in the key
- Catch FlowableObjectNotFoundException if the channel is optional
Example fix
// before
ChannelDefinitionEntity ch = deploymentManager.findDeployedLatestChannelDefinitionByKey("orders-jms");
// after
try {
ch = deploymentManager.findDeployedLatestChannelDefinitionByKey("orders-jms");
} catch (FlowableObjectNotFoundException e) {
throw new IllegalStateException("Channel 'orders-jms' is not deployed", e);
} Defensive patterns
Strategy: try-catch
Try / catch
try {
ch = deploymentManager.findDeployedLatestChannelDefinitionByKey(key);
} catch (org.flowable.common.engine.api.FlowableObjectNotFoundException e) {
throw new IllegalStateException("No channel definition deployed for key " + key, e);
} Prevention
- Deploy channel models before any runtime code resolves them
- Add integration tests asserting required channel keys exist
- Synchronize channel deployments across all environments
When it happens
Trigger: Calling findDeployedLatestChannelDefinitionByKey with a channel key that was never deployed, whose deployments were deleted, or which is misspelled relative to the deployed key.
Common situations: Bootstrap code resolving channels before the event-registry deployments ran; channel key renames; environment drift where one env has the channel deployed and another does not.
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
- no deployed channel definition found with id
- no deployed event definition found with id
- no event definitions deployed with key
- no event definitions deployed with key
- no event definitions deployed with key
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/0c4b7e44e6d9f108.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/deploy/EventDeploymentManager.java:121
}
return channelDefinition;
}
public EventDefinitionEntity findDeployedLatestEventDefinitionByKey(String eventDefinitionKey) {
EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findLatestEventDefinitionByKey(eventDefinitionKey);
if (eventDefinition == null) {
throw new FlowableObjectNotFoundException("no event definitions deployed with key '" + eventDefinitionKey + "'");
}
eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();
return eventDefinition;
}
public ChannelDefinitionEntity findDeployedLatestChannelDefinitionByKey(String channelDefinitionKey) {
ChannelDefinitionEntity channelDefinition = channelDefinitionEntityManager.findLatestChannelDefinitionByKey(channelDefinitionKey);
if (channelDefinition == null) {
throw new FlowableObjectNotFoundException("no channel definitions deployed with key '" + channelDefinitionKey + "'");
}
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);
View on GitHub (pinned to d6d39ce1c6)