创建RMI连接器客户端



我正在尝试连接到MBean服务器。我需要编写JMX客户端应用程序。这是用于客户端应用程序的代码。但是我有一个与这个

相关的异常

检索RMIServer存根失败:serviceunavailableexception[根异常是java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常是:

谁能帮我修一下这个?
import java.io.IOException;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class SystemConfigClient {
    public static final String HOST = "localhost";
    public static final String PORT = "1099";

    public static void main(String[] args) throws IOException, MalformedObjectNameException {
        JMXServiceURL url =new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + HOST + ":" +PORT+ "/jmxrmi");
        JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
        MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection();
        //ObjectName should be same as your MBean name
        ObjectName mbeanName = new ObjectName("ifs.demo1.jmx:type=SystemConfig");
        //Get MBean proxy instance that will be used to make calls to registered MBean
        SystemConfigMBean mbeanProxy =
            (SystemConfigMBean) MBeanServerInvocationHandler.newProxyInstance(
                mbeanServerConnection, mbeanName, SystemConfigMBean.class, true);
        //let's make some calls to mbean through proxy and see the results.
        System.out.println("Current SystemConfig::" + mbeanProxy.doConfig());
        mbeanProxy.setSchemaName("NewSchema");
        mbeanProxy.setThreadCount(5);
        System.out.println("New SystemConfig::" + mbeanProxy.doConfig());
        //let's terminate the mbean by making thread count as 0
        mbeanProxy.setThreadCount(0);
        //close the connection
        jmxConnector.close();
    }
}

我用下列参数运行了这段代码。

Dcom.sun.management。现在Dcom.sun.management.jmxremote.port = 1099Dcom.sun.management.jmxremote.authenticate = falseDcom.sun.management.jmxremote.ssl = false

但是我得到了

的例外

线程"main"中的异常java.io.IOException:检索失败RMIServer存根:javax.naming.ServiceUnavailableException[根java.rmi.ConnectException: Connection refused to host:本地主机;嵌套异常:java.net.ConnectException:连接被拒绝:connect] atjavax.management.remote.rmi.RMIConnector.connect (RMIConnector.java: 338)在javax.management.remote.JMXConnectorFactory.connect (JMXConnectorFactory.java: 248)在javax.management.remote.JMXConnectorFactory.connect (JMXConnectorFactory.java: 207)在com.demo1.jmx.SystemConfigClient.main (SystemConfigClient.java: 29)产生原因:javax.naming.ServiceUnavailableException[根异常是。java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常是:java.net.ConnectException:连接被拒绝:连接)com.sun.jndi.rmi.registry.RegistryContext.lookup (RegistryContext.java: 101)在com.sun.jndi.toolkit.url.GenericURLContext.lookup (GenericURLContext.java: 185)查找(InitialContext.java:392javax.management.remote.rmi.RMIConnector.findRMIServerJNDI (RMIConnector.java: 1886)在javax.management.remote.rmi.RMIConnector.findRMIServer (RMIConnector.java: 1856)在javax.management.remote.rmi.RMIConnector.connect (RMIConnector.java: 257)…java.rmi.ConnectException: Connection refused到主机:localhost;嵌套异常:java.net.ConnectException:连接被拒绝:连接在sun.rmi.transport.tcp.TCPEndpoint.newSocket (TCPEndpoint.java: 601)sun.rmi.transport.tcp.TCPChannel.createConnection (TCPChannel.java: 198)在sun.rmi.transport.tcp.TCPChannel.newConnection (TCPChannel.java: 184)(UnicastRef.java:322sun.rmi.registry.RegistryImpl_Stub。查找(未知来源)在com.sun.jndi.rmi.registry.RegistryContext.lookup (RegistryContext.java: 97)…java.net.ConnectException: Connection refused(连接拒绝)socketconnect(本机方法java.net.PlainSocketImpl.doConnect (PlainSocketImpl.java: 333)java.net.PlainSocketImpl.connectToAddress (PlainSocketImpl.java: 195)在java.net. PlainSocketImpl.java:182连接java.net.SocksSocketImpl.connect (SocksSocketImpl.java: 366)java.net.Socket.connect (Socket.java: 529)java.net.Socket.connect (Socket.java: 478)java.net.Socket (Socket.java: 375)java.net.Socket (Socket.java: 189)sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket (RMIDirectSocketFactory.java: 22)在sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket (RMIMasterSocketFactory.java: 128)sun.rmi.transport.tcp.TCPEndpoint.newSocket (TCPEndpoint.java: 595)…>>

您是否注意到您正在使用带有"D"而不是"-D"的VM参数?还是只是打错了?正确的是:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

相关内容

最新更新