Apache Geronimo 构建在一个支持 JMX 框架的通用反向控制 (IoC) 内核之上,它监管称为 Geronimo Beans (GBeans) 的托管组件的集合。Geronimo 是以 JMX 作为底层内核结构来创建的,因此与 JMX Managed Beans (MBeans) 有几分相似。Apache Geronimo 结构随时间发生细微的变化,因为它使用 JMX 作为定位对象、对象间通信、方法拦截等方面的框架,所以该框架被看作是 JMX 的延展。然而,Geronimo 架构中很明显仍然存在遗留的 JMX,特别是在 GBean 框架中。
JMX 已成为管理 Java 平台、Java 2 Platform、Enterprise Edition (J2EE) 和 Java Enterprise Edition (Java EE) 中资源的实际标准。JMX 定义了一个使用用于管理目的的属性和操作来动态编制 Java 类、接口和运行时对象的标准。JMX 可以编制和管理可使用 Java 编程语言进行抽象的所有资源(如应用程序、设备或服务)。所有托管资源被称为 MBean。JMX 定义四种类型的 MBean:
标准 MBean:使用 Java 接口来定义其管理属性和操作。
动态 MBeans:使用运行时发现 (runtime discovery) 来定义其管理属性和操作。
模型 MBeans:充当公开可管理操作和属性的对象的代理。
开放 MBeans:使用预定义的元数据词汇表来公开类和对象的可管理属性和操作。
与 MBeans 交互的主要接口是 javax.management.MBeanServer。MBeanServer 充当 MBeans 的中心仓库,并协助从客户端与 MBeans 的通信。MBeans 由 ObjectName 实例惟一识别,其组成部分包括:
一个域:一个给定域的任意名字。按照惯例,建议使用反向网域名称系统 (DNS) 来对域进行命名,命名的方式与 Java 包命名相同。
一个键属性列表:键及其关联值的一个任意、无序的集合。
构造一个典型 ObjectName,如下所示:
String domain = "com.jeffhanson.test";
String keyPropertyList = "Name=TestBean,Type=GenericService";
ObjectName objName = new ObjectName(domain + ":" + keyPropertyList);
您可以使用 ObjectName 实例作为大多数 MBeanServer 方法的参数,在 MBean 上检索属性和调用操作。例如,您可以通过获取 MBean 服务器的引用,在服务器上调用 invoke 方法来调用 MBean 操作。在获得对 MBean 服务器的引用时,ObjectName 表示 invoke 方法的目标对象,同时操作名称作为第二个参数传递给 invoke 方法,该参数后面是 MBean 服务器查找和调用正确 MBean 所需的其他信息。Geronimo 仍然使用 ObjectName 实例引用大多数调用 GBeans 的方法中的 GBeans。
JMX 以及它与 Geronimo 的 GBean 框架的关系
实际上在 Geronimo 中的每一个有意义的对象都是一个 GBean。Geronimo 的内核以及 Geronimo 平台中实例化的其他有意义的对象都被编制成 GBeans,并作为 JMX MBeans 公开,因此支持 JMX 的工具可以对它们进行管理。这样,您就可以使用标准门户、仪表板和控制台来管理和监视 Geronimo 的运行实例。
Geronimo 中的 GBeans 通过 GBeanInfo 类来公开属性、动作和通知,并将该信息传播给 JMX MBeanInfo 类。图 1 展示了 Geronimo 和 JMX 关系的高级视图。
图 1. Geronimo 和 JMX 的关系
表 1 显示了 Geronimo GBeans 和 JMX MBeans 的相似之处。
表 1. Geronimo GBeans 和 JMX MBeans 的相似之处
目的 | MBeans 使用 | GBeans 使用 |
保留操作、属性、通知和托管资源的构造函数的数据结构 | MBeanInfo 结构 | GBeanInfo 结构 |
封装有关托管资源的构造函数的信息 | ConstructorInfo 结构 | GConstructorInfo 结构 |
封装有关托管资源的操作的信息 | MBeanOperationInfo 结构 | GOperationInfo 结构 |
封装有关托管资源的属性的信息 | MBeanAttributeInfo 结构 | GAttributeInfo 结构 |
封装有关托管资源的通知和事件的信息 | MBeanNotificationInfo 结构 | GNotificationInfo 结构 |