2013-05-02 89 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的内容。