flowable/flowable-engine · error · FlowableObjectNotFoundException

no event definitions deployed with key '${eventDefinitionKey

Error message

no event definitions deployed with key '${eventDefinitionKey}' for deployment id '${deploymentId}' and tenant identifier '${tenantId}'

What it means

Thrown by EventDeploymentManager when looking up the latest deployed event definition by key, deployment id, and tenant id, but the persistence layer returns no matching EventDefinitionEntity. The Flowable Event Registry throws FlowableObjectNotFoundException because the requested definition simply does not exist in the database for that exact (key, deploymentId, tenantId) combination. It is a lookup failure, not a corruption or internal bug.

Source

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

        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) {
        EventDefinitionEntity eventDefinition = eventDefinitionEntityManager.findEventDefinitionByKeyAndVersionAndTenantId(eventDefinitionKey, eventVersion, tenantId);

        if (eventDefinition == null) {
            throw new FlowableObjectNotFoundException("no event definitions deployed with key = '" + eventDefinitionKey + "'");
        }

        eventDefinition = resolveEventDefinition(eventDefinition).getEventDefinitionEntity();
        return eventDefinition;
    }

    /**

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Verify the deploymentId exists and contains the event key: query EventDeploymentQuery / EventDefinitionQuery with deploymentId(deploymentId).list() before the lookup.
  2. Check the tenantId matches the one used at deploy time (or pass empty/null for the default tenant).
  3. If the deployment is missing, redeploy the event model via EventRepositoryService.createDeployment().addClasspathResource(...).tenantId(...).deploy().
  4. Confirm the event definition key spelling against the JSON event model resource.

Example fix

// before
EventDefinitionEntity def = eventDeploymentManager
    .findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(key, deploymentId, tenantId);
// after
EventDefinitionEntity def = managementService.getEventRepositoryService()
    .createEventDefinitionQuery().deploymentId(deploymentId).tenantId(tenantId).listPage(0, 1)
    .stream().findFirst()
    .map(d -> eventDeploymentManager.findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(key, deploymentId, tenantId))
    .orElse(null);
Defensive patterns

Strategy: validation

Validate before calling

long count = eventRepositoryService.createEventDefinitionQuery()
    .deploymentId(deploymentId).tenantId(tenantId).eventDefinitionKey(key).count();
if (count == 0) throw new IllegalStateException("event definition " + key + " not in deployment " + deploymentId + " for tenant " + tenantId);

Try / catch

try {
    def = manager.findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(key, deploymentId, tenantId);
} catch (FlowableObjectNotFoundException e) {
    def = null; // handle missing definition explicitly
}

Prevention

When it happens

Trigger: Calling findDeployedLatestEventDefinitionByKeyDeploymentIdAndTenantId(eventDefinitionKey, deploymentId, tenantId) when no row in FLW_EV_DATABASE_DEFINITION matches all three values — e.g. wrong deploymentId, definition deployed under a different tenant, or the key never existed in that deployment.

Common situations: Copy-pasting a deployment id from another environment; multi-tenant setups where the definition was deployed to the default tenant but queried with a specific tenantId; querying after the deployment was deleted; typos in the event definition key.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/992f3111f9bad6a2. Report an issue: GitHub.