2013-05-02 58 views
0

我試圖從我的Spring應用程序連接到MBean服務器。以下是代碼:InvocationException從Spring連接到MBean服務器

public void connect() throws Exception { 

    MBeanServerConnectionFactoryBean bean = new MBeanServerConnectionFactoryBean(); 
    bean.setConnectOnStartup(false); 

    Properties environment = new Properties(); 

    environment.put("java.naming.factory.initial", "com.sun.jndi.rmi.registry.RegistryContextFactory"); 
    environment.put("java.naming.provider.url", "rmi://117.13.128.104:9308"); 
    environment.put("jmx.remote.jndi.rebind", "true"); 

    bean.setEnvironment(environment); 
    bean.setServiceUrl("service:jmx:rmi://117.13.128.104/jndi/rmi://117.13.128.104:9308/agent/EODServer"); 
    bean.afterPropertiesSet(); 

    MBeanServerConnection server = (MBeanServerConnection)bean.getObject(); 

    System.out.println("test"); // After bean.getObject() - Debug pointer on this line. 
} 

調試指針在bean.getObject()方法調用後設置。

在上面的代碼調試,我得到以下值的MBeanServerConnection服務器:發生

com.sun.jdi.InvocationException調用方法。

MBeanServerConnectionFactoryBean的Environment和ServiceUrl的值設置正確,那麼爲什麼它沒有連接到MBean Server?

回答

0

在將java.rmi.server.ignoreStubClasses系統屬性設置爲true後,它得到解決。

System.setProperty("java.rmi.server.ignoreStubClasses", "true"); 
0

我並不熟悉那個特定的實用程序,但它看起來像JNDI和JMX配置之間有一些奇怪的重疊。爲什麼不簡化並只使用JDK自己的JMXConnectorFactory

import javax.management.*; 
import javax.management.remote.*; 
... 
JMXConnector connector = JMXConnectorFactory.connect("service:jmx:rmi://117.13.128.104/jndi/rmi://117.13.128.104:9308/agent/EODServer"); 
MBeanServerConnection connection = connector.getMBeanServerConnection(); 

從技術上講,如果你需要,你可以使用添加環境映射到組合:

JMXConnector connector = JMXConnectorFactory.connect("service:jmx:rmi://117.13.128.104/jndi/rmi://117.13.128.104:9308/agent/EODServer", environment); 

...但在我看來,你所使用的環境已經暗示通過默認的連接器和JMXServiceURL的內容。