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

  1. Verify the channel key is deployed in the target database
  2. Deploy the channel model with that key first
  3. Check for typos / case differences in the key
  4. 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

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


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)