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
- Set the JMX registry port (e.g. flowable.jmx.registryPort=1099) so the agent can create the RMI registry.
- If you rely on an already-running external RMI registry, configure the agent accordingly or disable the built-in registry creation.
- Disable JMX explicitly when remote monitoring is not needed to avoid the skipped-connector warning.
- 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
- Always configure registryPort and connectorPort together with serviceUrlPath
- Check port availability with netstat/lsof before startup
- Use a config validation step on boot that fails fast on missing JMX settings
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
- Service url path is null. JMX connector creation skipped
- cronExpression cannot be null
- JMX connection:{} already exists.
- Could not start JMXConnector thread at: {}. JMX Connector no
- no org.flowable.app.engine.AppEngine defined in the applicat
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/07a55085d77ca506.
Report an issue: GitHub.