flowable/flowable-engine · warning

Could not start JMXConnector thread at: {}. JMX Connector no

Error message

Could not start JMXConnector thread at: {}. JMX Connector not in use.

What it means

This warning is logged when starting the JMX connector server thread fails with an IOException that is NOT a NameAlreadyBoundException, so the JMX connector is not in use/available. The connector server (cs.start()) could not bind or export the RMI stub, and the exception is logged with the URL and stack trace for diagnosis. Remote JMX management will be unavailable for this engine instance.

Source

Thrown at modules/flowable-jmx/src/main/java/org/flowable/management/jmx/DefaultManagementAgent.java:235

        cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);

        // use async thread for starting the JMX Connector
        // (no need to use a thread pool or enlist in JMX as this thread is
        // terminated when the JMX connector has been started)
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    LOGGER.debug("Staring JMX Connector thread to listen at: {}", url);
                    cs.start();
                    LOGGER.info("JMX Connector thread started and listening at: {}", url);
                } catch (IOException ioe) {
                    if (ioe.getCause() instanceof javax.naming.NameAlreadyBoundException) {
                        LOGGER.warn("JMX connection:{} already exists.", url);
                    } else {
                        LOGGER.warn("Could not start JMXConnector thread at: {}. JMX Connector not in use.", url, ioe);
                    }
                }
            }
        }, "jmxConnectorStarterThread");
        thread.start();
    }

}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Read the logged IOException stack trace to find the root cause (most commonly BindException on the connector/registry port).
  2. Choose free ports for registryPort and connectorPort (check with netstat/lsof) and update the configuration.
  3. If running multi-node or in containers, ensure the published ports and java.rmi.server.hostname match the actual interfaces.
  4. Restart the process after fixing config so a fresh registry and connector are created.
  5. Disable JMX if remote monitoring is not required.

Example fix

// before
flowable.jmx.connectorPort=6789 // already used by another process
// after
flowable.jmx.connectorPort=6790 // free port
Defensive patterns

Strategy: try-catch

Validate before calling

try (ServerSocket ss = new ServerSocket(connectorPort)) {
    // port is free
} catch (IOException e) {
    throw new IllegalStateException("JMX connectorPort " + connectorPort + " already in use", e);
}

Try / catch

try {
    connectorServer.start();
} catch (IOException ioe) {
    log.error("Failed to start JMX connector at {} — check port availability and hostname settings", url, ioe);
    // continue without remote JMX or rethrow depending on requirements
}

Prevention

When it happens

Trigger: JMXConnectorServer.start() throws IOException — e.g. the configured registry/connector port is already bound by another process, the RMI registry disappeared, or network interface binding fails — in the jmxConnectorStarterThread inside createJmxConnector.

Common situations: Another application already occupies the connector port (port conflict); firewall or host/port mismatch; registry created on a different host/interface than the connector URL; port privileged or in use after an unclean restart.

Related errors


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