有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取spring已向jmx注册的bean?

有没有办法获取spring在mbeanserver中注册的bean实例列表

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

我看到一种选择是将MBeanExporter子类化,但我真的不想这样做,除非我必须这样做

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    我测试了一个示例代码,如下所示

        // 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...
    

    希望这有帮助

    更新:

    public class ObjectInstance extends Object implements Serializable。ObjectInstance表示MBean的对象名及其类名。我们无法检索对对象本身的引用

    我想在注册的MBean上操作的唯一方法是使用JMS/RMI连接器(或HTML适配器)连接MBean服务器,使用JMX创建MBean代理。对应于已注册mbean的newMBeanProxy并调用该mbean上的方法