flowable/flowable-engine · error · FlowableObjectNotFoundException

no event definitions deployed with key

Error message

no event definitions deployed with key '${eventDefinitionKey}' for tenant identifier '${tenantId}'

What it means

findDeployedLatestEventDefinitionByKeyAndTenantId throws FlowableObjectNotFoundException when no event definition with the given key is deployed for the given tenant. The combined key+tenant lookup in the database returned nothing.

Solutions

  1. Verify the definition is deployed with that exact key and TENANT_ID_ value
  2. Deploy the event definition for the specific tenant if missing
  3. Fall back to the non-tenant lookup (findDeployedLatestEventDefinitionByKey) when the tenant-scoped lookup is allowed to miss
  4. Check that the tenantId passed matches how deployments set tenant (null vs empty-string semantics)

Example fix

// before
def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndTenantId("order.created", tenantId);
// after
try {
    def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndTenantId("order.created", tenantId);
} catch (FlowableObjectNotFoundException e) {
    def = deploymentManager.findDeployedLatestEventDefinitionByKey("order.created"); // tenant fallback
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
    def = deploymentManager.findDeployedLatestEventDefinitionByKeyAndTenantId(key, tenantId);
} catch (org.flowable.common.engine.api.FlowableObjectNotFoundException e) {
    def = deploymentManager.findDeployedLatestEventDefinitionByKey(key); // tenant fallback if applicable
}

Prevention

When it happens

Trigger: Calling findDeployedLatestEventDefinitionByKeyAndTenantId with a key/tenant pair where the definition was deployed under a different tenant (or with a null/empty tenant), or not deployed at all in that tenant's scope.

Common situations: Multi-tenant setups where deployments only ran for tenant 'acme' but the runtime looks up tenant 'other'; missing tenantId propagation so the default tenant is used; definitions deployed without tenant but queried with one.

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/1acdbf54e1bfe95a. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/persistence/deploy/EventDeploymentManager.java:131

        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);

        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);

View on GitHub (pinned to d6d39ce1c6)