title: Creating an RMI Connector Client
body: <p>I am trying to connect to MBean server. I need to write JMX Client application. This is the code used for client application. But I have got an exception related to this</p>
  
  <blockquote>
    <p>Failed to retrieve RMIServer stub:
    javax.naming.ServiceUnavailableException [Root exception is
    java.rmi.ConnectException: Connection refused to host: localhost;
    nested exception is:</p>
  </blockquote>
  
  <p>Can somebody help me to fix this. </p>
  
  <pre><code>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();
      }
  
  }
  </code></pre>
  
  <p>I have run this code with following arguments.</p>
  
  <blockquote>
    <p>Dcom.sun.management.jmxremote Dcom.sun.management.jmxremote.port=1099
    Dcom.sun.management.jmxremote.authenticate=false
    Dcom.sun.management.jmxremote.ssl=false</p>
  </blockquote>
  
  <p>but I got the exception of </p>
  
  <blockquote>
    <p>Exception in thread "main" java.io.IOException: Failed to retrieve
    RMIServer stub: javax.naming.ServiceUnavailableException [Root
    exception is java.rmi.ConnectException: Connection refused to host:
    localhost; nested exception is:   java.net.ConnectException:
    Connection refused: connect]  at
    javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338)
      at
    javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
      at
    javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:207)
      at com.demo1.jmx.SystemConfigClient.main(SystemConfigClient.java:29)
    Caused by: javax.naming.ServiceUnavailableException [Root exception is
    java.rmi.ConnectException: Connection refused to host: localhost;
    nested exception is:      java.net.ConnectException: Connection refused:
    connect]  at
    com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:101)
      at
    com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
      at javax.naming.InitialContext.lookup(InitialContext.java:392)  at
    javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1886)
      at
    javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856)
      at
    javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
      ... 3 more Caused by: java.rmi.ConnectException: Connection refused
    to host: localhost; nested exception is:      java.net.ConnectException:
    Connection refused: connect   at
    sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)     at
    sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
      at
    sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
      at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)   at
    sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)     at
    com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97)
      ... 8 more Caused by: java.net.ConnectException: Connection refused:
    connect   at java.net.PlainSocketImpl.socketConnect(Native Method)    at
    java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)  at
    java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)   at
    java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)    at
    java.net.Socket.connect(Socket.java:529)  at
    java.net.Socket.connect(Socket.java:478)  at
    java.net.Socket.(Socket.java:375)   at
    java.net.Socket.(Socket.java:189)   at
    sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
      at
    sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
      at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
      ... 13 more Java Result: 1</p>
  </blockquote>