jmx管理,(转)使用 JMX 管理 Apache Geronimo

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.MBeanServerMBeanServer 充当 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 的关系
Geronimojmx管理,(转)使用 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 的附加信息
geronimo/jmxdebug-jetty/1.0/carGeronimojmx管理,(转)使用 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 的窗格
MC4Jgeronimo/jmxdebug-jetty/1.0/carGeronimojmx管理,(转)使用 JMX 管理 Apache Geronimo
MC4J 可以通过 Geronimo 的 RMI 服务器连接 Geronimo 的运行实例。
  1. 从 Management 菜单中选择 Create Server Connection,然后从服务器连接类型列表中选择 Geronimo
  2. 键入 system 作为 Principle 值,并键入 manager 作为 Credentials 值。
  3. 命名该连接,然后单击 Next
  4. 单击 Finish;MC4J 将加载 Geronimo 公开的 MBeans。
在 Managed Objects Explorer 窗格展开 Geronimo 连接节点,以便浏览属性、操作和 Geronimo MBeans 的通知。 图 4 显示了 MC4J 的 Managed Objects Explorer 窗格的典型视图。
图 4. MC4J Managed Objects Explorer 窗格
MC4JMC4Jgeronimo/jmxdebug-jetty/1.0/carGeronimojmx管理,(转)使用 JMX 管理 Apache Geronimo
右击其中一个 MBean,然后选择 Available dashboards。从出现的菜单中选择 Basic MBean View。图 5 显示了在使用 Basic MBean View 仪表板查看 Geronimo/jmxdebug-jetty/1.0/car MBean 时的样子。
图 5. Basic MBean View 仪表板
BasicMC4JMC4Jgeronimo/jmxdebug-jetty/1.0/carGeronimojmx管理,(转)使用 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。

回页首
下载
描述
名字
大小
下载方法
Geronimo and JMX snippets
GeronimoJMX.zip
38KB
HTTP
关于下载方法的信息
参考资料
学习
  • 查看一篇关于 JMX 的非常好的概述 “From black boxes to enterprises, Part 1: Management, JMX 1.1 style”(developerWorks,2002 年 9 月)。
  • 查看关于 GBeans 的介绍 “Dependency injection in Apache Geronimo, Part 2: The next generation” (developerWorks,2006 年 2 月)。
  • 查找 JMX documentation and downloads。
  • 获取 specification for JMX Remoting。
  • 访问 MC4J Web 站点,获得用于支持 JMX 的实现(JMX-enabled implementation)的一个全面管理控制台。
  • 从 Apache.org Geronimo 站点 获得 Geronimo 的参考资料。
  • 查看 developerWorks 的 Apache Geronimo 项目专区,获得有助于您现在使用 Geronimo 开始开发的文章、教程和其他参考资料。
  • 在 developerWorks 的 Get started now with Apache Geronimo 部分查找对于初学者和有经验的用户有用的参考资料。
  • 查看提供的 IBM Support for Apache Geronimo,它会使您在开发 Geionimo 应用程序时获得世界级的 IBM 支持。
  • 访问 developerWorks 开放源码专区,从那里可以获得大量 how-to 信息、工具和项目更新,这些有助于您使用开放源码技术进行开发,并将这些技术与 IBM 产品结合使用。
  • 在 “developerWorks 开放源码专区” 上浏览所有可获得的 Apache 文章 和 免费 Apache 教程。
  • 浏览 Safari bookstore 上的有关书籍和其他技术主题。
  • 随时关注 developerWorks 技术事件和网络广播。
获得产品和技术
  • 下载 Apache Geronimo, Version 1.1。
  • 使用 IBM 试用软件 改进您的下一个开放源码开发项目,可以通过下载或从 DVD 中获得这些软件。
  • 下载 IBM WebSphere® Application Server Community Edition V1.0 的免费副本 —— 它是一个轻量级的 J2EE 应用服务器,使用 Apache Geronimo 开放源码技术构建而成,用于帮助您加速开发和部署工作。
讨论
  • 与 Apache Geronimo blog 上的 Geronimo 开发保持同步。
  • 通过参与 developerWorks blogs 加入 developerWorks 社区。
关于作者
Jeff Hanson 在软件行业有超过 20 年的经验,他曾做过 OpenDoc 项目的 Microsoft® Windows® 端口的高级工程师,以及 Novell 公司的 Route 66 框架的首席架构师。Jeff 目前是 eReinsure.com, Inc. 的首席架构师,为基于 J2EE 的再保险系统构建 Web 服务框架和平台。Jeff 是很多文章和书籍的作者,其中包括 .NET versus J2EE Web Services: A Comparison of Approaches、Pro JMX: Java Management ExtensionsWeb Services Business Strategies and Architectures
Tags:  geronimo jmx管理

延伸阅读

最新评论

发表评论