【翻译JMX1.4】I JMX Instrumentation Specification(持续修改)

第一部分JMX仪器规范

2. MBean仪器(MBean Instrumentation)

JMX规范的instrumentation级定义了如何装备Java编程语言中的资源,以便它们可以被管理。资源根据本章中定义的规则开发的应用程序被称为JMX可管理的资源。
调用实现资源及其工具的Java对象托管的bean或MBeans。 MBean必须遵循设计模式和接口在本部分的规范中定义。 这确保所有MBean都提供了以标准化方式管理资源。
MBean可由任何JMX代理管理,但也可以由不合规管理支持MBean概念的代理。
这部分规范主要针对应用程序开发人员或希望为其资源提供管理功能的设备。
应用程序和设备的开发人员可以自由选择对象的粒度被装备为MBean。 MBean可能代表最小的对象一个应用程序,或者它可以代表整个应用程序。 应用组件在设计时考虑到他们的管理界面通常可以写成的MBean。 没有a,MBeans也可以用作传统代码的包装器管理界面或作为具有传统管理界面的代码的代理。

2.1定义(Definition)

MBean是一个具体的Java类,包含以下工具:

  • 自己相应的MBean接口的实现或DynamicMBean接口的实现
  • 可选地,NotificationBroadcaster接口的实现

实现其自己的MBean接口的类称为标准MBean。这是开发新JMX时可用的最简单的工具类型可管理的资源。 实现DynamicMBean接口的MBean在本章中被指定为动态MBean,因为某些元素是它的仪器可以在运行时进行控制。

MBean实现的接口决定了它将如何开发,而不是如何管理。 JMX代理提供了处理这两种类型的抽象的仪器透明。 事实上,这两种类型的MBean都存在在JMX代理中进行管理,管理应用程序以类似的方式处理它们方式。

标准MBean的Java类公开要直接管理的资源通过它的属性和操作。 属性是暴露的内部实体通过getter和setter方法。操作是管理人员可以使用的其他类别的方法。所有这些方法都是在MBean中静态定义的界面,并通过自检对代理人可见。 这是最多的直接的方式使得新的资源易于管理。

从DynamicMBean接口开发Java类时,属性和操作通过方法调用间接暴露。 而不是内省,JMX代理必须调用一种方法来查找属性的名称和属性操作。 然后,当访问属性或操作时,代理将调用通用属性getter,setter或invocation方法,其参数是属性或名称的名称操作。 动态MBean使您能够快速测试现有资源和您想要管理的其他遗留代码对象。

2.1.1公共管理界面(Public Management Interface)

任何类型的MBean都不需要成为公共Java类。 然而,要可管理,MBean必须具有public management interface。 这个public management interface是标准MBean情况下的MBean自己的接口,或DynamicMBean接口,如果是动态MBean。

2.1.2 MBean公共构造函数(MBean Public Constructor)

无论是标准的还是动态的,MBean的Java类都可以选择为公共类,并有一个或多个公共构造函数。 一个MBean必须是一个具有公共构造函数的公共具体类如果要由JMX实例化从管理应用程序按需提供代理。
一个MBean可以有任意数量的构造函数,以允许代理执行一个实例。 MBean也可以有选择地使用任意数量的公共构造函数,所有这些都可以通过可以通过JMX代理进行管理的应用程序实例化这个MBean类。
MBean的公共构造函数可以具有任何类型的任意数量的参数。 它是开发人员和管理员的责任,以保证类所有参数类型在实例化时都可用于代理和管理器的MBean。
一个MBean可以省略所有的构造函数,并依赖于Java的默认构造函数编译器在这种情况下自动提供。默认构造函数不带参数,如果该类是公共的,则是公共的。Java编译器不提供默认的公共构造函数,如果任何其他构造函数被定义。
代码示例2-1显示了一个具有两个构造函数的简单MBean示例,其中之一这是公共构造函数。

CODE EXAMPLE 2-1 Constructors of the Simple MBean Example

public class Simple {
    private int state = 0;
    // Default constructor only accessible from subclasses
    //
    protected Simple() {
    }
    // Public constructor: this class is an MBean candidate
    //
    public Simple (int s) {
    state = s;
    }
    ...
}

2.2标准MBeans(Standard MBeans)

为了能够通过JMX代理进行管理,标准MBean明确定义了它management interface。management interface定义了句柄为管理而暴露的资源。 MBean的界面由它可用于读写属性和调用它的方法操作。
标准MBean依赖于一组命名规则,称为设计模式,必须这样做在定义他们的Java对象的接口时被观察到。 这些命名规则定义受JavaBeans™组件启发的属性和操作概念模型。 但是,JMX体系结构的实际设计模式会考虑到考虑MBean的继承方案以及词汇设计模式来识别管理界面。 因此,MBeans的设计模式是特定于JMX规范。
标准MBean的管理界面由以下部分组成:
  • Its constructors: 仅公开MBean类的公共构造函数
  • Its attributes: 通过getter和setter方法公开的属性
  • Its operations: MBean界面中显示的其余方法
  • Its notifications: MBean广播的通知对象和类型

如第40页的“MBean Public构造函数”中所述,构造函数是一个MBean的固有组件。 属性和操作是一个方法MBean,但它们由MBean接口标识,如下所述。该通过不同的接口定义MBean的通知:请参阅“JMX通知模型“(第54页)。

检查MBean接口并应用这些设计模式的过程如下称为自省(introspection.)。 JMX代理使用内省来查看方法和类的超类,确定它是否表示遵循设计的MBean模式,并识别属性和操作的名称。

2.2.1 MBean接口

标准MBean的Java类必须实现一个名为XXMBean的Java接口。 这个接口提到了属性的完整签名暴露的操作方法。 管理应用程序可以访问这些属性和操作。 管理应用程序无法访问MBean的Java类未在此界面中列出。
MBean的Java接口的名称是通过将MBean后缀添加到MBean的完全合格的Java类名称。 例如,Java类MyClass会实现MyClassMBean接口; Java类com.example.MyClass将实现com.example.MyClassMBean接口。 界面标准MBean被称为它的MBean接口。
根据定义,MBean的Java类必须实现其中的所有方法MBean接口。 它如何实现这些方法决定了它的响应管理运作。 MBean还可以定义任何其他方法,public或其他,它不会出现在它的MBean接口中。
MBean接口可以列出MBean中定义的方法以及方法MBean从它的超类继承。 这使MBeans能够扩展和仪器类的Java源代码不可访问。
一个标准的MBean也可以继承它的管理接口超类实现了一个以它自己命名的Java接口(超类)。 对于例如,如果MySuperClass是一个MBean,而MyClass则继承MySuperClassMyClass也是一个MBean。 如果MySuperClass是一个动态MBean,情况也是如此;MyClass也是动态的。 如果MyClass没有实现MyClassMBean界面,那么它将具有与MySuperClass相同的管理界面。否则,MyClass可以通过实现其管理界面来重新定义它的管理界面拥有MyClassMBean接口。
在这种情况下,MyClassMBean定义了管理界面,以及任何MySuperClass的管理界面被忽略。 但是,接口也可以扩展父接口,并且还考虑继承树中的所有方法。因此,MyClassMBean可以扩展MySuperClassMBean,允许MyClass扩展其母公司的管理界面。 有关如何更多信息MBean继承其管理接口,请参阅第50页上的“继承模式”。
不得不定义和实现一个MBean接口是一个主要的约束条件标准MBean,使其成为JMX可管理的资源。
从JMX 1.2规范开始,javax.management.StandardMBean类可以用于定义具有不一定名称的接口的标准MBean与MBean的类名相关。
2.2.1.1 MyClass示例MBean

代码示例2-2给出了一个基本的例子,明确定义了一个名为MyClass的MBean的管理界面。 其中的公共方法定义,getHidden和setHidden不会成为管理界面的一部分因为它们不出现在MyClassMBean界面中。

CODE EXAMPLE 2-2 MyClassMBean interface and MyClass Example

public interface MyClassMBean {
    public int getState();
    public void setState(int s);
    public void reset();
}

public class MyClass implements MyClassMBean {
    private int state = 0;
    private String hidden = null;
    public int getState() {
        return(state);
    }
    public void setState(int s) {
        state = s;
    }
    public String getHidden() {
        return(hidden);
    }
    public void setHidden(String h) {
        hidden = h;
    }
    public void reset() {
        state = 0;
        hidden = null;
    }
}

2.2.2词汇设计模式(Lexical Design Patterns)

属性和操作名称的词法模式依赖于MBean接口中的方法名称。 它们使JMX代理能够识别属性和名称操作暴露在标准MBean中进行管理。 他们也允许代理人区分只读,只写和读写属性。
2.2.2.1属性(Attributes)
属性是其管理中的MBean的字段或属性接口。 属性是离散的,命名为MBean的特性,它定义了它的属性外观或其行为,或者是被管理资源的特征MBean文书。 例如,在MBean中名为ipackets的属性代表以太网驱动程序可以被定义为表示数量传入数据包。
属性名称必须以一个字符开头Character.isJavaIdentifierStart是真的。 剩下的字符在Name.isJavaIdentifierPart也必须为true。
属性总是通过方法调用来访问拥有它们的对象。 对于可读属性,有一个getter方法来读取属性值。 对于可写属性,有一个setter方法允许更新属性值。

以下设计模式用于识别属性:

public AttributeType getAttributeName();
public void setAttributeName(AttributeType value);
如果一个类定义包含一对匹配的getAttributeName和setAttributeName方法获取并返回相同类型的这些方法定义一个名为AttributeName的读写属性。 如果一个类定义只包含一个这些方法,该方法定义了只读属性或只写属性。
AttributeName不能被重载,也就是说,不能有两个setter或agetter和setter对用于不同类型的相同名称。 一个东西重载的属性名称不符合MBean。 AttributeType可以是任何Java类型,包括数组类型,前提是这种类型在。中是有效的MBean的运行时环境或环境。
当属性的类型是数组类型时,getter和setter方法将运行在整个阵列上。 设计模式不包含任何getter或setter方法用于访问单个数组元素。 如果访问数组的单个元素是它必须通过MBean操作来实现。

另外,对于布尔类型属性,可以使用定义一个getter方法以下设计模式:

public boolean isAttributeName();
为了减少冗余,布尔类型的两个getter方法中只有一个是允许。 一个属性可以有一个isAttributeName方法或一个getAttributeName方法,但不能在同一个MBean中。
2.2.2.2操作(Operations)
操作是JMX可管理资源可用的操作管理应用。 这些操作可以是资源的任何计算公开,并且他们也可以返回一个值。
在标准MBean中,操作是在其接口中指定的Java方法在课堂上实施。 MBean接口中任何不适合的方法属性设计模式被认为是定义一个操作。
典型用法如代码示例2-2(第43页)中MBean公开的那样重置方法重新初始化其公开的属性和私人领域。 简单也可以编写操作来访问索引数组的各个元素属性。
2.2.2.3区分大小写(Case Sensitivity)
从这些设计模式派生的所有属性和操作名称都是区分大小写的。例如,这意味着方法getstate和setState定义两个属性,一个叫做只读状态,另一个叫状态是只写的。
区分大小写直接适用于标准MBean的组件名称,但是也适用于所有类型的MBean的所有组件名称,标准或动态。一般来说,所有类的名称,属性,操作,方法和内部JMX规范中定义的元素区分大小写,不管它们是否显示为数据或作为管理操作操纵的功能代码。

2.3动态MBean(Dynamic MBeans)

标准MBean非常适合简单的管理结构,被管理数据的结构事先已被很好地定义并且不太可能经常改变。 在这种情况下,标准MBean提供了最快最简单的方法以仪器管理资源。 当数据结构可能发展时通常随着时间的推移,仪器必须提供更多的灵活性,如存在在运行时动态确定。 动态MBean为此提供了适应性JMX规范并提供更详细的替代仪器管理能力。
动态MBean是通过预定义接口进行检测的资源仅在运行时才公开属性和操作。 而不是暴露他们直接通过方法名称,动态MBean实现一个返回的方法所有属性和操作签名。 例如,这个信息可能是通过在运行时读取XML文件来确定。
由于属性和操作的名称是动态确定的,这些MBean在处理现有资源时提供了极大的灵活性。 一个实现DynamicMBean接口的MBean提供了一个映射现有资源不遵循标准MBean设计模式。 代替自省,JMX代理调用MBean的方法,该方法返回该名称它暴露的属性和操作。
当通过JMX代理进行管理时,动态MBean提供了全部相同的功能通过标准MBean可用的功能。 管理应用程序依赖于JMX代理的操作可以以完全相同的方式操作所有MBean不管他们的类型如何。

2.3.1 DynamicMBean接口

