flowable/flowable-engine · error · FlowableException

No event key configured for

Error message

No event key configured for ${serviceTask.getId()} for ${planItemInstanceEntity}

What it means

A CMMN send-event service task has no event type/key configured. Flowable needs an event key to know which event to throw when the plan item runs; without it the engine cannot proceed and throws a FlowableException. This is checked at runtime in getEventKey when the behavior executes.

Solutions

  1. Set the event type on the service task definition: add flowable:eventType="myEventKey" (or serviceTask.setEventType("myEventKey")) to the send-event plan item
  2. Redeploy the corrected case definition so the running plan item picks up the new model
  3. Check the deployed case XML in ACT_CMMN_CASEDEF / repository to confirm the attribute was really in the deployed resource

Example fix

// before
<flowable:service-task id="sendTask" flowable:type="send-event" />
// after
<flowable:service-task id="sendTask" flowable:type="send-event" flowable:eventType="orderShipped" />
Defensive patterns

Strategy: validation

Validate before calling

const eventType = serviceTask.getEventType?.();
if (!eventType || eventType.trim() === '') throw new Error(`send-event task ${serviceTask.getId()} missing eventType`);

Type guard

function hasEventType(t) { return typeof t?.getEventType === 'function' && !!t.getEventType(); }

Prevention

When it happens

Trigger: A SendEventActivityBehavior executes for a plan item whose serviceTask has getEventType() empty or null.

Common situations: CMMN XML/builder model defines a send-event task but the flowable:eventType attribute (or ServiceTask event type in the builder API) was omitted; copy-pasted task definitions missing the event type.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/SendEventActivityBehavior.java:159

        EventRepositoryService eventRepositoryService = CommandContextUtil.getEventRegistryEngineConfiguration(commandContext).getEventRepositoryService();
        List<ChannelModel> channelModels = new ArrayList<>(channelKeys.size());
        for (String channelKey : channelKeys) {
            if (Objects.equals(CmmnEngineConfiguration.NO_TENANT_ID, planItemInstanceEntity.getTenantId())) {
                channelModels.add(eventRepositoryService.getChannelModelByKey(channelKey));
            } else {
                channelModels.add(eventRepositoryService.getChannelModelByKey(channelKey, planItemInstanceEntity.getTenantId()));
            }
        }

        return channelModels;
    }

    protected String getEventKey(PlanItemInstanceEntity planItemInstanceEntity) {
        if (StringUtils.isNotEmpty(serviceTask.getEventType())) {
            return serviceTask.getEventType();
        } else {
            throw new FlowableException("No event key configured for " + serviceTask.getId() + " for " + planItemInstanceEntity);
        }
    }

}

View on GitHub (pinned to d6d39ce1c6)