2013-05-02 136 views
2

我正在嘗試連接到MBean服務器。我需要編寫JMX客戶端應用程序。這是用於客戶端應用程序的代碼。但是,我有相關的異常此創建RMI連接器客戶端

無法檢索的RMIServer存根: javax.naming.ServiceUnavailableException [根異常是 java.rmi.ConnectException:拒絕連接主機:本地主機; 嵌套異常是:

有人可以幫我解決這個問題。

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.jmxremote Dcom.sun.management.jmxremote.port = 1099 Dcom.sun.management.jmxremote.authenticate =假 Dcom.sun.management.jmxremote.ssl =假

,但我得到了

例外的例外在線程 「主要」 產生java.io.IOException:無法檢索 的RMIServer存根:javax.naming.ServiceUnavailableException [根 例外是JAV a.rmi.ConnectException:連接拒絕主機: localhost;嵌套的異常是:java.net.ConnectException: 連接被拒絕:連接]在 javax.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) 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) 在 javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257) ... 3個所致:JAVA .rmi.ConnectException:連接被拒絕 到主機:localhost;嵌套的異常是:java.net.ConnectException: 連接被拒絕:連接在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)在 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。註冊表.RegistryImpl_Stub.lookup(未知源)在 com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:97) ... 8更多由java.net。ConnectException:連接被拒絕: 在java.net.PlainSocketImpl.socketConnect(本地方法)處連接 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 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)(Socket.java:375) 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更多Java結果:1

+0

什麼jboss版本? – Nicholas 2013-05-02 11:45:04

回答

2

您是否注意到您正在使用具有「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