对于由JMX代理将资源对象识别为动态MBean的情况,Java类或其一个超类必须实现DynamicMBean公共接口。
DynamicMBean接口由图2-1中的UML图定义。它定义的每种方法在下面的小节中都有描述。
«Interface» DynamicMBean
getMBeanInfo(): MBeanInfo
getAttribute( attribute:String ): Object
getAttributes( attributes:String[] ): AttributeList
setAttribute( attribute:Attribute ): void
setAttributes( attributes:AttributeList ): AttributeList
invoke( actionName:String,
params:Object[],
signature:String[] ): Object

FIGURE 2-1 Definition of the DynamicMBean Interface

getMBeanInfo Method

此方法返回一个MBeanInfo对象,其中包含该对象的定义MBean的管理界面。 从概念上讲,动态MBean具有两个属性和操作,只有它们不通过方法名称公开。 相反,动态MBean通过。公开属性名称和类型以及操作签名在运行时返回此方法的值。
此方法返回一个MBeanInfo对象,其中包含属性名称列表其类型,操作和参数列表以及其他管理信息。 这个类型及其组成类在“MBean中进一步描述元数据类“(第60页)。

getAttribute and getAttributes Methods

这些方法分别使用属性名称和属性名称列表返回相应属性的值。 这些就像一个标准的吸气剂方法,除了调用者提供所请求属性的名称。 这取决于实现动态MBean以正确映射公开的属性名称通过这些方法达到他们的价值。
用于表示属性名称和值以及名称列表的类和值在“属性和属性列表类”中描述这些数据类型也被下面的setAttribute方法使用。

setAttribute and setAttributes Methods

这些方法使用属性名称 - 值对,并且像标准的setter方法一样,他们将这些值写入相应的属性。 当设置几个属性,写入操作成功的属性列表是回。 只设置一个属性时,没有返回值,并且有任何错误通过举例说明信号。 再次,它是由实施的动态MBean将新值正确映射到内部表示他们预期的属性目标。

invoke Method

invoke方法允许管理应用程序调用任何操作由动态MBean暴露。 这里的来电者必须提供姓名预期操作,作为参数传递的对象,以及这些类型参数。 通过包含操作签名,动态MBean实现可以验证映射在请求之间是否一致操作以及暴露的内容。 它也可以选择具有的方法相同的名称但签名不同(重载的方法),但事实并非如此推荐的。
如果请求的操作已成功映射到其内部实现,则这一点方法返回操作的结果。 调用应用程序将期望在MBeanInfo方法中接收针对此操作公开的返回类型。

2.3.2动态MBean的行为(Behavior of Dynamic MBeans)

在JMX代理中注册时,动态MBean的处理方式完全相同作为标准MBean的方式。 通常,管理应用程序将首先获取通过getMBeanInfo方法管理接口,以获得名称属性和操作。 然后,应用程序将调用getter,setter和动态MBean的invoke方法。
实际上,动态MBean的接口与MBean服务器的接口非常相似在JMX代理中(请参阅第121页上的“MBean服务器的角色”)。 一个动态MBean提供了MBean服务器为标准提供的管理抽象的MBean。 这就是管理应用程序可以操纵两种MBean的原因没有区别:相同的管理操作适用于两者。
在标准MBean的情况下,MBean服务器使用内省来查找管理界面,然后调用经理请求的操作。 在里面动态MBean的情况下,这些任务由动态MBean接管实现。 实际上,MBean服务器委托自我描述功能添加到动态MBean的getMBeanInfo方法中。
2.3.2.1一致性(Coherence)
有了这个代表团的责任,确保了一致性动态MBean的描述及其实现。 MBean服务器不以任何方式测试或验证动态MBean的自我描述。 它的开发者必须保证广告管理界面被准确映射到内部实施。 有关描述MBean的更多信息,请参阅“MBean元数据类”(第60页)。
从经理的角度来看,动态MBean如何实现映射在声明的管理界面和返回的属性值之间运营结果并不重要; 它只是期待广告管理界面可用。 这为动态MBean构建提供了很大的灵活性更复杂的数据结构,暴露它可以脱机收集的信息,或者为未使用Java编程语言编写的资源提供封装。
2.3.2.2动态(Dynamics)
因为动态MBean的管理接口在运行时由getMBeanInfo方法,管理接口本身可以是动态的。 那对此方法的后续调用可能不会描述相同的管理接口。 应该注意的是getMBeanInfo方法可以改变。因此,可以在其中更改MBean接口的真正动态MBean是尽管它们只能由专有管理应用程序来管理专为处理它们而设计。
真正动态的MBeans只能在有限的情况下使用,因为一般来说,管理应用程序没有办法注意到界面已经改变。 开发人员实施这样的系统应该考虑如何它们在多个管理应用程序连接到系统时工作。竞争条件也需要考虑:例如,如果MBean发送一个通知说它的界面已经改变了,同时也是一个管理应用程序可能正在基于旧版本对MBean执行操作接口。
描述符字段(参见第60页)immutableInfo可用于显式声明MBean的管理界面是否会在其生命周期内发生变化。

2.4继承模式(Inheritance Patterns)

MBean的反省是JMX代理用于确定其过程的过程管理界面。 此算法在运行时由符合JMX的应用程序应用代理,但这里描述的是因为它决定了如何继承方案MBean会影响其管理界面。
在内省标准MBean时,管理接口由其MBean接口中使用的设计模式。 因为接口也可以扩展父接口,接口的继承树中的所有公共方法也是考虑。 内省动态MBean时,管理界面是通过DynamicMBean接口给出。 无论哪种情况,算法都会确定为给定资源公开的属性和操作的名称。

2.5 JMX通知模型(JMX Notification Model)

MBean的管理接口允许其代理对受管资源执行控制和配置操作。 但是,这些接口仅提供管理复杂的分布式系统所需的部分功能。 大多数情况下,管理应用程序需要对状态更改或特定条件作出反应,以防发生在基础资源中。

本节定义了一个允许MBeans广播这种管理事件的模型,称为通知。 管理应用程序和其他对象通过广播器MBean注册为侦听器。 JMX的MBean通知模型使侦听器只能注册一次,并仍能接收广播公司可能发生的所有不同事件。

JMX通知模型依赖于以下组件:

  • 通用事件类型Notification,可以表示任何类型的管理事件。 通知事件可以直接使用,也可以分类,具体取决于事件需要传达的信息。
  • NotificationListener接口,需要由请求接收由MBean发送的通知的对象实现
  • NotificationFilter接口,需要通过充当通知过滤器的对象来实现。此接口允许通知侦听器提供一个过滤器,以应用于由MBean发出的通知。
  • NotificationBroadcaster接口,需要由发出通知的每个MBean来实现。该接口允许监听者注册他们对由MBean发出的通知的兴趣。
  • NotificationEmitter接口,用于扩展NotificationBroadcaster以在删除侦听器时进行更多控制。

通过使用通用事件类型,此通知模型允许任何一个侦听器接收来自广播公司的所有类型的事件。 过滤器由侦听器提供,仅指定那些需要的事件。 使用过滤器,侦听器只需要注册一次即可接收MBean的所有选定事件。

任何类型的MBean(标准的或动态的)都可以是通知广播者,通知监听者,或者两者兼而有之。 通知过滤器通常实现为侦听器本身的回调方法,但这不是必需的。

2.5.0.1通知类型(Notification Type)

通知的类型,不要与其Java类混淆,是通用通知对象的表征。 该类型由广播者对象分配并传达特定通知的语义含义。

该类型以通知对象的字符串字段形式给出。 该字符串被解释为任意数量的点分离组件,在通知类型的命名中允许任意的用户定义结构。

所有以“JMX”为前缀的通知类型都保留用于本规范中定义的JMX基础结构组件(例如JMX.mbean.registered)发出的通知。 否则,通知广播公司可以自由定义它们在命名它们发出的通知时使用的所有类型。 通常,MBeans将使用类型字符串来反映它们所涉及的较大管理结构内的通知的性质。

例如,提供JMX可管理资源作为管理产品的一部分的供应商可能会将其所有通知类型添加到VendorName。 下面的图2-8显示了通知类型名称中的点符号引起的结构树形表示。

2.5.1通知类别(Notification Class)

Notification类扩展了java.util.EventObject基类,并定义了通知中包含的最少信息。 它包含以下字段:

  • 通知类型,用类似于Java属性的点表示法表示的字符串,例如:vendorName.resourceA.eventA1
  • 时间戳,指示何时生成通知
  • 包含在字符串中的消息,可能是通知的说明用于向用户显示
  • 用户数据用于通知广播公司与听众通信的任何其他数据

通知广播者使用通知类型向其听众指示事件的性质。 需要传送给监听者的附加信息放在消息或用户数据字段中。

在大多数情况下,这些信息足以让广播和听众交换通知类的实例。 但是,通知对象中需要额外的语义时,可以定义Notification类的子类。

2.5.2 NotificationBroadcaster和NotificationEmitter接口

该接口指定了MBean充当通知广播者必须实现的三种方法:

  • getNotificationInfo - 为潜在的监听者提供所有的描述 这个广播公司可以发出通知。 这个方法返回一个数组MBeanNotificationInfo对象,每个对象都描述一个通知。 对于有关此类的更多信息,请参阅“MBeanNotificationInfo类” 第65页。
  • addNotificationListener - 注册侦听器对发送的通知的兴趣通过这个MBean。 此方法引用NotificationListener对象,对NotificationFilter对象的引用,以及handback对象。
    手写对象在注册时由听众提供,并且是不透明的给广播公司MBean。 广播界面的实施必须存储此对象并将其引用返回给每个通知的侦听器。 这个handback对象可以允许侦听器检索上下文信息以供使用同时处理通知。
    同一个侦听器对象可以多次注册,每次都有一个不同的handback对象。 这意味着handleNotification的方法这个监听器将被多次调用,并且有不同的handback对象。
    MBean必须维护一个监听器,过滤器和handback三元组表。当MBean发出通知时,它会调用handleNotification所有注册的NotificationListener对象的方法,以及它们的相应的手动对象。
    如果侦听器在注册为a时指定了NotificationFilterNotificationListener对象,MBean将调用过滤器先通知isNotificationEnabled方法。 只有在过滤器返回肯定的情况下(真实)响应将广播者然后调用通知处理程序。
  • removeNotificationListener - 从通知中取消注册侦听器 广播。 如果听众已经与该广播公司多次注册过,与侦听器相对应的所有条目都将被删除。

任何类型的MBean都可以实现NotificationBroadcaster接口。 这个可能会导致一个标准MBean具有空管理的特例界面:其作为可管理资源的角色是成为通知的广播者。 它必须是一个具体的类,它必须实现一个MBean接口,在这个接口中案例没有定义方法。 同类中唯一的方法就是那些实现这些方法的方法NotificationBroadcaster接口。 这个MBean可以在JMX中注册代理及其管理界面仅包含可能的通知列表发送。

而不是NotificationBroadcaster,MBean可以实现其子接口NotificationEmitter,在JMX规范1.2版中引入。 它是建议新代码使用NotificationEmitter而不是NotificationBroadcaster中。 NotificationEmitter添加了第二个removeNotificationListener方法,指定过滤器和handback要删除侦听器的值。 如果听众注册了多次不同的过滤器和handback值,只有一个匹配的被删除。

代替实现NotificationBroadcaster或NotificationEmitter,一个MBean可以从标准的JMX类继承NotificationBroadcasterSupport。 这个类管理一个监听器列表,由addNotificationListener和removeNotificationListener方法。 它的sendNotification方法发送向过滤器接受它的列表中的所有侦听器发送通知。

2.5.3 NotificationListener接口

这个接口必须由所有有兴趣接收的对象来实现任何广播公司发送的通知。 它定义了一个独特的回调方法,handleNotification,广播器MBean在发出时调用它通知。

除了Notification对象之外,侦听器的handback对象作为一个handleNotification方法的参数。 这是对同样的参考反对者在注册时提供的对象。 它由广播公司存储每次通知都保持不变。

因为所有通知都以其字符串,通知侦听器为特征只实现一个处理器方法来接收来自所有潜在的所有通知广播。 然后这个方法依赖于字符串类型的其他字段通知对象并在handback对象上确定广播者和广播者通知的含义。

2.5.4 NotificationFilter接口

该接口由充当通知过滤器的对象实现。 它定义了一个独特的方法,isNotificationEnabled,这将被调用广播公司发出通知之前。 此方法采用通知反对广播机构打算发出的内容,并根据其内容返回真实性或者为false,表示听众是否会收到此通知。

过滤器对象由侦听器在注册通知时提供广播公司,所以每个听众都可以提供自己的过滤器。 广播员必须申请在调用handleNotification方法之前,每个侦听器的过滤器(如果已定义)相应的监听器。

