本地 JMX 调用因 ClassCastException 而失败
Local JMX invokation fails with ClassCastException
我正在尝试使用下面的简单代码在本地调用 JMX 服务。它适用于 JConsole,但在命令行下它会在粘贴代码的最后一行抛出异常。
String serviceURL = "service:jmx:rmi:///jndi/rmi://localhost:" + configuration.getJmxPort();
String[] credentials = new String[]{configuration.getUsername(), configuration.getPassword()};
Map<String, String[]> attributes = new HashMap<String, String[]>();
attributes.put("jmx.remote.credentials", credentials);
JMXServiceURL jmxUrl = new JMXServiceURL(serviceURL);
jmxCon = JMXConnectorFactory.connect(jmxUrl, attributes);
堆栈跟踪如下所示:
java.lang.ClassCastException: com.sun.jndi.rmi.registry.RegistryContext cannot be cast to javax.management.remote.rmi.RMIServer
at javax.management.remote.rmi.RMIConnector.narrowJRMPServer(RMIConnector.java:1897)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1892)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at com.aaa.aaa.aaa.jmx.AaaJmxClient.main(AaaJmxClient.java:36)
我认为 JMX 服务 URL 应该是 -
String serviceURL = "service:jmx:rmi:///jndi/rmi://localhost:" + configuration.getJmxPort() + "/jmxrmi";
我正在尝试使用下面的简单代码在本地调用 JMX 服务。它适用于 JConsole,但在命令行下它会在粘贴代码的最后一行抛出异常。
String serviceURL = "service:jmx:rmi:///jndi/rmi://localhost:" + configuration.getJmxPort();
String[] credentials = new String[]{configuration.getUsername(), configuration.getPassword()};
Map<String, String[]> attributes = new HashMap<String, String[]>();
attributes.put("jmx.remote.credentials", credentials);
JMXServiceURL jmxUrl = new JMXServiceURL(serviceURL);
jmxCon = JMXConnectorFactory.connect(jmxUrl, attributes);
堆栈跟踪如下所示:
java.lang.ClassCastException: com.sun.jndi.rmi.registry.RegistryContext cannot be cast to javax.management.remote.rmi.RMIServer
at javax.management.remote.rmi.RMIConnector.narrowJRMPServer(RMIConnector.java:1897)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1892)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at com.aaa.aaa.aaa.jmx.AaaJmxClient.main(AaaJmxClient.java:36)
我认为 JMX 服务 URL 应该是 -
String serviceURL = "service:jmx:rmi:///jndi/rmi://localhost:" + configuration.getJmxPort() + "/jmxrmi";