WEB开发网
开发学院软件开发Java 使用 JMX 管理 Apache Geronimo 阅读

使用 JMX 管理 Apache Geronimo

 2010-04-23 00:00:00 来源:WEB开发网   
核心提示:Apache Geronimo 构建在一个支持 JMX 框架的通用反向控制 (IoC) 内核之上,它监管称为 Geronimo Beans (GBeans) 的托管组件的集合,使用 JMX 管理 Apache Geronimo,Geronimo 是以 JMX 作为底层内核结构来创建的,因此与 JMX Managed B

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 的关系
使用 JMX 管理 Apache Geronimo

表 1 显示了 Geronimo GBeans 和 JMX MBeans 的相似之处。

表 1. Geronimo GBeans 和 JMX MBeans 的相似之处

目的MBeans 使用GBeans 使用
保留操作、属性、通知和托管资源的构造函数的数据结构MBeanInfo 结构GBeanInfo 结构
封装有关托管资源的构造函数的信息ConstructorInfo 结构GConstructorInfo 结构
封装有关托管资源的操作的信息MBeanOperationInfo 结构GOperationInfo 结构
封装有关托管资源的属性的信息MBeanAttributeInfo 结构GAttributeInfo 结构
封装有关托管资源的通知和事件的信息MBeanNotificationInfo 结构GNotificationInfo 结构

JMX 还提供了一个应用程序接口 (API),通过该接口可以远程观察和查看 MBean 信息。Geronimo 提供了对该 API 的支持,允许 Geronimo 为远程客户端将其 GBeans 集公开为 MBeans。

Geronimo 和 JMX 远程处理

Geronimo 支持 JMX Remote API (JSR 160),您可以远程管理和监视 MBean 服务器。JSR 160 指定了支持 JMX 的应用程序和服务提供连接器,从而允许 JMX 客户端通过受支持的协议(如 HTTP 和远程方法调用 (RMI))进行连接。JSR 160 为所有的 JMX 远程处理实现定义了一个强制性的基于 RMI 的连接器。

jmx-remoting 模块位于 org.apache.geronimo.jmxremoting 包中,它使用 JSR 160 JMX Remoting提供对 Geronimo 服务器的远程访问。您必须启用和运行两个 Geronimo 服务来支持 Geronimo 的 RMI 连接器:

org.apache.geronimo.system.RMIRegistryService:在指定端口启动 RMI 注册表

org.apache.geronimo.jmxremoting.JMXConnector:创建一个 RMI 连接器服务器,并将其导出到在 RMI 注册表指定的连接器服务器 URL。

在两个服务运行时,您可以使用 清单 1 的代码连接 Geronimo 的 MBean 服务器,并执行 Geronimo 的 MBeana 上的操作。

清单 1. 远程连接 Geronimo

Map environment = new HashMap(); 
String[] credentials = new String[]{"system", "manager"}; 
environment.put(JMXConnector.CREDENTIALS, credentials); 
 
JMXServiceURL address = 
  new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost/JMXConnector"); 
JMXConnector jmxConnector = 
  JMXConnectorFactory.connect(address, environment); 
MBeanServerConnection mbServerConn = 
 jmxConnector.getMBeanServerConnection(); 
System.out.println("DefaultDomain: " 
          + mbServerConn.getDefaultDomain()); 

在前一个示例中,RMI 连接器根据 JMXServiceURL 来指定远程 MBean 服务器。JMXServiceURL 指示根据协议(这里是 rmi)、主机(这里是 localhost)、端口(这里没有明示)和 URL 路径(这里是 JMXConnector)构建的地址来查找连接器存放的地方。通过有效的连接来运行 Geronimo 实例,您可以使用 清单 2 中的代码来查看与 Geronimo 内核有关的所有 MBeans 的信息。

清单 2. 查看 MBean 的 Geronimo 内核信息

ObjectName kernelObjName = 
  JMXUtil.getObjectName(":role=Kernel"); 
 
MBeanInfo mBeanInfo = mbServerConn.getMBeanInfo(kernelObjName); 
if (mBeanInfo != null) 
{ 
  System.out.println("\nDumping Kernel MBeanInfo..."); 
  dumpMBeanInfo(mBeanInfo); 
} 

每个 MBean 都以 MBeanInfo 类实例的形式公开与自己有关的信息集。这些信息封装在属性、操作和通知中。清单 3 演示了查看这些信息的方式。

清单 3. 保存 Geronimo 内核中的 MBeans 的数据的 MBeanInfo 实例

private static void dumpMBeanInfo(MBeanInfo info) 
{ 
  MBeanAttributeInfo[] aInfos = info.getAttributes(); 
  System.out.println("  Attribute Infos:"); 
  if (aInfos != null) 
  { 
   for (int i = 0; i < aInfos.length; i++) 
   { 
     System.out.println("   " 
              + aInfos[i].getType() 
              + " " + aInfos[i].getName()); 
   } 
  } 
 
  MBeanOperationInfo[] oInfos = info.getOperations(); 
  System.out.println("  Operation Infos:"); 
  if (oInfos != null) 
  { 
   for (int i = 0; i < oInfos.length; i++) 
   { 
     String signature = getSignature(oInfos[i]); 
     System.out.println("   " 
              + oInfos[i].getReturnType() 
              + " " + oInfos[i].getName() 
              + signature); 
   } 
  } 
} 
 
private static String getSignature(MBeanOperationInfo oInfo) 
{ 
  String signature = "("; 
  MBeanParameterInfo[] paramInfos = oInfo.getSignature(); 
  if (paramInfos != null) 
  { 
   for (int j = 0; j < paramInfos.length; j++) 
   { 
     if (j > 0) 
     { 
      signature += ", "; 
     } 
     signature += paramInfos[j].getType(); 
   } 
  } 
  signature += ")"; 
  return signature; 
} 

