如何使用方法getPlatformMXBean()获取注册MBean?

时间:2016-02-18 03:40:58

标签: java jmx

我使用

注册了mbean
ManagementFactory.getPlatformMBeanServer().registerMBean(mbean, name);

我可以在jconsole中看到这个mbean。我希望通过ManagementFactory.getPlatformMXBean(mbean)获取它,但它会抛出异常

  

mbean不是平台管理界面。

如何获得此注册bean?

以下是代码。

public void contextInitialized(ServletContextEvent servletContextEvent) {
    System.out.println("Registering MBean...");
    try {
        ObjectName name = new ObjectName("common.test:type=MbeanTestImplement");
        MbeanTestInterface mbean = new MbeanTestImplement();
        ManagementFactory.getPlatformMBeanServer().registerMBean(mbean, name);
        MbeanTestImplement mxbean = ManagementFactory.getPlatformMXBean(MbeanTestImplement.class);
        System.out.println(mxbean.getName());
    } catch (Exception e){
        e.printStackTrace();
    }
    //ManagementFactory.getMBeanserverConnection()
}

MbeanTestInterface扩展了PlatformManagedObject,MbeanTestImplement实现了MbeanTestInterface。

public interface MbeanTestInterface extends PlatformManagedObject {
    public String getName();
}

public class MbeanTestImplement implements MbeanTestInterface {
    @Override
    public String getName() {
        return MbeanTestImplement.class.toString();
    }

    @Override
    public ObjectName getObjectName() {
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

您无法获取MBean实例。但是你可以获得它的属性并调用它的方法。您还可以使用此方法获取javax.management.ObjectInstance

ManagementFactory.getPlatformMBeanServer().getObjectInstance(name)

请检查this answer