监听器依靠过滤器来屏蔽所有可能的通知,并仅处理该通知那些他们感兴趣的。 一个对象既可以是侦听器又可以是过滤器实现NotificationListener和NotificationFilter接口。 在这种情况下,对象引用将给予侦听器和过滤器对象注册时与广播公司。

2.6属性更改通知(Attribute Change Notifications)

本节介绍特定的通知系列,属性更改通知,允许通知管理服务和应用程序每当给定MBean属性的值被修改时。

在JMX体系结构中,MBean完全负责发送发生属性更改时的通知。 检测变化的机制在属性中触发事件的通知不是JMX的一部分规范。 因此属性更改通知行为依赖于每个MBean的类的实现。

MBean不需要发送属性更改的信号,但是如果他们需要这样做的话JMX体系结构,它们依赖于以下组件:

  • 一个特定的事件类,AttributeChangeNotification,可以发信号给任何人 属性更改事件。
  • 特定的过滤器支持,AttributeChangeNotificationFilter,其中 允许属性更改通知监听器过滤通知 关注的属性。

否则,属性更改通知广播者和监听者都是由定义的与标准通知模型中的接口相同。 任何MBean发送属性更改通知必须实现NotificationBroadcaster接口,如如第54页的“JMX通知模型”中所述。同样,NotificationListener接口必须由感兴趣的所有对象实现接收由MBean发送的属性更改通知。

2.6.1 AttributeChangeNotification类

AttributeChangeNotification类扩展了Notification类和定义了以下附加字段:

  • 已更改的属性的名称
  • 已更改的属性的类型
  • 属性的旧值
  • 属性的新值

在实现属性更改通知模型时,广播者MBeans发送属性更改通知时必须使用此类。 他们也可以为其事件发送其他通知对象。 此类的其他字段向侦听器提供有关已更改属性的信息。该
所有属性更改通知的通知类型必须是jmx.attribute.change。 这种类型是由静态字符串定义的ATTRIBUTE_CHANGE在这个类中声明。

2.6.2 AttributeChangeNotificationFilter类

AttributeChangeNotificationFilter类实现了NotificationFilter接口并定义了以下附加方法:

  • enableAttribute - 为给定的属性名称启用通知。
  • disableAttribute - 过滤出给定属性名称的通知。
  • disableAllAttributes - 有效地禁用所有属性更改通知。
  • getEnabledTypes - 返回当前所有属性名称的列表启用接收通知

通知侦听者观察某些更改的属性可以实例化这个类,配置“启用”属性的集合,并在此时使用此对象作为过滤器注册为已知属性更改广播公司的收听者。 属性更改过滤器允许侦听器仅接收属性更改通知那些所需的属性。

2.7 MBean元数据类

本节定义了描述MBean的类。 这两个类同时使用用于标准MBeans的自省和所有动态的自我描述
的MBean。 这些类以MBean的形式描述了MBean的管理接口其属性,操作,构造函数和通知。

JMX代理通过MBean公开所有MBean,而不管它们的类型如何元数据类。 所有客户,无论是管理应用还是其他本地查看MBean的管理界面的MBean需要能够解释这些对象及其构造。 某些MBean可能会提供额外的数据扩展这些类(请参阅第71页上的“打开类型描述”和“MBean元数据类“)。

除了提供任何MBean的内部表示外,这些类还可以用于构建任何MBean的可视化表示。 一种方法
管理是通过一个管理者向操作员呈现所有可管理的资源图形用户界面。 为此,所有MBean的完整描述包括每个组件的描述性文字。 这些信息如何显示完全依赖于管理MBean的应用程序,并且在外面本规范的范围。

以下类定义了MBean的管理界面; 他们被提及统称为本文档中的MBean元数据类:

  • MBeanInfo - 列出属性,操作,构造函数和通知
  • MBeanFeatureInfo - 以下类的超类
  • MBeanAttributeInfo - 描述一个属性
  • MBeanConstructorInfo - 描述构造函数的签名
  • MBeanOperationInfo - 描述操作的签名
  • MBeanParameterInfo - 描述操作或构造函数的参数
  • MBeanNotificationInfo - 描述通知

所有这些类都包含一个描述符,它是(键,值)对的集合密钥是一个字符串。 几个键由JMX规范预定义。 对于例如,可以在描述符中添加单位密钥以表示属性什么单位的属性的价值是在描述符进一步定义第97页的4.4节“描述符”和API文档中的javax.management.Descriptor中。 对于标准MBean,其内容为描述符可以由标准MBean接口中的注释提供,如描述在javax.management.DescriptorKey的API文档中。

下面的UML图显示了这些类之间的关系每个组件。 以下各节详细介绍了每个课程。

2.7.1 MBeanInfo类

这个类用来完整地描述一个MBean:它的属性,操作,它的构造函数以及它可以发送的通知类型。 对于这些类别中的每一个,这个类为单个组件存储一组元数据对象。 如果是MBean在某个类别中没有组件,例如没有通知相应的方法返回一个空数组。

每个元数据对象都是一个包含特定于类型信息的类零件。 例如,属性的特征是它们的类型和读写
访问和操作的签名和返回类型。 所有组件都有一个区分大小写的名称和描述字符串。

除了每个组件类别的元数据对象数组之外,MBeanInfo类有三种描述性的方法。 getClassName方法返回一个字符串包含此MBean的Java类名称。 使用getDescription方法返回一个描述适合向用户显示的MBean的字符串GUI。 它描述了MBean的总体目的或功能。 getDescriptor方法作为一个整体返回此MBean的描述符。

在标准MBean的情况下,包含在MBeanInfo类中的信息由JMX代理的内省机制提供。 反思可以
确定MBean的组件,但它不能提供定性描述。 标准MBean的反思提供了一个简单的通用MBeanInfo对象及其所有组件的描述字符串。 因此,所有标准MBeans将具有相同的描述。 StandardMBean类提供了一种方法来添加自定义描述,同时保持方便标准的MBean设计模式。

对于动态MBean,开发人员有责任确保MBeanInfo对象及其所有组件的描述字符串都提供了正确的以及有关MBean的有用信息。

2.7.2 MBeanFeatureInfo类

该类不是由MBeanInfo对象直接返回的,但它是所有的父类其他组件元数据类。 所有后续对象的子类MBeanFeatureInfo并继承它的三个方法getName,getDescription,和getDescriptor。

getName方法返回一个带有组件名称的字符串。 这个名字是区分大小写并标识MBean中的给定组件。 例如,如果一个MBean接口公开getstate方法,它将由一个描述其继承的getName方法将返回的MBeanAttributeInfo对象“州”。

getDescription方法返回一个可供人阅读的字符串组件的解释。 在动态MBean的情况下,这个字符串必须是由开发人员提供。 例如,这个字符串必须适合显示通过管理应用程序的用户界面向操作员发送。

getDescriptor方法返回一个包含任意多余的描述符有关组件的信息。

2.7.3 MBeanAttributeInfo类

MBeanAttributeInfo类描述了MBean管理中的一个属性接口。 一个属性的特点是它的类型和访问方式。

属性的类型是调用它时用来表示它的Java类getter或setter方法。 getType方法返回一个完整的字符串此类的合格名称。 该字符串的格式与该字符串的格式相同由java.lang.Class类的getName方法返回。