具有 JMX 的 Geronimo 提供了足够多的信息来启用全面而又强大的调试环境。Geronimo 使用基于浏览器的调试控制台来开发该环境,控制台可用于任何 Geronimo 运行实例。

Geronimo 的 JMX 调试控制台

Geronimo JMX 调试控制台是使用 JMX 监视运行 Geronimo 服务器和调试已部署应用程序的调试工具。用 Geronimo 启动命令行,将 org/apache/geronimo/DebugConsole 添加到配置列表中。Geronimo 将 JMX 调试控制台部署到运行 Geronimo 实例的 /debug-tool 上下文中(即 http://servername:8080/debug-tool/,其中 servername 是调试工具所驻留的计算机的名称)。调试工具显示了 MBeans 的列表,您可以单击它来查看附加信息,信息显示在页面右侧的一个表格中。图 2 显示了一个 Geronimo/jmxdebug-jetty/1.0/car MBean 的附加信息的示例。

图 2. 在 Geronimo JMX 中调试控制台中的一个 MBean 的附加信息
使用 JMX 管理 Apache Geronimo

查看原图(大图)

Geronimo 和 JMX 控制台

Geronimo 与 JMX 紧密集成在一起,因此您可以使用任何启用了 JMX 的控制台应用程序或工具来查看和管理 Geronimo 的运行时信息。这种标准化的交互是 JMX 最有用的好处之一。下一小节将讨论您可以如何使用 MC4J JMX 控制台来管理和监视 Geronimo。

用 MC4J JMX 控制台来管理 Geronimo 的配置和运行时信息

MC4J 是一个基于 JMX 的 Java 开放源码项目,用于创建管理软件。它使用 JMX 规范提供的标准远程管理功能和操作功能来处理和连接、管理和监视启用了 JMX 的应用程序、服务器和服务。

您可以从 MC4J 网站下载,并根据您的环境执行适当的 MC4J 安装。在安装 MC4J 控制台之后,可以运行它来管理和监视 Geronimo 或任何启用了 JMX 的应用程序的运行实例。MC4J 提供了四个主要的窗格来显示启用了 JMX 应用程序的属性、图形和其他信息,如 图 3 所示。

图 3. MC4J 的窗格
使用 JMX 管理 Apache Geronimo

MC4J 可以通过 Geronimo 的 RMI 服务器连接 Geronimo 的运行实例。

从 Management 菜单中选择 Create Server Connection,然后从服务器连接类型列表中选择 Geronimo。

键入 system 作为 Principle 值,并键入 manager 作为 Credentials 值。

命名该连接,然后单击 Next。

单击 Finish;MC4J 将加载 Geronimo 公开的 MBeans。

在 Managed Objects Explorer 窗格展开 Geronimo 连接节点,以便浏览属性、操作和 Geronimo MBeans 的通知。 图 4 显示了 MC4J 的 Managed Objects Explorer 窗格的典型视图。

图 4. MC4J Managed Objects Explorer 窗格
使用 JMX 管理 Apache Geronimo

右击其中一个 MBean,然后选择 Available dashboards。从出现的菜单中选择 Basic MBean View。图 5 显示了在使用 Basic MBean View 仪表板查看 Geronimo/jmxdebug-jetty/1.0/car MBean 时的样子。

图 5. Basic MBean View 仪表板
使用 JMX 管理 Apache Geronimo

查看原图(大图)

您可以使用 MC4J 控制台的 Basic MBean View 对 Geronimo 的 MBeans 执行实时操作。这时,请花一些时间来检查可以在 MC4J 中配置和监视的值的巨大数目。

用 MBeanServerKernelBridge 和 MBeanGBeanBridge 连接 Geronimo 与 JMX

Geronimo 提供了几个类来弥补 Geronimo GBean 框架与 JMX MBean 框架之间的差距。MBeanServerKernelBridge 类将载入 Geronimo 的每一个 GBean 注册为相关联 MBeanServer 实例中的一个 MBean。该行为使得使用 Geronimo 公开 MBeans 的过程只是将其封装在 GBean 中,然后使用 Geronimo 内核注册 GBean。

内核启动过程中,在 MBeanServerKernelBridge 实例启动时,将检索内核注册的所有 GBeans 并将它们转换为 MBeans。这些 MBeans 是动态 MBean,它们以 MBeanGBeanBridge 实例的形式维护对 Geronimo 内核的引用和存储在每个 GBean 的 GBeanInfo 引用中的信息。

因为 MBeanServerKernelBridge 实例是由 Geronimo 内核注册为 GBean 的,所以只要注册新的 GBean,该 GBean 就会自动注册为 LifecycleAdapter 实现,以接收加载事件和卸载事件。在发生加载和卸载事件时,MBeanServerKernelBridge 使用 MBeanServer 将每个相关联的 GBean 注册和注销为一个 MBean,以确保 JMX 感知客户端提供 Geronimo 和 Geronimo 内核当前状态的精确视图。

结束语

Geronimo 的创建者将设计平台管理性能作为主要目标,而 JMX 是 Geronimo 用来实现这个目标的重要技术之一。Geronimo 与 JMX 的紧密关联使获得管理 Geronimo 配置和运行时属性的良好编制能力成为可能。

Geronimo 的通用内核支持 JMX 框架管理称为 GBean的托管组件仓库。Geronimo 提供了一些帮助类来弥补 Geronimo GBean 框架和 JMX MBean 框架之间的差异,这使得使用 Geronimo 公开 MBeans 的过程变成只是使用帮助类依次用 Geronimo 内核将 MBeans 注册为 GBeans。

本文示例源代码或素材下载

Tags:使用 JMX 管理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接