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
- Set the event type on the service task definition: add flowable:eventType="myEventKey" (or serviceTask.setEventType("myEventKey")) to the send-event plan item
- Redeploy the corrected case definition so the running plan item picks up the new model
- 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
- Always set flowable:eventType on send-event service tasks
- Model-validate case definitions in CI before deployment
- Add a unit test that walks all send-event tasks and asserts a non-empty event type
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
- Cannot complete CMMN job. There is no CMMN engine available
- Cannot query external jobs. There is no BPMN or CMMN engine…
- Cannot unacquire CMMN job. There is no CMMN engine available
- Case should be validated, but no case validator is…
- CommandInvoker must be the last interceptor in the chain
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)