如何获取spring已在jmx注册的bean



有没有办法获得spring已经向mbeanserver注册的bean实例列表?

我看到您可以在MBeanExporter上注册MBeanExporterListener,但这只是告诉我注册了bean的ObjectName。我可以在某个地方使用该ObjectName来获取已注册对象的实例吗?

我看到一个选项可以是对MBeanExporter进行子类化,但除非迫不得已,否则我真的不想这么做

谢谢。

我测试了如下的示例代码

    // Get the Platform MBean Server
    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    // Construct the ObjectName for the MBean we will register
    ObjectName name = new ObjectName("com.example.mbeans:type=Hello");
    // Create the Hello World MBean
    Hello mbean = new Hello();
    // Register the Hello World MBean
    mbs.registerMBean(mbean, name);
    Set<ObjectInstance> instances = mbs.queryMBeans(name, null);
    ObjectInstance instance = (ObjectInstance) instances.toArray()[0];
    System.out.println("Class Name:t" + instance.getClassName());
    System.out.println("Object Name:t" + instance.getObjectName());
    // Wait forever
    System.out.println("Waiting forever...");
    Thread.sleep(Long.MAX_VALUE);

当然有interface HelloMBean

class Hello extends NotificationBroadcasterSupport implements HelloMBean

输出为

Class Name:tcom.example.mbeans.Hello
Object Name:tcom.example.mbeans:type=Hello
Waiting forever...

希望这能有所帮助!

更新:

CCD_ 2。ObjectInstance表示MBean的对象名及其类名。我们无法检索对对象本身的引用。

我想对注册的mbean进行操作的唯一方法是使用JMS/RMI连接器(或HTML适配器)来获得mbaean服务器的连接,使用与注册mbean对应的JMX.newMBeanProxy创建mbaen代理,并调用其上的方法。

事实证明你做不到。如果你想实现这一点,你必须对MBeanExporter进行子类化。

相关内容

  • 没有找到相关文章

最新更新