有关此格式的完整说明,请参阅API文档由Javadoc工具为Java 2平台中的java.lang.Class类生成
标准版(J2SE)联机文档。 作为一个例子,一个数组java.util.Map类型表示为字符串“[Ljava.util.Map;”,和a字节的二维数组表示为字符串“[[B”。 非数组对象只是简单地给出它们的完整包名称,比如“java.util.Map”。

MBean访问是可读的,可写的或者两者兼而有之。 阅读权限意味着amanager可以获得这个属性的值,并写入它可以设置其值的访问权限:

  • 如果此属性中有一个getter方法,则isReadable方法将返回true 其MBean接口或者DynamicMBean的getAttribute方法 接口将以此属性的名称作为参数成功; 否则 将返回false。
  • 如果此属性中包含setter方法,则isWritable方法将返回true其MBean接口或者DynamicMBean的setAttribute方法 接口将以该属性的名称作为参数成功; 否则会 返回false。
  • 如果此属性具有布尔类型和a,则isIs方法将返回true 带前缀的getter方法(与get前缀相比); 否则会返回 假。请注意,此信息仅与标准MBean相关。

有关getter和setter的定义,请参见第44页的“词法设计模式”标准MBean中的方法。
注 - 根据此定义,访问信息不考虑任何读取或者写入对MBean开发人员的属性内部表示的访问可能通过其中一个操作提供。

2.7.4 MBeanConstructorInfo类

MBean构造函数完全由它们的签名来描述:它们的顺序和类型他们的参数。 这个类描述了一个构造函数并且包含一个方法,getSignature,它返回一个MBeanParameterInfo对象数组。 这个数组没有元素如果给定的构造函数没有参数。 参数数组的元素按照与构造函数参数相同的顺序列出,并每个元素都以相同顺序列出元素给出了其相应参数的类型(请参阅“MBeanParameterInfo类“)。

2.7.5 MBeanOperationInfo类

MBeanOperationInfo类描述了一个MBean的单独操作。操作由其签名,返回类型及其影响来定义。

getImpact方法返回一个可以使用静态映射的整数这个班的领域。其目的是传达这项行动将产生的影响
在由MBean代表的管理实体上。描述为INFO的方法将会不修改MBean,它是只返回数据的只读方法。一种行为方法对MBean有一些影响,通常是写操作或其他状态修改。 ACTION_INFO方法具有读取和写入角色。

UNKNOWN值保留用于描述标准的所有操作MBean,如MBean服务器所反思。影响信息对决策哪些操作非常有用在不同的时间暴露给用户。

它也可以被一些安全方案使用。它是
动态MBean开发人员负责分配每种方法的影响在其元数据对象中正确和一致。的确,差别“信息”和“行动”取决于每个MBean的设计和使用情况。

getReturnType方法返回一个包含完全限定类的字符串由所描述的操作返回的Java对象的名称。这个的格式字符串与由getName方法返回的字符串相同由java.lang.Class类生成的API文档所描述的J2SE联机文档中的Javadoc工具。

getSignature方法返回一个MBeanParameterInfo对象数组每个元素描述操作的参数。数组元素是按照操作参数的顺序列出,每个元素给出其相应参数的类型(见下文)。

2.7.6 MBeanParameterInfo类

MBeanParameterInfo类用于描述操作或参数的构造函数。 这个类给出了参数的类类型,并且扩展了这个参数MBeanFeatureInfo类提供名称和说明。

如第63页的“MBeanAttributeInfo类”中所述,getType方法返回一个包含此类的完全限定名称的字符串。 这个字符串的格式是与由.getName方法返回的字符串相同由java.lang.Class类生成的API文档所描述的J2SE联机文档中的Javadoc工具。

2.7.7 MBeanNotificationInfo类

MBeanNotificationInfo类用于描述是的通知由MBean发送。 该类扩展了MBeanFeatureInfo类以提供一个名称和描述。 该名称必须给出完全合格的类名实际广播的通知对象。

getNotifTypes方法返回一个包含通知的字符串数组MBean可以发出的类型。 通知类型是一个包含any的字符串点符号中的元素数量,而不是实现的Java类的名称这个通知。 如第54页中的“JMX通知模型”中所述,一个通知类可用于发送多种通知类型。 所有这些类型都是在由此方法返回的字符串数组中返回。

3.打开MBeans(Open MBeans)

本章定义了一种检测MBeans必须使用的资源的方法如果他们要对最广泛的管理应用程序“开放”,就应该遵守。这些MBean被称为开放MBean。

在JMX规范的1.0版中,打开的MBean未完整指定并且无法实施。 在版本1.1中,打开的MBeans是完全的指定但在实现中是可选的。 从1.2版开始,打开的MBean就是任何JMX实现的强制性部分。

3.1概述

开放MBeans的目标是提供一种允许管理的机制应用程序及其人员管理员了解并使用新的托管对象在运行时被发现。 这些MBeans被称为“打开”因为它们依赖于小的,预定义的通用Java类型集并进行广告宣传他们的功能。

管理应用程序和开放MBean因此可以共享和使用管理数据和运行在运行时无需重新编译,管理应用程序的重组或昂贵的动态链接。 在相同的方式,人类操作员可以智能地使用新发现的管理对象而无需查阅其他文档。 因此,开放的MBean有所贡献到管理系统的灵活性和可扩展性。

在管理应用程序没有的情况下,Open MBean特别有用必须有权访问代理的Java类。 通过只使用标准,自我描述类型,代理和管理应用程序可以无需互操作必须共享应用程序特定的类。

另外,由于开放MBean数据类型的集合是固定的,并且不包括自引用类型或子类化,打开的MBean甚至可以访问管理应用程序与代理之间的连接不支持Java序列化。 这是管理应用程序的一个重要案例采用Java以外的语言。

为了向管理应用程序提供自己的描述,一个开放的MBean必须是一个动态MBean(请参阅第46页的“动态MBeans”)。 超越DynamicMBean接口,没有相应的必须实现的“打开”接口。相反,MBean通过提供描述性丰富的元数据来获得其“开放性”并在其管理界面中仅使用某些预定义的数据类型。

一个开放的MBean具有属性,操作,构造函数和可能的通知像其他任何MBean一样。 它是一个具有相同行为和动态MBean的动态MBean相同的功能。 它也有责任提供自己的描述。但是,MBean所操作的所有对象类型,其属性类型及其类型操作参数和返回类型及其构造函数参数必须属于到下面第68页的“基本数据类型”中定义的集合。 这是开发者的完全使用这些数据类型来实施开放MBean的责任。

一个MBean通过它的MBeanInfo对象指示它是否打开回报。 Open MBean返回一个OpenMBeanInfo对象,它是MBeanInfo的一个子类。其他组件元数据类也是子类,它是开发者的负责使用适当的类来充分描述开放MBean。 如果MBean以这种方式被标记为公开的,这是管理层的保证符合JMX规范的应用程序可以立即使用全部属性和操作,而不需要额外的类。

由于打开的MBean也是动态MBean并提供它们自己的描述,MBean服务器不检查OpenMBeanInfo对象的准确性(请参阅“动态MBeans的行为”(第49页))。 开放MBean的开发人员必须保证管理界面依赖于基本的数据类型并提供一个丰富的,人类可读的描述。 作为一项规则,通过提供的描述开放MBean的各个部分必须适合通过a。向用户显示图形用户界面(GUI)。

3.2基本数据类型(Basic Data Types)

为了让管理应用程序立即使用MBean而不使用重新编译,重组或动态链接,所有MBean属性,方法返回值和方法参数必须限制为一组通用的数据类型。 这个set被称为打开MBean的基本数据类型。

另外,任何基本数据类型的数组或者一个基本类型的数组(对于示例byte [])可用于打开的MBean。 一个特殊的班级,javax.management.openmbean.ArrayType用于表示的定义开放MBean中的单个或多维数组。

以下列表指定了所有允许作为标量或任意维度的数据类型开放MBean中的数组:
• java.lang.Boolean • java.lang.Float
• java.lang.Byte • java.lang.Integer
• java.lang.Character • java.lang.Long
• java.lang.Double • java.lang.Short
• boolean[] • float[]
• byte[] • int[]
• char[] • long[]
• double[] • short[]
• java.lang.String • java.lang.Void (operation return
only)
• java.math.BigDecimal • java.math.BigInteger
• java.util.Date • javax.management.ObjectName
• javax.management.openmbean.CompositeData (interface)
• javax.management.openmbean.TabularData (interface)

所有基元类型的包装类都是定义和实现的Java虚拟机,以及BigDecimal,BigInteger和Date类。该
ObjectName类由JMX规范的实现提供。该CompositeData和TabularData接口用于定义聚合基本的数据类型,并提供一种机制来表达一个复杂的数据对象一致的方式。

因为CompositeData和TabularData对象也是基本数据类型,所以这些结构可以包含其他复合或表格结构并具有任意性复杂。 TabularData对象表示一个同构表CompositeData对象,管理域中非常常见的结构。该基本数据类型因此可以单独使用或组合使用以满足大多数数据代表性要求。

3.2.1表示复杂数据(Representing Complex Data)

本节介绍了这个规范中的两个非基元类型包括在一组基本数据类型中:CompositeData和TabularData。 这些两种类型被指定为接口并且由实现支持。

这些类表示打开的MBean中的复杂数据类型。 两种对象用于创建从原语构建的聚合结构数据类型和这些对象本身。 这意味着任何JMX代理或任何JMX兼容管理应用程序可以操纵任何打开的MBean并使用它它包含任意复杂的结构。

这两个接口和实现提供了一些要构建的语义结构来自基本数据类型的聚合。 CompositeData的实现
接口相当于一个散列表:通过给出名称来检索值期望的数据项目。 TabularData对象的实例包含一个数组CompositeData实例,可以通过提供唯一键来单独检索。CompositeData对象在实例化后是不可变的; 你不能添加项目它并且您不能更改现有项目的值。 表格是可修改的,并且行可以添加或从现有的实例中删除。

3.2.1.1复合数据接口和支持类(CompositeData Interface and Support Class)

CompositeDataSupport类定义了一个任意的不可变映射条目数量,称为数据项目,可以是任何类型。 遵守为开放MBean设计模式,所有数据项必须在一组中包含一个类型基本数据类型。 因为这个集合还包含CompositeData对象,因此很复杂层次结构可以通过创建包含其他类型的复合类型来表示复合类型。

在实例化CompositeDataSupport类时,用户必须提供CompositeType对象中复合数据对象的描述(请参阅“打开类型说明“(第71页))。 然后,通过构造函数提供的所有项目必须匹配这种复合类型的描述。 因为复合对象是不可变的,所有项目必须在实例化时提供,因此构造函数可以验证项目是否与描述相匹配。 getOpenType方法将返回此描述,以便与其交互的其他对象CompositeData对象可以知道它的结构。

CompositeData对象将字符串键与每个数据项的值相关联。然后,类的方法根据字符串搜索并返回数据项键。 枚举所有数据项也是可能的。

3.2.1.2 TabularData接口和支持类

TabularDataSupport类使用任意数字定义表结构可以由任意数量的列索引的行。 每一行都是CompositeData对象,但所有行必须具有相同的复合数据描述(CompositeType中)。 表中的列由数据名称开头构成统一CompositeData行的项目。 构造函数和用于添加行的方法验证所有行都由相同的描述CompositeData实例。

该索引由常用合成数据中的数据项子集组成结构,并要求这个子集必须是唯一的关键标识表格的每一行。 当表被实例化时,或者当一行是添加,这个类的方法必须确保索引可以唯一地标识所有的行。

构成每一行的组合对象的描述和项目列表构成索引的索引由getOpenType返回的表描述给出方法。 在TabularData接口中定义的此方法返回描述该表的TabularType对象(请参阅“打开类型描述”第71页)。

TabularData类的访问方法需要一个表示对象的数组一个索引一行并返回CompositeData实例的键值组成指定的行。 表中的一行也可以通过提供来删除它的关键价值。 表中的所有行也可以在枚举中检索。

3.2.2打开类型描述(Open Type Descriptions)

为了处理基本的数据类型,管理应用程序必须能够识别它们。 原始类型由它们的包装类名称和数组给出以标准方式表示(请参阅由生成的API文档用于java.lang.Class类的getName方法的Javadoc工具)。 然而,复杂的数据类型需要比扁平字符串更多的结构来表示它们内容。 因此,打开的MBean依赖于所有基本数据的描述类类型,包括用于描述复杂数据的特殊结构。

这些描述类统称为开放类型,因为它们描述开放的MBean基本数据类型。 抽象的OpenType类是
用于每种基本数据类型的专用开放类的超类。它定义了为该类型提供名称的常用方法,并给它一个
描述,并指定正在描述的实际类。 对于简单的类型,这些信息可能是多余的,即名称与类名相同。
对于复合类型,该信息允许用户命名复杂数据结构中的每个项目。 用户还应该给物品一个有意义的描述其他用户必须操作由此描述的组合数据实例类型。

SimpleType,ArrayType,CompositeType和TabularType类扩展OpenType类适应不同种类的基本数据类型。

原始类型和ObjectName类由。的实例描述在数组中不使用SimpleType类时。 这个类没有定义任何比它的OpenType超类更多的方法,它只为每个方法定义常量字段的原始类型(以及ObjectName类)。 这些领域本身就是SimpleType类的名称,描述和类名称的实例预定义。 这些常量避免了必须实例化并提供信息每次需要描述时,都要输入简单的类型。

ArrayType类提供了基本数据类型数组的描述。 它从OpenType类继承它的类型描述并添加有关其尺寸数量的信息。 ArrayType类也可以用于描述基本类型的数组,例如int []。

最后,复合和表格类型的打开类型提供了结构用于描述特定于打开的MBeans的这些聚合类型。 这些结构是递归的,也就是说,它们是从其他开放类型实例构建的。 对于复杂的结构,名称和描述继承自OpenType提供有关结构的整体信息。

CompositeType实例为其提供名称,描述和打开类型对象数据结构中的每个项目。 与CompositeData对象关联时(请参阅“CompositeData接口和支持类”(第70页)),复合类型描述复合数据的每个项目的开放类型。 这允许任何需要处理复合数据实例以了解如何操作的管理器处理每个组成部分。

同样,TabularType给出了操作a所需的描述TabularData对象(请参阅第71页的“表格数据接口和支持类”)。这包括描述每个组合结构的开放式实例行,以及此结构中索引表的项目名称列表。

3.3打开MBean元数据类(Open MBean Metadata Classes)

为了将打开的MBeans与其他MBean区分开来,JMX提供了一组元数据这些类专门用于描述打开的MBean。 这些类继承自MBeanInfo类及其组件。 MBeanInfo类完全如第60页的“MBean元数据类”中所述。本节讨论只有那些特别打开MBean的组件。

从本规范1.3版开始,使用这些类的替代方法是添加MBeanAttributeInfo,MBeanOperationInfo中描述符的某些字段,或MBeanParameterInfo。 openType字段指定一个开放类型属性,参数或操作返回值。 defaultValue,minValue,maxValue和legalValues字段指定的默认值和允许值属性,参数和operatino返回值。

javax.management.openmbean包中的以下接口定义了开放MBean的管理界面:

  • OpenMBeanInfo - 列出属性,操作,构造函数和通知
  • OpenMBeanOperationInfo - 描述操作的方法
  • OpenMBeanConstructorInfo - 描述构造函数
  • OpenMBeanParameterInfo - 描述一个方法参数
  • OpenMBeanAttributeInfo - 描述一个属性

对于上述每个接口,支持类都提供了一个实现和直接扩展MBean元数据类,其名称通过删除而给出
打开前缀。 这些类中的每一个都描述了一个公开的组件类别的MBean。 但是,打开的MBean没有特定的元数据对象通知:他们使用第65页中介绍的MBeanNotificationInfo类。

通过从其超类继承的方法打开MBean元数据对象描述了一个打开的MBean的管理界面。 超出此描述中,他们提供了返回所需额外信息的新方法打开MBean并返回新聚合数据类型的描述。 这个描述由OpenType类的适当子类给出。

由于开放式MBean是交换管理功能的通用方式,他们的描述必须足够丰富,以便操作员理解和使用他们的功能。 所有打开的MBean元数据类都继承getDescription方法必须返回一个非空字符串。 打开的MBean的每个组件必须使用这种方法来提供自身的描述,例如副作用操作或属性的重要性。 所有描述必须合适用于在GUI中向用户显示。

开放MBean模型允许开发人员提供的额外信息所有属性和所有操作的合法值列表和一个默认值参数。 该信息允许任何用户操纵新的或不熟悉的智能地打开MBean。

3.3.1 OpenMBeanInfo接口和支持类

OpenMBeanInfoSupport类提供了主要的信息结构描述一个开放的MBean。 它实现了OpenMBeanInfo接口和扩展了MBeanInfo类。 因此,它继承了用于指定类名称和整体MBean描述的方法。 它也继承了返回的方法通知元数据对象数组,因为通知以相同的方式描述至于动态MBean。

但是,该类覆盖了描述每个类别的所有其他方法MBean组件:属性,操作和构造函数。 他们的新
实现仍然描述给定类别的所有组件,但它们现在依赖在打开的MBean元数据类上。 由于每个打开的MBean元数据对象是原始元数据对象的子类,每个方法返回一个数组子类型来描述一个开放的MBean。 每个开放的MBean元数据类以下各节将介绍组件的类别。

3.3.2 OpenMBeanOperationInfo和OpenMBeanConstructorInfo接口和支持类

OpenMBeanOperationInfoSupport和OpenMBeanConstructorInfo-支持类实现其相应的接口并扩展MBeanOperationInfo和MBeanConstructorInfo类,分别(请参阅他们的定义在第63页)。 前者描述了一个开放MBean的操作,而后者描述了它的一个构造函数。

这两个类都会覆盖它们各自的getSignature方法超类,同样只是用开放的MBean元数据来描述它们的参数对象。 getSignature方法名义上返回一个数组MBeanParameterInfo对象,但两种实现实际上都会返回一个数组OpenMBeanParameterInfo实例的类将在下一节中描述部分。

OpenMBeanOperationInfo接口指定getReturnOpenType方法。 打开的MBean元数据使用此方法提供描述该方法实际返回的开放类型类。 例如,如果返回类型实际上是一个复杂的数据对象,此方法返回一个CompositeType或TabularType实例,用于描述数据结构返回类型。 当返回类型是Java基元类型之一时,就是这个信息与getReturnType方法的结果是多余的。 但是,通过返回相应的SimpleType实例,这种方法可以让管理人员对待所有的问题开放类型均匀。

只有OpenMBeanOperationInfo接口指定getImpact方法,并且在打开MBean的情况下,它不能返回UNKNOWN。 这意味着所有实例化时,操作必须标识为ACTION,INFO或ACTION_INFO其元数据对象。 开放的MBean开发人员有责任分配每项操作的影响正确。 getImpact方法提供信息给用户关于操作的副作用,作为其自我描述的补充。

3.3.3 OpenMBeanParameterInfo和OpenMBeanAttributeInfo接口和支持类

OpenMBeanParameterInfoSupport和OpenMBeanAttributeInfo-支持类实现其对应的接口扩展MBeanParameterInfo和MBeanAttributeInfo类,分别参见它们的定义在第64和63页)。 前者描述了一个参数操作或构造函数,后者描述打开的MBean的属性。

因为这些类特定于打开的MBean,所有参数和属性类型由继承的getType方法返回的结果必然是基本数据之一类型。 为了描述复杂的数据类型,两个接口都指定了getOpenType方法,它返回描述的OpenType子类参数或属性。 这允许管理应用程序处理所有打开类型,包括必须由ArrayType描述的复杂数据结构,CompositeType或TabularType实例。

打开的MBean属性元数据继承isReadable,isWritable和isIs用于定义属性访问。 这些方法都没有被覆盖,因此具有与超类相同的功能。

这两个类还定义了getDefaultValue和getLegalValues方法提供有关参数或属性的附加信息。 这些方法在每个班级中具有完全相同的功能。

getDefaultValue方法用于指示a的可选默认值给定参数或属性。 在运行时,它返回一个必须是的对象赋值与由getType方法命名的类型相同参数或属性描述对象。 默认值可用于初始化一个属性或当操作的调用者没有时提供参数值特别喜欢某些参数。 它可以为null。

getLegalValues方法用于返回可选的可选列表给定参数或属性的值。 它返回一个Object数组,元素它必须与由getType方法命名的类型兼容相同的参数或属性描述对象。 法律价值可以用来在编辑可写属性或填写时向用户提供选项列表操作参数。 对于可读属性,此方法提供了一个合法列表可以预期的值。 如果提供了一组合法值,那么这些方法实现DynamicMBean接口必须验证写入的任何值属性或用于此参数的属性是此组的成员。 如果getLegalValues返回null,那么所有赋值兼容值都是合法的。

3.4开放MBean需求总结(Summary of Open MBean Requirements)

总而言之,开放的MBean必须具备以下属性:

  • 它必须完全实现DynamicMBean接口。
  • 所有属性,方法参数和非void返回值必须是中的对象开放MBean的一组基本数据类型,由一个实例描述 适当的OpenType子类。
  • getMBeanInfo方法的实现必须返回一个实例实现OpenMBeanInfo接口的类。 这个对象必须完全 使用开放MBean元数据对象描述MBean组件。
  • 以下所有方法必须返回有效且有意义的数据(非空 字符串)适合显示给用户:
    • OpenMBeanInfo.getDescription
    • OpenMBeanOperationInfo.getDescription
    • OpenMBeanConstructorInfo.getDescription
    • OpenMBeanParameterInfo.getDescription
    • OpenMBeanAttributeInfo.getDescription
    • MBeanNotificationInfo.getDescription
  • OpenMBeanOperationInfo.getImpact的实例必须返回其中一个常量值ACTION,INFO或ACTION_INFO。 值UNKNOWN不能 用过的。

    注 - 与其他动态MBean一样,MBean服务器不验证正确使用打开的MBean元数据类。 这取决于MBean开发人员的确保合成数据和表格数据的所有元数据都提供了一致的默认值价值观,法律价值和指标。开发人员还必须确保所有MBean组件都充分以有意义的方式描述给目标用户。 这种质量要求不能以编程方式强制执行。

4.模型MBean(Model MBeans)

MBean模型是一个通用的,可配置的MBean,任何人都可以使用它进行测试几乎任何资源都很快。 Model MBean也是动态MBean实现本章中指定的接口。 这些接口定义结构在实现时,提供一个具有默认值的可实例化MBean可配置的行为。

此外,Java管理扩展指定了一个模型MBean实现必须作为所有符合条件的JMX代理的一部分提供。 意即资源,服务和应用程序可以依赖于泛型的存在用于创建可管理对象的模板。 用户只需要实例化一个模型MBean,配置默认行为的暴露,并注册到一个JMX代理。 这显着减少了获得编程负担可管理性。 开发人员可以根据JMX来测试他们的资源只需三至五行代码即可完成。

仪器MBeans是通用的,因为仪器是保证将会有适合所有人的模型MBean实现Java管理扩展的环境。

4.1概述

模型MBean规范是一组提供管理的接口管理资源的模板。 它也是一组具体的课程与JMX代理结合使用。 JMX代理必须提供一个实现名为javax.management.modelmbean.RequiredModelMBean的类。 这个模型MBean实现旨在提供易用性和广泛性仪器的默认管理行为。

MBean服务器是模型MBean的存储库和工厂,因此托管资源从JMX代理程序获取其模型MBean对象。 管理资源开发人员不必提供他们自己的这个类的实现。相反,资源被编程为在其中创建和配置其模型MBean运行时,动态检测它需要公开的管理接口。

要管理的资源将自定义属性,操作和通知添加到基本模型MBean对象,通过与JMX代理和模型MBean进行交互代表资源。 可以有一个或多个模型MBean的实例资源(应用程序,设备等)的每个实例都将在其中进行管理系统。 模型MBean是一个动态MBean,意思是它实现了DynamicMBean接口。 因此,JMX代理委托所有管理对模型MBean实例的操作。

模型MBean实例与其他JMX代理一样由JMX代理创建和维护MBean实例。 实例化模型MBean的托管资源不会必须意识到模型MBean实现的细节。环境之间的实现差异包括JVM,持久性,事务行为,缓存,可扩展性,吞吐量,位置透明度,可远程性等等。 RequiredModelMBean实现将始终如此可用,但可以有可用的模型MBean的其他实现,取决于安装JMX代理的环境的需要。

例如,在Java 2 Platform,Micro Edition(J2ME™)上运行的JMX代理程序,环境可以提供没有持久性的RequiredModelMBeanremoteability。 运行在支持Java的应用程序服务器的JVM中的JMX代理程序2平台企业版(J2EE™)技术可以提供一个RequiredModelMBean处理持久性,交易,远程访问,位置透明度和安全性。 在任何一种情况下,仪器程序员的任务是一样的。 MBean开发人员不必提供他们的不同版本MBeans适用于不同的Java环境,也不需要编写特定的Java环境。

模型MBean将与其JMX代理合作,将被实现支持其自身的持久性,事务性,位置透明度和可定位性,如适用于其环境。 仪器开发人员不需要开发具有自己的事务和持久性特征的MBean。 他们只是在JMX代理中实例化模型MBean并相信该模型MBean实现适用于当前JMX代理的环境存在。

模型MBean的任何实现都必须实现ModelMBean该接口扩展了DynamicMBean,PersistentMBean和ModelMBeanNotificationBroadcaster接口。 模型MBean必须在扩展MBeanInfo的ModelMBeanInfoSupport对象中公开其元数据并实现ModelMBeanInfo接口。 模型MBean实例发送性更改通知和管理的通用通知应用程序可以听。 模型MBean具有默认构造函数和a带有ModelMBeanInfo实例的构造函数。

模型MBean信息包括每个属性的描述符,构造函数,操作和通知的管理界面。 描述符是必不可少的模型MBean的组件。 它包含动态的,可扩展的和可配置的每个MBean组件的行为信息。 这包括但限于日志记录策略,通知响应,持久性策略,值缓存策略。最重要的是,模型MBean的描述符提供了之间的映射管理界面中的属性和操作以及实际方法需要调用以满足获取,设置或调用请求。

从本规范的1.3版开始,描述符出现在所有MBean类型中,而不是只是模型MBeans。

允许方法与属性关联允许动态的运行时代表团。 例如,getAttribute(“myApplStatus”)调用实际上可以在另一个作为其一部分的对象上调用myAppl.StatusChecker方法管理资源。 对象myAppl可以位于此JVM中,也可以位于其他位置这台主机或另一台主机上的JVM取决于模型MBean的存在方式通过其描述符进行配置。 这样,分布式,动态和支持可配置模型MBean。

ModelMBean接口扩展了DynamicMBean接口。该DynamicMBean方法的实现使用描述符中的策略指导如何满足要求。 如何做到这一点在更详细的描述第93页的“DynamicMBean实现”。

ModelMBean接口还扩展了特定于的PersistentMBean接口模型MBeans。 这个接口的加载和存储方法是负责的分析和遵守描述符中的持久性策略。该可以在MBean级别和属性级别指定持久性策略。这些方法在适当时由模型MBean实现调用本身,而不一定是托管资源或管理应用程序。实现可以选择不支持任何实际的直接持久化,这种情况下这些方法什么都不会做。 但是,如果持久性不是实施,将引发异常。

4.1.1通用通知(Generic Notifications)

ModelMBean接口扩展了ModelMBeanNotificationBroadcaster接口。 这个接口定义了一个发送任何的sendNotification方法通知对象给所有注册的监听者。 它也重载了sendNotification方法接受文本消息并将其包装在通知中称为类型jmx.modelmbean.generic的Generic。 这使得它更容易管理资源以表明重要事件以及信息事件。最后,这个接口还提供了发送属性更改的方法通知模型MBean的实现负责。

4.1.2与托管资源的互动(Interaction with Managed Resources)

当通过模型MBean检测受管资源时,它使用ModelMBeanInfo接口公开其预期的管理接口。 在初始化时,受管资源通过.net访问JMX代理MBeanServerFactory类的静态findMBeanServer方法(请参阅“MBean服务器工厂“)。 托管资源将创建或查找和使用实例化引用模型MBean的一个或多个实例,createMBean,getObjectInstance或queryMBeans方法。 预定义的作为模型MBean名称一部分的属性意味着建立一个独特的属性管理资源(MBean)标识。

受管资源然后使用其管理配置模型MBean对象接口。 这包括它的自定义属性,操作和通知需要管理应用程序通过JMX代理进行访问。 资源因此可以在执行时动态确定特定信息。该管理资源集并将任何类型的数据更新为模型中的属性MBean随时调用一个setAttribute方法。该属性现在已发布供任何管理系统使用。

MBean模型具有用于存储属性值的内部缓存机制这是由管理资源提供的。 保持相当静态的值模型MBean中的属性允许它在不调用的情况下返回该值管理资源。 该资源还可以将其模型MBean设置为禁用缓存,这意味着只要访问属性就会调用资源。 在这大小写,被调用的资源被调用,并返回属性值给模型MBean。 反过来,模型MBean将这些值返回给MBean服务器,将它们返回给请求发起者,通常是管理应用程序。因为模型MBean可以是持久的并且是可定位的,但是是临时的受管资源可以保留任何所需的计数器或状态信息JMX代理。 同样,如果支持持久性,则为托管资源的数据如果JMX代理被回收则存活。

模型MBean实现了NotificationBroadcaster接口。一通过托管资源发送在模型MBean上发送Notification API调用通知给所有“感兴趣的”管理系统。预定义或唯一通知可以发送给由托管资源定义的任何重要事件管理系统。这些通知必须记录在ModelMBeanNotificationInfo对象。通知通常由a发送当需要操作员干预或应用程序的状态时管理资源是不可接受的。通知也可以基于MBean生命周期,属性发送更改或信息原因。模型MBean发送属性更改通过模型MBean设置自定义属性时的通知。该托管资源可以捕获管理系统发起的变更请求通过侦听属性更改通知。托管资源可以然后选择实现从模型MBean到属性的更改资源。

4.1.3与管理应用程序的交互(Interaction with Management Applications)

管理应用程序访问模型MBean的方式与访问方式相同动态或标准MBean。 但是,如果经理了解模型MBean它将能够从属于该描述符的描述符中获得更多信息模型MBean。 这个额外的元数据使得任意的更容易管理控制台来理解和处理被管理的资源作为模型MBean进行装备。 与任何MBean,管理应用程序一样将通过。的方法“找到”JMX代理和模型MBean对象MBean服务器。

然后经理可以通过JMX代理与模型MBean进行交互。 它通过提供的MBeanInfo查找可用的属性和操作受管资源。 对于模型MBean,经理可以找出行为细节关于支持的属性,操作和通知ModelMBeanInfo和描述符接口。 像任何其他MBean一样,属性是通过MBean服务器的getter和setter方法以及操作进行访问通过它的invoke方法。 由于模型MBean是通知广播公司,管理通知可以添加为任何通知或属性的侦听器更改受管资源的通知。

4.2模型MBean元数据类(Model MBean Metadata Classes)

模型MBean的管理接口由其ModelMBeanInfo来描述实例。 模型MBean的getMBeanInfo方法(由DynamicMBean接口)必须返回也是MBeanInfo的扩展支持ModelMBeanInfo接口。 ModelMBeanInfo接口返回ModelMBeanAttributeInfo,ModelMBeanOperationInfo,ModelMBeanConstructorInfo和ModelMBeanNotificationInfo实例。这些类扩展了没有使用相同名称的MBean元数据类型号前缀。

MBean元数据类的模型MBean扩展实现了描述符访问接口。 这允许替换每个描述符属性,构造函数,操作和通知。该通过每个组件的元数据对象访问描述符。

4.2.1描述符接口(Descriptor Interface)

描述符定义了特定于模型的行为和运行时元数据的MBean。 描述符数据保存为一组字段,每个字段都由一个名称值组成对。 描述符接口必须由类实现代表一个描述符。 DescriptorAccess接口定义了如何获取和从模型MBean元数据类中设置Descriptor。 描述符接口描述了如何与返回的描述符实例进行交互通过DescriptorAccess接口。 请参阅“预定义的描述符字段”第102页有关必须有效的字段名称和值的讨论支持的。

JMX规范包含这个接口的两个标准实现ImmutableDescriptor和DescriptorSupport。 大多数应用程序将使用一个而不是自己实现描述符接口。

Descriptor «Interface»
clone(): Object
getFieldNames(): String[]
getFieldValue( fieldName: String ): Object
getFieldValues( fieldNames: String[] ): Object[]
getFields(): String[]
setField( fieldName: String, fieldValue: Object )
setFields( fieldNames: String[], fieldValues: Object[] )
removeField( fieldName: String )
isValid(): boolean

这些方法的含义在API生成的文档中有解释Javadoc工具,这个规范伴随着。 介绍了一个简短的总结在下表中。

表4-1描述符接口方法
方法 描述
getFieldNames返回字符串数组中描述符的所有字段名称
getFieldValue(s)在描述符中查找给定的字段名称并返回它(他们)的价值。
setField(s)在描述符中查找给定的字段名称并设置它(他们)提供的价值。
getFields以字符串数组形式返回描述符信息,每个都有fieldName = fieldValue格式。 如果该字段值为null,那么该字段被定义为fieldName =。removeFields从描述符中移除描述符字段。克隆返回一个新的描述符实例,它是一个重复的实例描述符。
isValid 如果此描述符对其有效,则返回true descriptorType字段。
toString 返回包含描述符的可读字符串信息。

4.2.2描述符访问接口(DescriptorAccess Interface)

该接口必须由ModelMBeanAttributeInfo实现,ModelMBeanConstructorInfo,ModelMBeanOperationInfo和ModelMBeanNotification类。

DescriptorAccess «Interface»
getDescriptor(): Descriptor
setDescriptor( inDescr: Descriptor )

这些方法的含义在API生成的文档中有解释Javadoc工具,这个规范伴随着。 介绍了一个简短的总结在下表中。

表4-2描述符访问接口方法
方法 描述
getDescriptor 返回与该关联的描述符的副本元数据类
setDescripto r替换与元数据类关联的描述符与通过的一个副本。这是一个完整的替代品,不是合并。

4.2.3 ModelMBeanInfo接口

ModelMBeanInfo接口最初定义为允许关联一个描述符与模型MBean,属性,构造函数,操作和通知元数据类。 这个描述符被用来定义行为特征模型MBean实例。 既然描述符存在于所有类型的MBean中,那么ModelMBeanInfo接口的主要兴趣是它增加了方法从包含的元数据对象中检索特定类型的描述符。 什么时候DynamicMBean接口的getMBeanInfo方法在模型上调用MBean,它必须返回实现ModelMBeanInfo的类的实例接口。

JMX规范包含一个称为此接口的标准实现的ModelMBeanInfoSupport。 大多数应用程序将使用此而不是自己实现ModelMBeanInfo接口。

ModelMBeanInfo «Interface»
clone(): Object
getMBeanDescriptor(): Descriptor
setMBeanDescriptor( inDescriptor: Descriptor )
getDescriptor( inDescriptorName: String, inDescriptorType: String ): Descriptor
getDescriptors (inDescriptorType: String ): Descriptor[]
setDescriptor( inDescriptor: Descriptor, inDescriptorType: String )
setDescriptors( inDescriptors: Descriptor[] )
getAttribute( inAttrName: String ): ModelMBeanAttributeInfo
getNotification( inNotifName: String ): ModelMBeanNotificationInfo
getOperation( inOperName: String ): ModelMBeanOperationInfo
getAttributes(): MBeanAttributeInfo[]
getNotifications(): MBeanNotificationInfo[]
getOperations(): MBeanOperationInfo[]
getConstructors(): MBeanConstructorInfo[]
getClassName(): String
getDescription(): String

4.2.4 ModelMBeanInfo实现

ModelMBeanInfo实现的要求如下:

  • 它必须扩展MBeanInfo类。
  • 它必须实现ModelMBeanInfo接口。
  • 它的getAttributes,getConstructors,getOperations和getNotifications方法必须返回ModelMBeanAttributeInfo,ModelMBeanConstructorInfo,ModelMBeanOperationInfoModelMBeanNotificationInfo数组,分别。
  • ModelMBeanAttributeInfo,ModelMBeanConstructorInfo, ModelMBeanOperationInfo和ModelMBeanNotificationInfo类 返回必须扩展它们各自的MBeanAttributeInfoMBeanConstructorInfo,MBeanOperationInfo和 MBeanNotificationInfo类。
  • ModelMBeanAttributeInfo,ModelMBeanConstructorInfo,ModelMBeanOperationInfo和ModelMBeanNotificationInfo类返回必须实现DescriptorAccess接口。 这个接口 将可配置的Descriptor对象与元数据类相关联。该 描述符允许定义MBean组件的行为策略。
  • 但是,建议它实现以下构造函数JMX规范的实现不必检查:
    ……
  • 它必须实现以下模型MBean特定的方法:
    ……
  • 它必须实现ModelMBeanInfo中指定的以下方法接口,但与MBeanInfo类的接口相同(请参阅“MBeanInfo类”第61页):
    ……

4.2.5 ModelMBeanAttributeInfo实现

ModelMBeanAttributeInfo必须扩展MBeanAttributeInfo类并实现DescriptorAccess接口。 描述访问接口添加了将Descriptor替换为基本功能的功能MBeanAttributeInfo类。

该描述符必须具有与getName给出的名称相匹配的名称字段相应元数据对象的方法。 它必须有一个描述符类型与值“属性”。 它也可以包含以下定义的字段:值,默认值,displayName,getMethod,setMethod,protocolMap,persistPolicy,persistPeriod,currencyTimeLimit,lastUpdatedTimeStamp,visibility和presentationString。 看到“属性描述符字段”(第104页)中有关这些字段的详细描述领域。

ModelMBeanAttributeInfo类必须具有以下构造函数:

  • 接受名称,描述,getter方法和setter方法的构造函数 它将描述符设置为一个默认值,至少包含名称和descriptorType字段设置。
  • 构造函数接受名称,描述,getter方法,setter方法和至少具有名称和descriptorType字段的描述符实例。
  • 构造函数接受名称,类型,说明,isReadable,isWritable,并且isIs布尔参数使用at将描述符设置为默认值 至少要设置名称和descriptorType字段。
  • 接受名称,描述,isReadable,isWritable和的构造函数 isIs布尔参数和至少有名称的Descriptor实例 和descriptorType字段设置。
  • 接受ModelMBeanAttributeInfo对象的拷贝构造函数。

4.2.6 ModelMBeanConstructorInfo实现

ModelMBeanConstructorInfo必须扩展MBeanConstructorInfo类并实现DescriptorAccess接口。 描述访问接口添加了将Descriptor实例替换为基础的功能MBeanConstructorInfo类的功能。

该描述符必须具有与getName给出的名称相匹配的名称字段相应元数据对象的方法。 它必须有一个描述符类型与“操作”的值和“构造函数”的角色。 它也可以包含定义的字段为displayName,visibility和presentationString。 看到“操作描述符字段”(第105页)中有关每个字段的详细说明领域。

ModelMBeanConstructorInfo类必须具有以下构造函数:

  • 接受设置描述和构造器对象的构造器 描述符设置为默认值,并至少设置name和descriptorType字段。
  • 接受描述的构造函数,构造函数对象和描述符 至少具有name和descriptorType字段集的实例。
  • 接受名称,描述和MBeanParameterInfo的构造函数 数组,它将描述符设置为默认值,至少包含名称和descriptorType字段设置。
  • 接受名称,说明,MBeanParameterInfo数组和a的构造函数至少具有名称和descriptorType字段的描述符实例。
  • 接受ModelMBeanConstructorInfo对象的拷贝构造函数。

4.2.7 ModelMBeanOperationInfo实现

4.2.8 ModelMBeanNotificationInfo实现

4.3 Model MBean规范

所有JMX代理都必须具有调用的模型MBean的实现类javax.management.modelmbean.RequiredModelMBean中。该RequiredModelMBean和任何其他兼容模型MBean必须遵守有以下要求:

  • 实现扩展以下接口的ModelMBean接口:
    • DynamicMBean
    • PersistentMBean
    • ModelMBeanNotificationBroadcaster
  • 从DynamicMBean的getMBeanInfo方法中返回一个对象 界面:
    • 实现ModelMBeanInfo接口
    • 扩展MBeanInfo
    • 从getAttributes返回ModelMBeanAttributeInfo对象 方法
    • 从getConstructors返回ModelMBeanConstructorInfo对象 方法
    • 从getOperations返回ModelMBeanOperationInfo对象 方法
    • 从。返回ModelMBeanNotificationInfo对象 getNotifications方法
  • 具有以下构造函数:
    • 具有空参数列表的默认构造函数
    • 接受ModelMBeanInfo的构造函数

4.3.1 ModelMBean接口

基于Java技术的资源需要可管理的实例化RequiredModelMBean或使用MBean的其他符合模型的MBean服务器的createMBean方法,作为参数传递ModelMBeanInfo(包括其描述符)用于ModelMBean实例。 属性和通过ModelMBeanInfo为模型MBean公开的操作可以访问其他MBeans和管理应用程序。 通过ModelMBeanInfo可以定义托管应用程序中的描述符,值和方法映射到模型MBean的属性和操作。 这个映射可以在开发过程中定义在文件中,或者以动态和编程方式在运行。

ModelMBean接口扩展了DynamicMBean,PersistentMBean和ModelMBeanNotificationBroadcaster及其独特的方法由定义下面的UML图。

4.3.2 ModelMBean实现

以下部分描述了ModelMBean接口的方式由兼容模型MBean实现,特别是它是如何实现的通过RequiredModelMBean类。 这结合了两者的含义方法和实现细节。

setModelMBeanInfo(带有ModelMBeanInfo)
此方法创建模型MBean以反映给定的ModelMBeanInfo接口。将Model MBean的ModelMBeanInfo对象设置为提供的ModelMBeanInfo对象。使用。初始化ModelMBean实例ModelMBeanInfo传入。模型MBean必须实例化,但尚未注册到MBean服务器。仅在模型MBean的ModelMBeanInfo及其描述符对象之后如果将模型MBean注册到MBean服务器,那么它们是自定义的。

setManagedResource(带有ManagedResourceObject,Type)
此方法将模型MBean的托管资源属性设置为提供的对象。设置所有对象的实例MBean管理接口(元数据和描述符)中的操作。字符串字段对托管对象的目标对象类型进行编码资源。这可以是:ObjectReference,Handle,IOR,EJBHandle或RMIReference。一个实现必须支持ObjectReference,但不需要支持另一个类型。它也可以定义特定于实现的类型。如果MBean服务器无法处理给定的目标对象类型,则此方法将会执行抛出一个InvalidTargetTypeException.If的targetObject字段操作的描述符被设置并且是有效的,则它覆盖托管资源设置该操作的调用。

4.3.3 DynamicMBean实现

DynamicMBean接口定义了以下方法:

  • getMBeanInfo
  • getAttribute和getAttributes
  • setAttribute和setAttributes
  • 调用

这些方法的描述在第47页的“DynamicMBean接口”中给出。在这里,我们定义模型MBean实现如何表示功能界面的每种方法。

getMBeanInfo方法
此方法返回实现了的ModelMBeanInfo对象ModelMBean的ModelMBeanInfo接口。 有效的属性,构造函数,操作和受管资源定义的通知可以从中检索带有getOperations的ModelMBeanInfo,getConstructors,getAttributes和getNotifications方法。
ModelMBeanInfo实例返回ModelMBeanOperationInfo,ModelMBeanConstructorInfo,ModelMBeanAttributeInfo和ModelMBeanNotificationInfo数组,分别。 这些类扩展MBeanOperationInfo,MBeanConstructorInfo,MBeanAttributeInfo和MBeanNotificationInfo,分别。 这些扩展必须实现DescriptorAccess接口,用于设置和返回与之关联的描述符每个这些元数据类。 ModelMBeanInfo也维护一个描述符对于模型MBean,称为MBean描述符。

getAttribute和getAttributes
这些方法被调用来从这个实例中获取属性信息ModelMBean实现同步。 支持属性的模型MBean值缓存将在此方法中执行缓存检查和刷新。 模型MBean缓存策略已设置,并将值缓存在每个描述符中属性。 如果模型MBean支持描述符的getMethod字段(当为属性请求获取时,分配要调用的操作)那么此方法将调用该操作并将其结果作为属性返回值。 否则,如果在描述符中定义了一个值字段,并且它不是“陈旧”的如下所述,它的内容被返回。 否则,如果没有值或getMethod描述符字段被定义,返回默认字段。 如果没有默认值定义则返回null。
如果支持缓存,则将使用以下算法。 该模型MBean将检查属性值是否过时。 过时是由…决定的
currency描述符中的currencyTimeLimit和lastUpdatedTime字段属性的ModelMBeanAttributeInfo对象中。 如果currencyTimeLimit为0,那么价值将永远不会陈旧。 如果currencyTimeLimit是-1,那么值将会是总是陈旧。
如果模型MBean中的值已设置并且没有陈旧,那么它将返回此值而无需在托管资源上调用任何方法。 如果属性值是过时,那么模型MBean将调用getMethod中定义的操作属性描述符的字段。 此调用返回的值将是作为当前值存储在模型MBean中。 lastUpdatedTime将是重置为当前时间。 如果getMethod没有被定义,并且值是陈旧的,那么将返回该属性的描述符的默认值。

setAttribute和setAttributes
调用这些方法来为该实例的属性设置信息ModelMBean实现同步。 模型MBean将调用操作定义在属性描述符的setMethod字段中。 如果不setMethod操作被定义,然后只有属性的值字段描述符将被设置。 在新属性值所在的位置调用此方法不匹配当前属性值导致AttributeChangeNotification生成。
如果模型MBean支持缓存,则新的属性值将被缓存在描述符的值字段中,如果currencyTimeLimit字段是描述符不是-1。 lastUpdatedTime字段将随时设置字段已设置。

invoke
invoke方法将执行使用参数传入的操作名称根据DynamicMBean接口传入。该方法将被调用模型MBean的托管资源(由setManagedResource设置)方法)。如果描述符的targetObject字段已设置并且值为targetType字段对于实现有效,则该方法将被调用取而代之的是targetObject的值。 targetType的有效值包括,但不限于,ObjectReference,Handle,IOR,EJBHandle和RMIReference。如果支持操作缓存,则操作的响应将被缓存如果操作的描述符的值和lastUpdatedTimeStamp字段操作描述符中的currencyTimeLimit字段不是-1。如果invoke是为一个方法执行,并且值字段不包含陈旧值,那它将被返回并且实际上不会执行关联的方法。这是真的即使调用参数与生成的参数不相同缓存值。如果这不适合操作,则不得使用缓存。
RequiredModelMBean类扩展了这些语义。如果方法名和提供给invoke的签名对应于公共方法RequiredModelMBean类本身,并且该方法在MBeanInfo中列出,那么该方法被调用。否则,行为如上所述。

4.3.4 PersistentMBean接口

此接口由所有MBean模型实现。 如果模型MBean不是持续或不负责自己的持久性,那么这些方法可能会做没有。 如果模型MBean实现不支持持久性,那么这些方法会抛出异常。 PersistentMBean的方法界面不打算由管理应用程序直接调用。相反,它们被所需的模型MBean调用来实现持久性策略通过MBean描述符进行广告,达到JMX支持的级别代理的运行时环境。

PersistentMBean «Interface»
load()
store()

  • load 将MBean定位到持久性存储中并填充MBean的此实例 与存储的值。 任何当前设置的值都会被覆盖。 这只应该 由ModelMBean接口的实现调用。
  • store 将MBean写入持久存储区。 它只被一个实现所调用 ModelMBean接口根据持久性策略存储自身 的MBean。 使用时,可以在每次调用setAttribute或。时调用它 定期进行。

4.3.5 ModelMBeanNotificationBroadcaster接口

该接口扩展了NotificationBroadcaster接口并且必须是由需要广播自定义,泛型或属性的任何MBean实现将通知更改为侦听器。 模型MBean必须实现这个接口。

在模型MBean中,AttributeChangeNotifications被发送到不同的集合的听众对其他通知将要发送到的人。 所有其他通知都去了给使用在。中定义的方法注册的听众NotificationBroadcaster接口。 AttributeChangeNotifications是也发送给那些听众,但除此之外他们还发送给听众添加使用addAttributeChangeNotificationListener。

模型MBean将AttributeChangeNotification发送给所有已注册的通知侦听器,只要模型MBean中的属性的值发生更改发生。 默认情况下,不会发送AttributeChangeNotification,除非a监听器明确地为他们注册。 通常,模型上的setAttributeMBean调用为受管资源上的属性定义的set方法直。 或者,托管资源可以使用属性更改通知触发实施预期效果的内部行动; 即他们改变模型MBean上的属性值。
……

4.3.6 ModelMBeanNotificationBroadcaster实现

ModelMBeanNotificationBroadcaster接口扩展了NotificationBroadcaster接口的addNotificationListener和removeNotificationListener方法。 以下方法是特定的打开MBeans。

  • addAttributeChangeNotificationListener:将实现NotificationListener接口的对象注册为a监听此MBean的AttributeChangeNotifications。
  • removeAttributeChangeNotificationListener从MBean中移除AttributeChangeNotifications的侦听器。
  • sendAttributeChangeNotification(带 AttributeChangeNotification)将给定的AttributeChangeNotification对象发送给所有已注册的对象 听众
  • sendAttributeChangeNotification(带有新旧属性)创建并发送一个AttributeChangeNotification给所有注册的 听众。
  • sendNotification(带通知)将给定的Notification对象发送给所有注册的侦听器。
  • sendNotification(带字符串)创建类型为jmx.modelmbean.generic的名为“generic”的通知 并将其发送给所有注册的监听者。 通知的来源是这样的ModelMBean实例,序列1和严重性5(资料性)。

4.4描述符(Descriptors)

ModelMBeanInfo接口发布关于属性,操作等的元数据。和管理界面中的通知。 模型MBean描述符包含行为信息和关于同一管理界面的政策。 一个描述符由一组字段组成,每个字段都是一个字符串名称和对象值对。 它们可以用来存储任何关于这个的附加元数据管理信息。 受管资源或管理应用程序可以在运行时添加,修改或删除任何模型MBean描述符中的字段。

一些标准字段名称在本规范中是保留和预定义的处理常见的数据管理策略,如缓存和持久性。该描述符还包含属性的getter和setter操作的名称。这使得应用程序可以自然地分配属性支持应用程序,而不管类,并在运行时更改该责任。

描述符是实现Descriptor接口的对象。 他们是可通过DescriptorAccess界面中定义的方法访问和
在ModelMBeanAttributeInfo,ModelMBeanOperationInfo,ModelMBeanConstructorInfo和ModelMBeanNotificationInfo类。通过ModelMBeanInfo实例访问这些类的数组。 每一个这些返回一个描述符,其中包含有关该组件的信息描述。 托管资源可以通过以下方式定义描述符中的值构造一个ModelMBeanInfo对象并使用它来定义它的模型MBean通过setModelMBeanInfo方法或通过ModelMBean构造函数。

4.4.1属性行为(Attribute Behavior)

对于一个属性,如果ModelMBeanAttributeInfo中的描述符没有方法签名与之关联,那么就没有托管资源方法可以被调用来满足它。 这意味着对于setAttribute而言,值很简单记录在描述符中,并且任何属性更改通知侦听器都会发送一个AttributeChangeNotification。 对于getAttribute,为当前值模MBean中的属性只是从描述符及其值中返回无法从托管资源中刷新。 这可以用于最小化为静态资源信息管理资源中断。 属性描述符还包括管理其持久性,缓存和协议的策略映射。 对于操作,必须定义方法签名。 对于通知,可选地定义类型,标识,严重性和日志记录策略。

4.4.2通知记录策略(Notification Logging Policy)

如果MBean描述符或ModelMBeanNotificationInfo描述符的日志字段设置为true,则模型MBean将记录通知。 日志文件字段还必须在这些级别之一中使用完全限定的文件名来定义以指示应该记录通知的地方。 在的设置ModelMBeanNotificationInfo级别将优先于设置在MBean描述符级别。 如果ModelMBean实现或JMX代理确实如此不支持日志记录,那么日志和日志文件字段将被忽略。

4.4.3持久性策略(Persistence Policy)

持久性政策可以作为一个选项来实施。 持久性在内部处理模型MBean。 但是,这并不意味着模型MBean必须这样做本身实现持久性。 JMX代理的不同实现可以有不同程度的持久性。 当没有持久性时,对象将会是本质上完全是短暂的。 在一个简单的实现中,ModelMBeanInfo可以序列化成一个平面文件。 在更复杂的环境中,持久性可以是由实例化模型MBean的JMX代理处理。 如果JMX代理不是暂时的,模型MBean是应该支持的持久化属性级别和模型MBean级别的持久性策略。

持久性策略可以关闭持久性,强制检查点持久性间隔,允许它在每次更新模型MBean时发生,或者节制更新持久性,以便它不会更频繁地写出信息超过一定的时间间隔。 如果模型MBean在一个环境中执行管理操作是交易性的,这应该被屏蔽掉资源。 如果托管资源必须知道该事务,那么这将会意味着托管资源取决于JMX代理的专有版本并为MBean建模,以使资源可访问。

支持持久性的ModelMBean实现将尝试启动本身在MBean服务器中注册时,通过调用ModelMBean.load方法。 这个方法必须确定哪里的持久表示找到MBean,检索它并初始化模型MBean。 为了更简单表示,可以定义用于持久性的目录和文件名直接在MBean描述符的persistLocation和persistName字段中。模型MBean可以通过JDBC™(Java数据库连接)操作,将数据写入并填充来自任意数量数据存储的模型MBean诸如LDAP服务器,数据库应用程序,平面文件,NFS文件等选项FAS文件或内部高性能缓存。

加载方法允许JMX代理独立并且不知道数据区域信息和知识。 这允许数据位置从一个变化
根据JMX代理和受管资源的具体情况,安装到另一个环境安装和配置。 它也允许管理资源配置数据
在目录服务中定义以供多个托管资源实例使用或JMX代理程序实例。 这样,数据区域设置对交互没有影响在受管资源,其模型MBean,JMX代理,适配器或管理系统。 与所有数据持久性问题一样,平台数据服务特性会对性能和安全性产生影响。

因为可以在模型MBean属性级别设置持久性策略,所有或一些模型MBean属性可以被ModelMBean存储。 该模MBean会检测到它已更新并调用其自己的存储方法。 如果模型MBean服务被配置为定期检查点模型MBean,它将通过调用ModelMBean.store方法来实现。 像加载方法一样,存储方法必须确定数据应该驻留的位置并将其存储在那里适当。

JMX代理的持久性设置将应用于其所有模型MBean,除非其中之一他们定义了压倒一切的政策。 模型MBean持久性策略提供了一个指定的持久性事件(更新/检查点)和时间粒度有关如何存储指定的属性(如果有的话)。 模型MBean持久性政策将允许坚持“每当更新”的基础上,一个“周期性”检查点“基础或”永不停留“基础。 如果没有模型的持久性策略MBean被定义,那么它的实例将是暂时的。

4.4.4缓存值的行为(Behavior of Cached Values)

属性或操作的描述符包含缓存值和默认值数据的价值以及缓存策略。 通常,适配器访问应用程序的ModelMBean,因为它由JMX代理返回。 如果要求的数据通过适配器是当前的,受管资源不会被数据中断检索请求。 因此,与托管资源的直接交互不是与管理系统的每次交互都需要。 这有助于最小化管理活动对运行时应用程序资源和性能的影响。

属性描述符包含currencyTimeLimit和以秒为单位表示的lastUpdatedTimeStamp字段。 如果当前时间已过去lastUpdateTimeStamp + currencyTimeLimit,然后是属性值陈旧。 如果currencyTimeLimit是-1,那么属性值是总是陈旧。 如果currencyTimeLimit为0,那么该属性值永远不会陈旧。

如果接收到一个具有陈旧值(或没有值)的属性的getAttribute描述符,那么:

  • 如果该属性有getMethod,它将被调用并返回值将被记录在属性的描述符的值字段中。该lastUpdatedTimeStamp将被重置,并且调用者将被交给新的值。
  • 如果没有定义getMethod,则默认值为默认值在属性的描述符中将被返回。

4.4.5协议映射支持(Protocol Map Support)

模型MBean的默认行为和简单的API可满足管理需求大部分应用程序。 但是,模型MBean的接口也允许复杂管理资源管理场景。 模型MBean API允许将应用程序的模型MBean属性映射到现有的管理数据模型例如,通过协议映射字段中的特定MIB或CIM对象描述。 相反,托管资源可以利用通用映射到由与JMX交互的工具生成的MIB和CIM对象剂。 例如,MIB生成器可以与JMX代理交互并创建一个MIB文件由SNMP管理系统加载。 生成的MIB文件可以表示JMX代理已知的资源。 代表的应用程序这些资源不必认识管理数据如何映射到MIB。 这种情况也适用于其他需要的定义文件管理系统。

属性描述符的protocolMap字段必须包含对一个的引用实现Descriptor接口的类的实例。 内容(或映射)必须适合该属性。 中的条目协议映射可以在运行时更新或增强。

4.4.6导出策略(Export Policy)

如果JMX代理实现支持多JMX代理中的操作环境,那么JMX代理将需要宣传它的存在和可用性使用适当的目录或查找服务。 JMX代理可能也需要无需预先注册需要从其他JMX代理定位的MBean了解MBean当前注册的JMX代理。的MBean需要在这种类型的环境中定位需要定义一个导出字段其ModelMBeanInfo对象中的MBean描述符。

导出字段的值是导出文件所需的外部名称或对象MBean适当。 如果JMX代理不支持与a的互操作
目录或查找服务,并且定义了导出字段,那么该字段将是忽略。 如果导出字段的值是F或false,或者导出字段是未定义或为空,那么MBean将不会被导出。

4.4.7可见性策略(Visibility Policy)

JMX规范中的Model MBeans为开发人员提供了受管资源具备仪器可管理性的能力,支持其定制,独立,领域经理以及可互换的企业经理。 然而,从这些类型的管理人员处获得的详细程度可能非常显着不同。 企业管理者可能希望与更高级别的管理层进行交互对象。 域管理员通常管理应用程序的所有细节。 最管理系统在用户界面屏幕上显示大颗粒物体并显示在详细或高级屏幕上的小颗粒物体。 中的可见性字段描述符是关于MBean,属性或操作所表示的粒度级别的暗示。 可见性字段可以被自定义的a实现使用协议适配器或连接器,或由管理系统过滤出MBean,属性或不需要表示的操作。

可见性字段的值是从1到4的整数。最大的谷物是1,MBean或几乎总是可见的组件。 最小的谷物是4,对于只在特殊情况下才可见的MBean或组件。 JMX规范不会进一步定义这些级别。

4.4.8表达行为(Presentation Behavior)

PresentationString字段可以在任何描述符中定义。 这个字符串是一个XML格式的字符串意味着向控制台提供提示,以便它可以生成用于管理对象的用户界面。 一组标准的演示文稿字段尚未定义。

4.5预定义的描述符字段(Predefined Descriptor Fields)

每个描述符中的字段描述关于模型的标准和自定义信息MBean组件。 指定每个描述符的所有预定义字段下面。 这里定义的字段标准化,以便管理工具在模型MBean的实现之间是可移植的。 更多领域可以在管理解决方案中定义,以根据需要存储自定义信息。

字段名称不区分大小写。 字段描述符类型也可以被引用描述为DescriptorType或DESCRIPTORTYPE。 描述符所使用的情况创建或更新被保留。 建议这里显示的表单是一贯使用。

某些字段值也是不区分大小写的。 这是真的值的descriptorType,persistPolicy,targetType和日志字段。

4.5.1 MBean描述符字段(MBean Descriptor Fields)

这些是MBean描述符的预定义字段。 这些值适用于整个模型MBean。 这些值可以用描述符字段覆盖在属性,操作或通知级别定义相同的名称。 可选的字段用斜体表示:

name- MBean的区分大小写的名称。
descriptorType - 总是包含值“MBean”的字符串。
displayName - 可显示的属性名称。 在没有价值的情况下,价值应该使用名称字段。
persistPolicy - 为此MBean中的属性定义默认持久性策略那没有定义自己的persistPolicy。 采取以下值之一:
- Never- 该属性从不存储。这对于高度不稳定的数据或 数据只在会话或执行期间内有意义。
- OnTimer - 只要模型MBean的持久性就存储该属性 在persistPeriod字段中定义的计时器到期。
- OnUpdate - 每次更新属性时都会存储属性。
- OnUnregister - 该属性在MBean未注册时存储 MBean服务器
- NoMoreOftenThan - 每次更新时都会存储该属性,除非是 更新比persistPeriod更接近。这起到更新的作用调节机制有助于防止暂时性高度不稳定的数据 影响性能。
- Always- 这是OnUpdate的同义词,可以识别兼容性原因。建议应用程序使用OnUpdate 代替。 Descriptor接口的实现,例如 DescriptorSupport,可以选择替换为“Always”的值 persistPolicy的值为“OnUpdate”。

persistPeriod - 仅在persistPolicy字段的值为OnTimer或。时有效NoMoreOftenThan。 对于OnTimer,属性存储在每个开头persistPeriod从值第一次设置开始。 对于NoMoreOftenThan,该属性将在每次更新时存储,除非persistPeriod具有自上次存储以来未经过。 这个字段的值是一个数字秒,指定为十进制整数字符串。
persistLocation - 表示文件的完全限定目录存储持久MBean(用于此参考实现)。 对于他人这个值的实现可以是一个关键字或值来帮助适当的持久性机制。
persistName - 存储此MBean的文件名。 这应该是与MBean的名称相同(对于此参考实现)。 对于他人实现,这个值可以是关键字或值来协助适当的持久性机制。
log- 布尔值,其中true表示所有发送的通知都记录到文件中,而false表示不会进行通知记录。 这个设置可以通过定义通知中的日志字段来覆盖特定的通知描述。
logFile - 记录通知的完全限定文件名。 如果记录是true并且logFile未定义或无效,则不执行日志记录。
currencyTimeLimit - 从属性值的时间段(以秒为单位)目前而不是陈旧。 如果保存的值是当前值,则返回该值,并返回该值getMethod(如果已定义)不被调用。 如果currencyTimeLimit是-1,那么必须在每个请求中检索值。 如果currencyTimeLimit为0,那么价值永远不会陈旧。 该字段的值是秒数,指定为a十进制整数串。
export- 它的值可以是任何可序列化并包含信息的对象MBean的位置是必需的。 值为null或F或String的字符串值假,表明MBean不应该暴露给其他JMX代理。 一个定义的值表示该MBean应该暴露给其他JMX代理和当JMX代理地址未知时也可以找到。 如果导出MBeans和MBean服务器不受支持,则该字段将被忽略。
visibility - 整数从1到4设置,表示粒度级别的MBean。 值为1表示大粒度和经常查看的MBeans。 一个4的值是最小的谷物,可能是最少查看的MBeans。此值可以由适配器或管理应用程序使用。
presentationString - 描述属性将如何的XML编码字符串被呈现。

4.5.2属性描述符字段

属性描述符表示模型的其中一个属性的元数据的MBean。 可选字段以斜体显示:

name - 属性的区分大小写的名称。
descriptorType - 始终包含值“attribute”的字符串。值 - 此字段的值是表示当前值的对象属性,如果设置。 实际上,这是该属性的缓存值如果currencyTimeLimit不是陈旧的,则返回。
default - 如果未设置值,则返回的对象getMethod未定义。
displayName - 属性的可显示名称。
getMethod - 要用于检索的操作描述符的操作名称来自受管资源的属性值。 返回的对象被保存在值字段中。
setMethod - 要用于设置的操作描述符的操作名称受管理资源中属性的值。 新的价值也将被保存在值字段。
protocolMap - 此字段的值必须是Descriptor对象。它包含了一组协议名称和映射的协议值对。这允许属性与一个特定的标识符(CIM模式,SNMP MIB Oid等)相关联特定协议。该描述符由托管资源设置并由该托管资源使用适配器作为向管理应用程序呈现此属性的提示。
persistPolicy - 为此属性定义持久性策略。如果定义,这覆盖MBean描述符中的persistPolicy。可能的值和他们的含义与MBean描述符中的persistPolicy相同,如第103页所述。
persistPeriod - 此字段的含义与persistPeriod相同在第103页介绍的MBean描述符中。
currencyTimeLimit - 此字段的含义与MBean描述符中的currencyTimeLimit,详见第104页。
lastUpdatedTimeStamp - 值字段最后的时间戳更新。该字段的值是由等同于代码创建的字符串
Long.toString(System.currentTimeMillis的())。
visibility - 从1到4的整数集,指示MBean的粒度级别属性。值为1的是大颗粒和最常见的MBean属性。值4是小颗粒和最少查看的MBean属性。此值可以由适配器或管理应用程序使用。
presentationString - 描述属性如何的XML编码字符串呈现。

4.5.3操作描述符字段

操作描述符表示模型MBean的操作的元数据。可选字段以斜体显示:
name- 区分大小写的操作名称。
descriptorType - 始终包含值“operation”的字符串。
displayName - 显示操作的名称。
value - 上一次操作返回的值执行。 这允许缓存操作响应。 操作反应是只有在currencyTimeLimit字段不是-1时才被缓存。
currencyTimeLimit - 值为当前值的时间段,以秒为单位不陈旧。 如果该值是当前值,则返回而不实际调用该值方法在受管资源上。 如果值过时,则调用该方法。 如果currencyTimeLimit为-1,那么该值始终是陈旧的并且不会被缓存。 如果currencyTimeLimit为0,那么该值永远不会陈旧。 这个字段的值是秒数,指定为十进制整数字符串。
lastUpdatedTimeStamp - 更新值字段的时间戳。该字段的值是由等同于代码创建的字符串Long.toString(System.currentTimeMillis的())。
visibility - 从1到4的整数集,指示MBean的粒度级别操作。值为1的是大颗粒和最常见的MBean操作。值4是最小的粒度和最少查看的MBean操作。此值可以由适配器或管理应用程序使用。
presentationString - 定义如何呈现的XML编码字符串操作,参数和返回类型给用户。
targetObject - 此方法的调用所针对的资源。这个覆盖由指定的受管资源作为整体的MBean的ModelMBean.setManagedResource方法。
targetType - 由targetObject定义的资源的类型。一切实现必须识别ObjectReference类型,在那里调用MBean操作导致调用具有相同名称和参数的方法targetObject上的类型。实现也可以识别预定义的类型ObjectReference,Handle,IOR,EJBHandle和RMIReference作为实现定义的类型。

4.5.4通知描述符字段

通知描述符表示模型通知的元数据的MBean。 可选字段以斜体显示:
name- 通知的区分大小写的名称。
descriptorType - 始终包含值“notification”的字符串。严重性 - 0到6的整数范围解释如下:

  1. • Unknown, Indeterminate
  2. • Non recoverable
  3. • Critical, Failure
  4. • Major, Severe
  5. • Minor, Marginal, or Error
  6. • Warning
  7. •Normal, Cleared, or Informative
    messageId - 通知的ID。 通常用于检索文本以匹配ID最小化消息大小或执行客户端翻译。
    log - 一个布尔值,如果此通知记录到文件则为true,否则为false。通过定义日志,可以为MBean的所有通知设置默认值字段在MBean描述符中。
    logFile - 记录通知的完全限定文件名。 如果日志是true,但logFile未定义或无效,将不执行日志记录。 这个通过定义中的logFile字段,设置也可以具有MBean范围的默认值MBean描述符。
    presentationString - 描述如何呈现的XML编码字符串通知给用户。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特点:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent Class和ClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的类库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值