用于更改资源的MBeans详解
立即解锁
发布时间: 2025-08-18 02:06:05 阅读量: 1 订阅数: 5 

### 用于更改资源的 MBeans 详解
#### 1. 调用操作
此前,我们已经了解了如何从动态 MBean 获取管理接口,以及如何获取和设置属性。管理接口由 `getMBeanInfo()` 方法返回的 `MBeanInfo` 对象描述,属性则通过 `getAttribute(s)()` 和 `setAttribute(s)()` 方法进行管理。现在,我们需要解释 `DynamicMBean` 接口是如何提供调用公开 MBean 操作的机制的。MBean 用户首先通过调用动态 MBean 的 `getMBeanInfo()` 方法获取 `MBeanInfo` 对象,从而了解 MBean 操作。
由于动态 MBean 的管理接口是在运行时提供的,因此无法显式定义操作。所以,需要一种通用机制来调用动态 MBean 操作。`DynamicMBean` 接口声明了 `invoke()` 方法来提供此机制。
`invoke()` 方法接受三个参数:
- 一个包含要调用方法名称的字符串值。
- 一个 `Object` 实例数组,这些实例是被调用方法的参数值。
- 一个字符串值数组,对应于被调用方法的参数类类型。
后两个参数(数组)中的值按所需方法声明中出现的顺序排列。例如,声明为 `setPrintQuality(Integer level)` 的方法,将用一个包含 `Integer` 值的单元素数组和另一个包含 `java.lang.Integer` 值的单元素数组来描述。动态 MBean 分析这些参数,调用适当的方法,并返回结果。底层方法调用的结果以 `Object` 值的形式在 `invoke()` 方法中返回。
#### 2. 理解 MBeanInfo 类
在前面的部分,我们学习了 `DynamicMBean` 接口方法的用途以及如何使用它们来管理动态 MBean。但之前只提到 MBean 的管理接口包含在 `getMBeanInfo()` 方法返回的 `MBeanInfo` 对象中。
`MBeanInfo` 类是用于描述 MBean 管理接口各部分的其他对象的容器。`MBeanInfo` 类及其包含的类统称为 MBean 元数据类。
动态 MBean 和 MBean 服务器都会创建 MBean 元数据类。MBean 服务器在内部使用这些对象,以便平等对待所有 MBean,而不考虑 MBean 的类型。对于标准 MBeans,MBean 服务器使用内省来创建一组描述 MBean 管理接口的元数据对象。对于其他 MBean(如动态 MBean),元数据对象由 MBean 本身构造。
以下是 MBeanInfo 类包含的元数据类及其对应的管理接口部分:
| 元数据类 | 管理接口的公开部分 |
| --- | --- |
| MBeanFeatureInfo | 所有其他元数据类的超类 |
| MBeanParameterInfo | 传递给方法和构造函数的参数 |
| MBeanConstructorInfo | 任何公开的构造函数 |
| MBeanAttributeInfo | 可读和可写属性 |
| MBeanOperationInfo | 公开的 MBean 操作 |
| MBeanNotificationInfo | MBean 可以发出的通知 |
除了包含元数据对象外,`MBeanInfo` 实例还提供 MBean 的类名和描述。可以通过调用 `getClassName()` 方法或 `getDescription()` 方法获取这些值。实际上,所有元数据类都包含一个描述成员变量,用于描述元数据对象。在编写动态 MBeans 时,应使用此描述变量来充分描述管理接口的各个部分。与动态 MBeans 交互的管理软件可以使用这些描述来帮助用户更好地理解如何使用 MBeans。
#### 3. 元数据类详细介绍
##### 3.1 MBeanFeatureInfo 和 MBeanParameterInfo 类
在研究描述管理接口的元数据类之前,先了解它们的基类 `MBeanFeatureInfo` 和支持类 `MBeanParameterInfo`。每个 MBean 元数据类都是 `MBeanFeatureInfo` 类的子类。该类包含功能的名称和人类可读的描述,确保每个子类描述的功能都有名称和描述。
`MBeanParameterInfo` 类扩展了 `MBeanFeatureInfo`,并提供了对构造函数和操作参数的描述。`MBeanParameterInfo` 对象在其超类提供的名称和描述字段的基础上添加了一个类型字段,该类型字段包含参数的类类型名称。通过这三个字段,可以充分描述一个方法参数。
##### 3.2 MBeanConstructorInfo 类
`MBeanConstructorInfo` 类是一个元数据类,用于描述 MBean 的单个公开构造函数。可以使用 `Constructor` 对象参数或使用描述构造函数签名的 `MBeanParameterInfo` 对象数组来创建它。由于构造函数仅由其签名描述,因此 `MBeanConstructorInfo` 类除了继承的方法外,只包含一个方法 `getSignature()`,该方法以 `MBeanParameterInfo` 对象数组的形式返回构造函数的签名。该类有两个构造函数:
```java
public MBeanConstructorInfo( String description,
java.lang.reflect.Constructor constructor )
public MBeanConstructorInfo( String name, String description,
MBeanParameterInfo[] signature )
```
##### 3.3 MBeanAttributeInfo 类
`MBeanAttributeInfo` 类是一个元数据类,用于描述 MBean 的公开属性。属性可以具有可读访问、可写访问或两者兼而有之。除了描述属性的公开访问权限外,该类还包含属性的名称、描述和类型。`MBeanAttributeInfo` 类有两个构造函数:
```java
public MBeanAttributeInfo( String name, String description,
java.lang.reflect.Method getter,
java.lang.reflect.Method setter )
public MBeanAttributeInfo( String name, String type, String
description, boolean isReadable,
boolean isWritable, boolean isIs )
```
可以通过指定属性的所有详细信息(第二个构造函数)或传入属性的 getter 和 setter 方法的 `Method` 对象来创建 `MBeanAttributeInfo` 实例。接受 `Method` 参数的构造函数仅使用它们来获取描述属性所需的信息,而不会存储这些 `Method` 参数以供在访问属性时调用。
可以通过调用以下便利方法从 `MBeanAttributeInfo` 类访问信息:
- `getType()`:返回属性的类类型(如 `java.lang.String`)。
- `isReadable()`:返回一个布尔值,指示该属性是否可读。
- `isWritable()`:返回一个布尔值,指示该属性是否可写。
- `isIs()`:返回一个布尔值,指示该属性是否可以使用 `is` 类型的方法访问。
##### 3.4 MBeanOperationInfo 类
`MBeanOperationInfo` 类是一个元数据类,用于封装 MBea
0
0
复制全文
相关推荐









