从Spring连接到MBean服务器时的InvocationException

时间:2013-05-02 11:37:01

标签: spring jmx mbeans

我正在尝试从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?

2 个答案:

答案 0 :(得分: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的内容隐含了。

答案 1 :(得分:0)

将java.rmi.server.ignoreStubClasses系统属性设置为true后,它会得到解决。

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