flowable/flowable-engine · warning

Registry port is null. JMX connector creation skipped.

Error message

Registry port is null. JMX connector creation skipped.

What it means

DefaultManagementAgent logs this warning when the JMX registryPort is null and skips RMI registry and connector creation. Like the serviceUrlPath check, it is an intentional skip so the engine starts without remote JMX rather than crashing. It signals an incomplete JMX configuration.

Source

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

    }

    @Override
    public void findAndRegisterMbeans() throws Exception {
        register(new ProcessDefinitionsMBean(jmxConfigurator.getProcessEngineConfig()), new ObjectName(jmxConfigurator.getDomain(), "type", "Deployments"));
        register(new JobExecutorMBean(jmxConfigurator.getProcessEngineConfig()), new ObjectName(jmxConfigurator.getDomain(), "type", "JobExecutor"));
    }

    public void createJmxConnector(String host) throws IOException {

        String serviceUrlPath = jmxConfigurator.getServiceUrlPath();
        Integer registryPort = jmxConfigurator.getRegistryPort();
        Integer connectorPort = jmxConfigurator.getConnectorPort();
        if (serviceUrlPath == null) {
            LOGGER.warn("Service url path is null. JMX connector creation skipped");
            return;
        }
        if (registryPort == null) {
            LOGGER.warn("Registry port is null. JMX connector creation skipped.");
            return;
        }

        try {
            registry = LocateRegistry.createRegistry(registryPort);
            LOGGER.debug("Created JMXConnector RMI registry on port {}", registryPort);
        } catch (RemoteException ex) {
            // The registry may had been created, we could get the registry instead
        }

        // must start with leading slash
        String path = serviceUrlPath.startsWith("/") ? serviceUrlPath : "/" + serviceUrlPath;
        // Create an RMI connector and start it
        final JMXServiceURL url;
        if (connectorPort > 0) {
            url = new JMXServiceURL("service:jmx:rmi://" + host + ":" + connectorPort + "/jndi/rmi://" + host + ":" + registryPort + path);
        } else {
            url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + host + ":" + registryPort + path);

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Set the JMX registry port (e.g. flowable.jmx.registryPort=1099) so the agent can create the RMI registry.
  2. If you rely on an already-running external RMI registry, configure the agent accordingly or disable the built-in registry creation.
  3. Disable JMX explicitly when remote monitoring is not needed to avoid the skipped-connector warning.
  4. Ensure the port value is a valid free port (1-65535) and not already bound.

Example fix

// before
flowable.jmx.enabled=true
flowable.jmx.serviceUrlPath=/jmxrmi
// after
flowable.jmx.enabled=true
flowable.jmx.serviceUrlPath=/jmxrmi
flowable.jmx.registryPort=1099
flowable.jmx.connectorPort=6789
Defensive patterns

Strategy: validation

Validate before calling

if (jmxConfigurator.getRegistryPort() == null) {
    throw new IllegalStateException("flowable.jmx.registryPort must be set when JMX is enabled");
}
int port = jmxConfigurator.getRegistryPort();
if (port < 1 || port > 65535) {
    throw new IllegalArgumentException("registryPort out of range: " + port);
}

Type guard

boolean hasRegistryPort(JmxConfigurator c) {
    return c.getRegistryPort() != null && c.getRegistryPort() > 0 && c.getRegistryPort() <= 65535;
}

Prevention

When it happens

Trigger: createJmxConnector (via createMBeanServer) is invoked with jmxConfigurator.getRegistryPort() returning null, i.e. the registry port was never configured while the JMX agent is enabled and serviceUrlPath is set.

Common situations: Setting connectorPort but forgetting registryPort in flowable config; port left unset because an external RMI registry was assumed; config migration where the registryPort key was renamed or dropped.

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


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