{"record":{"id":"a91a76a2e1de4dfd","repo":"flowable/flowable-engine","slug":"service-url-path-is-null-jmx-connector-creation-s","errorCode":null,"errorMessage":"Service url path is null. JMX connector creation skipped","messagePattern":"Service url path is null\\. JMX connector creation skipped","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-jmx/src/main/java/org/flowable/management/jmx/DefaultManagementAgent.java","lineNumber":193,"sourceCode":"        }\r\n\r\n        // create a mbean server with the given default domain name\r\n        return MBeanServerFactory.createMBeanServer(jmxConfigurator.getMbeanDomain());\r\n    }\r\n\r\n    @Override\r\n    public void findAndRegisterMbeans() throws Exception {\r\n        register(new ProcessDefinitionsMBean(jmxConfigurator.getProcessEngineConfig()), new ObjectName(jmxConfigurator.getDomain(), \"type\", \"Deployments\"));\r\n        register(new JobExecutorMBean(jmxConfigurator.getProcessEngineConfig()), new ObjectName(jmxConfigurator.getDomain(), \"type\", \"JobExecutor\"));\r\n    }\r\n\r\n    public void createJmxConnector(String host) throws IOException {\r\n\r\n        String serviceUrlPath = jmxConfigurator.getServiceUrlPath();\r\n        Integer registryPort = jmxConfigurator.getRegistryPort();\r\n        Integer connectorPort = jmxConfigurator.getConnectorPort();\r\n        if (serviceUrlPath == null) {\r\n            LOGGER.warn(\"Service url path is null. JMX connector creation skipped\");\r\n            return;\r\n        }\r\n        if (registryPort == null) {\r\n            LOGGER.warn(\"Registry port is null. JMX connector creation skipped.\");\r\n            return;\r\n        }\r\n\r\n        try {\r\n            registry = LocateRegistry.createRegistry(registryPort);\r\n            LOGGER.debug(\"Created JMXConnector RMI registry on port {}\", registryPort);\r\n        } catch (RemoteException ex) {\r\n            // The registry may had been created, we could get the registry instead\r\n        }\r\n\r\n        // must start with leading slash\r\n        String path = serviceUrlPath.startsWith(\"/\") ? serviceUrlPath : \"/\" + serviceUrlPath;\r\n        // Create an RMI connector and start it\r\n        final JMXServiceURL url;\r","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-jmx/src/main/java/org/flowable/management/jmx/DefaultManagementAgent.java#L175-L211","documentation":"DefaultManagementAgent logs this warning when the JMX serviceUrlPath configured on the JmxConfigurator is null, and skips creating the JMX RMI connector. It is a deliberate early-return, not a thrown exception: JMX remote access is simply not enabled. It typically means the flowable.jmx serviceUrlPath property was never set while JMX was otherwise enabled.","triggerScenarios":"Calling createJmxConnector (indirectly via createMBeanServer, e.g. when initializing the JMX management agent) while jmxConfigurator.getServiceUrlPath() returns null because the serviceUrlPath property was not configured.","commonSituations":"Deploying with JMX enabled in config but only the ports set and not the service url path; copying a config sample that leaves serviceUrlPath commented out; programmatic JmxConfigurator setup where only setRegistryPort/setConnectorPort were called.","solutions":["Set the JMX service url path in configuration (e.g. flowable.jmx.serviceUrlPath=/jmxrmi or via JmxConfigurator.setServiceUrlPath(...)).","If JMX is not wanted, explicitly disable JMX so the agent is never started instead of relying on the null path.","Verify the configuration source (properties file / Spring environment) actually binds the serviceUrlPath key to the JmxConfigurator before createMBeanServer runs.","Check logs for this warning at startup to confirm JMX remote monitoring is intentionally off."],"exampleFix":"// before\nflowable.jmx.enabled=true\nflowable.jmx.registryPort=1099\n// after\nflowable.jmx.enabled=true\nflowable.jmx.registryPort=1099\nflowable.jmx.serviceUrlPath=/jmxrmi\nflowable.jmx.connectorPort=6789","handlingStrategy":"validation","validationCode":"if (jmxConfigurator.getServiceUrlPath() == null) {\n    throw new IllegalStateException(\"flowable.jmx.serviceUrlPath must be set when JMX is enabled\");\n}","typeGuard":"boolean isJmxReady(JmxConfigurator c) {\n    return c.getServiceUrlPath() != null && c.getRegistryPort() != null && c.getConnectorPort() != null;\n}","tryCatchPattern":null,"preventionTips":["Set flowable.jmx.serviceUrlPath whenever JMX is enabled","Validate all three JMX properties (path, registryPort, connectorPort) at config load time","Disable JMX explicitly when remote monitoring is not needed"],"tags":["jmx","configuration","null-check"],"backgroundTag":"missing-required-config-field","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}