标准MBean和动态MBean有什么区别?

11

标准MBeans与动态MBeans有什么区别?

  1. 标准MBeans是静态定义的,其属性和操作在编译时就已知。而动态MBeans可以在运行时动态地添加、更改或删除属性和操作。
  2. 标准MBeans需要实现特定接口来暴露MBean功能,而动态MBeans可以使用任何Java对象作为MBean。

每种组件的优缺点是什么,我们应该在何时选择它们来管理资源?

1个回答

11

标准MBean具有固定的元数据,在MBean的生命周期内不会更改。动态MBean会在运行时定义其元数据,并可以修改和重新发布其元数据。以Java的一个[糟糕的]编造的类比为例:假设您编写了一个列出目录中文件数量的类。标准类方法可能如下所示:

public int getFileCount(String directoryName)

另一方面,此类的Dynamic MBean版本将不带任何方法,但是当它启动时,会扫描可用的目录,并为找到的每个目录创建一个新方法:

public int getFileCountDir1();
public int getFileCountDir2();
....
public int getFileCountDirN();

那么这样并不是一个非常有用的设置,但是假设您想要创建一个MBean来显示所有JVM的系统属性。 好吧....系统属性会发生更改...并且没有合理的方法事先知道将定义哪些属性键,因此这将是动态MBean的更好代表。

利弊真正取决于:

  1. 标准的MBean易于创建,现有的类实例可以被包装并公开为标准MBean。
  2. 当动态MBean具有有用的作用时,它们是很棒的,但实现起来需要更多的工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接