This article shows how to fix the error βUnsupported protocol: remote+httpβ which can happen if you try to connect via JMX to a java process, such as JBoss/WildFly application server.
In some cases, the JMX subsystem registers a service with the Remoting endpoint so that you can obtain remote access to JMX over the exposed Remoting connector. This is the case of a JMX Connection String such as the following one:
service:jmx:remote+http://localhost:9990
Here is an example code snipped which connects to WildFly via JMX through the port 9990:
String host = "localhost"; int port = 9990; // management-http port String urlString = "service:jmx:remote+http://" + host + ":" + port; System.out.println("\n\n\t**** urlString: "+urlString);; JMXServiceURL serviceURL = new JMXServiceURL(urlString); Map map = new HashMap(); String[] credentials = new String[] { "admin", "admin" }; map.put("jmx.remote.credentials", credentials); JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, map);
If you run the above example, without any extra dependency, you will hit the following error:
Exception in thread "main" java.net.MalformedURLException: Unsupported protocol: remote+http at java.management/javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:366)
This is because, to run JMX over RMI you need to include the wildfly-client-all dependency for your server version. For example:
<dependency> <groupId>org.wildfly</groupId> <artifactId>wildfly-client-all</artifactId> <version>26.0.0.Final</version> </dependency>
To learn more about WildFly and JMX, check this article: Managing MBeans with WildFly