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

  1. Read the cause chain to find the broadcaster's underlying failure
  2. Ensure the MBean is fully registered with the MBeanServer before notifications are sent
  3. Register notification listeners before triggering the code path that sends notifications
  4. 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

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


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