{"record":{"id":"707d94b4cbc12b4b","repo":"flowable/flowable-engine","slug":"no-event-model-found-for-event-key-key-for-pl","errorCode":null,"errorMessage":"No event model found for event key ${key} for ${planItemInstanceEntity}","messagePattern":"No event model found for event key (.+?) for (.+?)","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/SendEventActivityBehavior.java","lineNumber":89,"sourceCode":"        }\n\n        if (sendOnSystemChannel) {\n            eventRegistry.sendSystemEventOutbound(eventInstance);\n        }\n\n        CommandContextUtil.getAgenda(commandContext).planCompletePlanItemInstanceOperation(planItemInstanceEntity);\n    }\n\n    protected EventModel getEventModel(PlanItemInstanceEntity planItemInstanceEntity, String key) {\n        EventModel eventModel = null;\n        if (Objects.equals(CmmnEngineConfiguration.NO_TENANT_ID, planItemInstanceEntity.getTenantId())) {\n            eventModel = CommandContextUtil.getEventRepositoryService().getEventModelByKey(key);\n        } else {\n            eventModel = CommandContextUtil.getEventRepositoryService().getEventModelByKey(key, planItemInstanceEntity.getTenantId());\n        }\n\n        if (eventModel == null) {\n            throw new FlowableException(\"No event model found for event key \" + key + \" for \" + planItemInstanceEntity);\n        }\n        return eventModel;\n    }\n\n    protected boolean isSendOnSystemChannel(PlanItemInstanceEntity planItemInstanceEntity) {\n        List<ExtensionElement> systemChannels = planItemInstanceEntity.getPlanItemDefinition().getExtensionElements()\n                .getOrDefault(\"systemChannel\", Collections.emptyList());\n        return !systemChannels.isEmpty();\n    }\n\n    protected List<ChannelModel> getChannelModels(CommandContext commandContext, PlanItemInstanceEntity planItemInstanceEntity, boolean sendOnSystemChannel) {\n        List<String> channelKeys = new ArrayList<>();\n\n        Map<String, List<ExtensionElement>> extensionElements = planItemInstanceEntity.getPlanItem().getPlanItemDefinition().getExtensionElements();\n        if (extensionElements != null) {\n            List<ExtensionElement> channelKeyElements = extensionElements.get(\"channelKey\");\n            if (channelKeyElements != null && !channelKeyElements.isEmpty()) {\n                String channelKey = channelKeyElements.get(0).getElementText();","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/SendEventActivityBehavior.java#L71-L107","documentation":"A send-event plan item resolves its event key to an event model via the EventRepositoryService. When no event model is deployed under that key (with or without tenant), getEventModel returns null and Flowable throws a FlowableException naming the key and plan item instance.","triggerScenarios":"execute() of a send-event plan item calls getEventModel() with a key (from eventRef or eventRefExpression) that has no deployed event model, either globally or for the plan item's tenant.","commonSituations":"Event registry model never deployed or deployed after the case started; typo in eventRef; tenant-specific deployment missing so the tenant lookup finds nothing; event model deleted/undeployed while cases still reference it.","solutions":["Deploy the event registry model with the referenced key before starting/activating the case (EventRepositoryService.createDeployment().addClasspathResource(...).deploy())","Verify the eventRef/eventRefExpression spelling against the deployed event model key","If using tenants, deploy the event model for the correct tenant or ensure a shared (no-tenant) model exists","Check event model key as resolved at runtime (log the key) — expression-based keys may resolve differently than expected"],"exampleFix":"// before: case references eventRef=\"orderEvent\" but model never deployed\n// after: deploy it at startup\neventRepositoryService.createDeployment()\n    .addClasspathResource(\"event-models/orderEvent.event\")\n    .tenantId(\"acme\")\n    .deploy();","handlingStrategy":"validation","validationCode":"EventModel model = eventRepositoryService.getEventModelByKey(key, tenantId);\nif (model == null) {\n    throw new IllegalStateException(\"Deploy event model with key \" + key + \" before starting the case\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    runtimeService.triggerPlanItemInstance(eventPlanItemId);\n} catch (FlowableException e) {\n    if (e.getMessage().startsWith(\"No event model found\")) {\n        // extract key from message, deploy the model, retry\n    }\n}","preventionTips":["Deploy all referenced event models as part of application startup","Verify eventRef keys against the deployed model keys","Deploy tenant-specific event models when using tenants","Cover each event task in integration tests with a real deployment"],"tags":["cmmn","event-registry","resource-not-found","deployment"],"backgroundTag":"resource-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}