flowable/flowable-engine · error · FlowableException
Error sending notification
Error message
Error sending notification
What it means
NotificationSenderAdapter.sendNotification() delegates to the RequiredModelMBean broadcaster. Any exception raised by the broadcaster is wrapped in a FlowableException with the message "Error sending notification", with the original exception as the cause.
Source
Thrown at modules/flowable-jmx/src/main/java/org/flowable/management/jmx/NotificationSenderAdapter.java:36
import org.flowable.common.engine.api.FlowableException;
/**
* @author Saeid Mirzaei
*/
public final class NotificationSenderAdapter implements NotificationSender {
protected ModelMBeanNotificationBroadcaster broadcaster;
public NotificationSenderAdapter(ModelMBeanNotificationBroadcaster broadcaster) {
this.broadcaster = broadcaster;
}
@Override
public void sendNotification(Notification notification) {
try {
broadcaster.sendNotification(notification);
} catch (Exception e) {
throw new FlowableException("Error sending notification", e);
}
}
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Read the cause chain to find the broadcaster's underlying failure
- Ensure the MBean is fully registered with the MBeanServer before notifications are sent
- Register notification listeners before triggering the code path that sends notifications
- Catch FlowableException around notification-sending code and degrade gracefully
Example fix
// before
sender.sendNotification(notif); // may throw FlowableException
// after
try {
sender.sendNotification(notif);
} catch (FlowableException e) {
log.warn("JMX notification failed", e.getCause());
} Defensive patterns
Strategy: try-catch
Validate before calling
// ensure the MBean is registered and listeners attached before sending
if (mbeanServer.isRegistered(name) && listenerCount > 0) {
sender.sendNotification(notif);
} Try / catch
try {
sender.sendNotification(notif);
} catch (FlowableException e) {
log.warn("Notification delivery failed", e.getCause());
// retry or fall back to logging
} Prevention
- Register the MBean and its listeners before sending notifications
- Always inspect getCause() for the broadcaster's real failure
- Handle notification failures defensively — they should not break business flow
- Test JMX notification paths in a live MBeanServer environment
When it happens
Trigger: broadcaster.sendNotification(notification) throwing — e.g. the MBean has no registered NotificationListeners or the underlying ModelMBean notification infrastructure is in an invalid state; an unchecked exception thrown inside broadcaster processing.
Common situations: Managed objects sending JMX notifications before the MBean is fully registered; listeners disconnections mid-flight; runtime exceptions in notification serialization; testing JMX notification flow outside a live MBeanServer.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- ${e.getMessage()}
- @ManagedAttribute can only be used on Java bean methods, was
- baseUrl can not be null
- Error retrieving app engine info
- Could not find an app definition with id '<appDefinitionId>
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/e8505be6fd88d72f.
Report an issue: GitHub.