有没有办法获取 spring 已向 mbeanserver 注册的 bean 实例列表?
我看到您可以在 MBeanExporter 上注册一个 MBeanExporterListener,但这只会告诉我注册 bean 的 ObjectName。我可以在某处使用该 ObjectName 来获取已注册的 Object 的实例吗?
我看到一种选择可能是将 MBeanExporter 子类化,但我真的不想这样做,除非我必须这样做。
谢谢。
有没有办法获取 spring 已向 mbeanserver 注册的 bean 实例列表?
我看到您可以在 MBeanExporter 上注册一个 MBeanExporterListener,但这只会告诉我注册 bean 的 ObjectName。我可以在某处使用该 ObjectName 来获取已注册的 Object 的实例吗?
我看到一种选择可能是将 MBeanExporter 子类化,但我真的不想这样做,除非我必须这样做。
谢谢。
事实证明你不能。如果要实现这一点,则必须将 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...
希望这可以帮助!
更新 :
public class ObjectInstance extends Object implements Serializable
. ObjectInstance 表示 MBean 的对象名称及其类名称。我们无法检索对对象本身的引用。
我想对注册的 mbean 进行操作的唯一方法是使用 JMS/RMI 连接器(或 HTML 适配器)来获取 mbaean 服务器的连接,使用与注册的 mbean 对应的 JMX.newMBeanProxy 创建 mbaen 代理并在其上调用方法。