内容


使用 AIDE 实现高效率,第 2 部分

构建实际接触点

将自主计算接触点连接到外部资源

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 使用 AIDE 实现高效率,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:使用 AIDE 实现高效率,第 2 部分

敬请期待该系列的后续内容。

开始之前

了解本教程中包含的内容以及如何最好地利用本教程。

关于本系列

本教程是系列教程基础的第 2 部分,将介绍 IBM® Autonomic Integrated Development Environment (AIDE) 工具包和信息技术 (IT) 管理的基本元素(包括事件——托管系统向管理器自主传递重要数据的主要方法之一)。

本系列教程还包含代码级别的描述,以说明如何包含 Java™ Management Extensions (JMX) 应用程序编程接口 (API)。此 API 提供了一个非常方便的机制,用于从使用 JMX 工具的实体提取数据,并将其作为自主接触点的一部分呈现。

本教程重点关注如何获得对 JMX 工具的编程访问。正如您将看到的,此步骤在生成能访问其他非 JMX 技术的接触点时非常关键。对于 AIDE 新用户,您将能够更自如地处理接触点技术的复杂细节。和本系列教程的第 1 部分一样,本教程将使用随 AIDE 工具包提供的示例,并以此作为基础。

在本教程中,您将了解如何使用事件和 JMX 实体并将其包含到自主计算接触点中。我们的主要目的是扩展您的 AIDE 知识,提供更多有关建模管理数据的背景知识,并了解如何将外部 Java 代码绑定到接触点基本代码中。

本系列教程的目标读者是具有一定 Java 编程知识且希望使用 AIDE 技术创建 IT 管理系统的主要组件的任何人。

关于本教程

本教程说明如何将事件和 JMX 工具与 AIDE 工具包一起使用。除了第 1 部分介绍的基本知识之外,我们还要介绍如何连接接触点与实际的托管实体,并从其将数据提取到接触点中。我们提供了相应的基础代码,以便接触点修改其中一个 JMX 实体的属性。本教程旨在为您提供与托管实体相关的问题的坚实基础,如属性、获取和设置属性值以及通知在 IT 领域的主要作用。

在这第二篇教程中,因此仍然采用通用平台:任何支持 Eclipse、AIDE 工具包和 Java 2 Platform Standard Edition (J2SE) V5.0 的平台。如 Microsoft® Windows® XP 就已经足够了。所有示例代码都是在运行 Windows XP Professional with Service Pack 2 (SP2) 的计算机上编写和测试的。

先决条件

本教程的目标读者是具备一定 Java 编程、Eclipse、JMX 和系统管理知识的程序员。具备使用 Eclipse 等集成开发环境(Integrated Development Enviroment,IDE)和各种工具及插件的能力将有所帮助,但不是必需的。在本教程中提供了详细的说明。同样,基本了解以下组件和技术也非常有用:

  • JMX
  • 工具
  • 监视和管理

这些概念将通过后面的工作代码示例进行描述和演示。

本教程中提到的所有 Java 类都可以从 ac-aidetut2source.zip 文件(请参阅下载)中剪切复制。

系统要求

要运行本教程中的示例,必须满足平台的最低要求:一台运行 Windows XP 且安装了 AIDE 软件和 Apache Tomcat V5 的计算机。JMX API 是作为 J2SE V5.0 的一部分包含的,因此不需要进行特殊的安装(如果已经安装了 J2SE V5.0)。

注意:您可以使用 Tomcat V4,但是还必须使用兼容程序包。如果不使用兼容程序包来帮助运行 J2SE 4.x,您可能无法运行 JMX 示例代码,所有这些代码均已使用 J2SE V5.0 进行测试。

开始使用事件

事件在 IT 管理中非常重要。了解一下反病毒软件,您会发现事件用于记录或通知您检测到攻击、病毒、特洛伊木马、蠕虫等等。与此类似,Windows XP 中提供了“事件查看器”(通过单击开始 > 控制面板 > 管理工具 > 事件查看器 来访问),可在其中查看专用于系统、安全和应用程序事件的日志。这些事件的用法可以被视为“事后的”——只能在事件发生后看到。不过,这却是 IT 管理的一个关键要求,对于那些您不能在现场进行干预时发生的事件更是如此。

简单来说,事件代表了一个专用反馈渠道,托管实体可以利用其与系统操作员进行沟通。在某些情况下,快速响应事件对业务连续性非常关键——如磁盘配额用完或发出入侵警报。

事件还在 IBM 的按需计算和自主计算远景中扮演着非常重要的策略角色——例如,当组织处于自主计算第 5 级 时,IT 员工管辖着一个完全自动化的业务促进基础设施。

封闭 IT 管理 也在此级别,自动事件管理就是其中一个重要的部分。在此上下文中,事件将由软件进行自动处理(而不是进行人为干预)。AIDE 为事件管理提供了良好的支持。

AIDE 和事件

为了帮助更具体地理解通知的概念,请参见清单 1 中的代码示例。请记住:您希望通知在一些重要事件发生时出现——例如,当设置或修改了托管实体属性之类的关键参数时。

清单 1 中的代码来自 WeatherStation 项目。调用此方法时,新的 temperature 值将作为参数传递,而旧的 temperature 将被保存,代码还将进行检查,确定是否有任何观测器在侦听此对象。

清单 1. 发出通知的方法
public void setTemperature(double newTemperature)
{
   double oldTemperature = temperature;
   temperature = newTemperature;
   if (eNotificationRequired())
          eNotify(new ENotificationImpl(this,
          Notification.SET,
          ComPackage.WEATHER_STATION__TEMPERATURE,
          oldTemperature, temperature));
}

Eclipse Modeling Framework (EMF) 为 EObject 类提供了通知机制。每个 EObject 类(或子类)都可以维护观测器(也称为适配器)列表,只要出现相关状态更改,就会立即通知这些观测器。框架的 eNotify() 方法将遍历此列表,并向观测器转发通知。正如您在清单 1 中所看到的,参数 ComPackage.WEATHER_STATION__TEMPERATURE 是通知的主题。

联机帮助详细说明了如何操作 WeatherStation 项目,您还可以在 GUI 中查看通知效果。具体来说,此接触点会将响应中的操作状态修改为所通知的温度更改。

对于 EMF 对象未与观测器一起使用的情况,对 eNotificationRequired() 的调用(请参见清单 1)将只返回一个无害的有效空指针检查,此检查是在使用 Just-in-Time (JIT) 编译器时进行内联的。如果您稍后决定向给定参数添加观测器,这个功能将非常有用。

本教程稍后将介绍其他框架(特别是 JMX)生成通知的方式。

将接触点连接到外部 Java 代码

在本系列教程的第 1 部分,您了解了如何使用各种 AIDE 向导生成的模型创建接触点。假定您现在希望将一些外部 Java 代码连接到其中的一个接触点。例如,您有遗留 IT 管理代码,并希望将其集成到 AIDE 等现代框架中来保护这项投资。可以随后将遗留代码合并到接触点中,并使用其来管理关联的资源。

向接触点添加 Java 代码

假定您有一个与第 1 部分中生成的接触点类似的简单接触点。当您打开项目时,可以看到各种文件夹和关联的资源。图 1 显示了 JavaSource 文件夹和 com.ibm.impl 子文件夹。您将要把 Java 代码放入到此子文件夹中。在新生成的项目中,通常在此文件夹中可以看到至少三个自动生成的 Java 类文件。您将向此文件夹添加一个新 Java 类,并在关联的 xxxxxImpl.java 文件中对其进行实例化,其中 xxxxx 是您的项目的名称。

图 1. JavaSource 文件夹
JavaSource 文件夹
JavaSource 文件夹

清单 2 显示了一个简单的 HelloWorld.java 类,我们将要把这个类添加到接触点中。(请参阅下载,以获取 HelloWorld.java 的源代码。)

清单 2. 简单的 Java 类 HelloWorld.java
package ibm.com.impl;

public class HelloWorld
{
	public void writeOutput()
	{
		System.out.println("Well, hello there!");
	}
}

要向您的项目添加 HelloWorld.java 类,请完成以下步骤:

  1. 图 1 中所示打开项目,并选择 ibm.com.impl 文件夹。
  2. 单击 File > New > Class
  3. Name 字段中,键入 HelloWorld 作为类名称。所有他字段中应该显示缺省值。可以忽略这些字段。
  4. 单击 Finish。现在应该在 .ibm.com.impl 文件夹中看到此新类。

实例化新类

您已经完成了一半的工作。现在必须添加一个调用,以实例化新类的对象。展开 Java WeatherStationImpl.java 类(不一定非要使用此项目——我之所以选择此它,是因为方便,而且在第 1 部分中也是使用此项目),向下滚动到 getName() 方法,然后双击打开此方法,如图 2 中所示。清单 3 显示了实例化 HelloWorld 类的对象所需的代码。

图 2. getName() 方法
getName() 方法
getName() 方法
清单 3. 实例化简单 Java 类 HelloWorld.java 的对象
HelloWorld hello = new HelloWorld();
  hello.writeOutput();

正如图 2 中所示,我们已经添加了所需的 Java 代码来实例化 HelloWorld 类的对象。您只需要重新构建此项目,就可以看到新代码如何运行了。为此,请完成以下步骤:

  1. 清单 3 中的代码添加到 getName() 方法体中。
  2. 单击 File > Save All,然后选择此项目。
  3. 单击 File > Export
  4. 选择 WAR file,然后单击 Next
  5. 单击列表控件,然后选择所需的 Web 模块。
  6. 浏览到所需的目标,然后选择 Overwrite existing file 选项。
  7. 单击 Finish,然后按照本系列教程第 1 部分中的说明进行重新部署。

单击 Create & browse 时,应该在控制台窗口中看到消息 Well, hello there!(请参见图 3)。(我在这里并没有按照传统的方式输入 Hello World!,但您应该也能籍此了解所要说明的内容。)您已经向接触点成功地添加了 Java 代码了。

图 3. 接触点中集成的 Java 代码
接触点中集成的 Java 代码
接触点中集成的 Java 代码

稍后讨论使用 JMX 工具的 Java 代码时将以此接触点为基础进行构建工作。

使用 JMX 作为接触点管理模型

大体说来,大部分 IT 管理系统包含六个主要元素:

  • 管理接口,作为进行实体管理的访问点。管理接口的例子包括 UDP 端口和 Web 访问端点。
  • 数据建模,考虑与管理相关的信息元素(如设备状态)的定义。
  • 数据模型实例化——描述托管实体的总体情况的模型。
  • 工具,描述帮助访问已实例化的数据模型的软件——即,它提供管理器所需的实体信息。
  • 信息访问
  • 信息操作,由管理器应用程序执行,以满足管理需求。

我要说明如何构建基于 JMX 的托管实体,即包含上面提到的前四个 IT 管理系统元素的一组简单的 Java 类:管理接口、数据建模、模型和工具。另外,我还要简单介绍一下这个程序的主要元素;此程序是后续有关 IT 管理和接触点部署的部分的基础。

托管实体的四个特征

让我们首先从托管实体的四个特征着手——管理接口、数据建模、数据模型实例化和工具。

管理接口

任何托管实体都必须提供一个接口,以便通过此接口对其进行管理。打个比方,当您阅读电子邮件时,就相当于在管理您的邮件:阅读、撰写、转发、删除等等。管理接口 是电子邮件客户端程序打开的窗口、输入设备、显示器、用于与邮件服务器通信的协议等的组合。

对于 JMX 代码,管理接口是控制台窗口,Java 远程方法调用(Remote Method Invocation,RMI)为请求提供了传输服务。更准确地说,管理接口是由 MBean 提供的。

使用 MBean 进行数据建模

有了管理接口后,必须确定托管实体将支持什么样的数据。不同的管理技术均采用独特的数据表示方式。JMX 提供的是 MBean托管 Bean。MBean 是遵循特定标准设计模式和命名约定的简单 Java 类。MBean 还允许您对属性(托管实体的主要元素)进行建模。

图 4 显示了与使用 MBean 工具的托管实体通信的管理器。正如您看到的,有三种基本消息类型:getset 和事件。get 操作与读取操作相同;set 操作与写入操作相同;而事件 是自动生成的通知。

图 4. 采用 MBean 的管理器和托管实体
采用 MBean 的管理器和托管实体
采用 MBean 的管理器和托管实体

MBean 还提供了用于表示属性的方便机制,如状态(联机、脱机)和级别(Toner Level 90%),而且负责维护这些属性的值。可以将您的托管实体看作分布式关系数据库中的一部分。在此上下文中,关系表代表托管实体,而列代表这些实体的属性。

现在,您可能已经看到,您使用 MBean 对象来实例化数据模型。显然,图 4 中的管理器使用管理系统要求所规定的 MBean 属性。

托管实体概述

由于托管实体通常是特定于供应商的,具有专用性,无疑管理属性通常也应该是专用的。这就使得有必要使用供应商特定的管理工具,或者更糟,根本没有工具可用!一些托管实体提供基于简单网络管理协议(Simple Network Management Protocol,SNMP)等技术的工具,而其他很多则仅提供基本的命令行接口(Command-Line Interface,CLI)。一个很重要的趋势是 Tomcat 之类的工具开始提供即时可用的 JMX 工具了。在本教程后面的内容中您将了解到,可以相对方便地对使用 JMX 工具的实体进行管理——比处理不使用工具的实体容易得多。

这样,可以将工具定义为管理接口、数据模型和数据模型实例化的组合。

添加使用随附的 JMX 程序的管理代码

在此部分,您将下载、构建和使用随附的 JMX 实用工具。将使用的代码包含三个实体:

  • 用于启动 RMI 注册表的客户端
  • 接收并随后响应管理请求的服务器
  • 驻留在接触点内并与服务器通信的客户端

下载和构建 JMX 代码

此时,您可以将 Java 代码下载到您计算机上的文件夹中——例如 C:\MyJavaCode。要构建 Java 代码,请直接转到 C:\MyJavaCode 目录,并随后键入:javac *.java

如果 Java 软件开发工具包没有问题(即,使用的是 V5.X),就应该可以开始运行此代码了。

启动 RMI 注册表

要启动 RMI 注册客户端,请完成以下步骤:

  1. 打开控制台窗口。
  2. 转到下载示例代码的文件夹。
  3. 键入 rmiregistry 9999 &

启动服务器程序(或托管实体)

如果在 Windows 下运行,则必须打开新控制台来运行服务器,因为 DOS 控制台是单线程的。另外,在步骤 3 中并不真的需要“和”号 (&),但包含此符号并不会有什么害处。“和”号在 DOS 中将被忽略;不过在 UNIX® 下,它会导致程序在后台运行。

要启动服务器,请完成以下步骤:

  1. 打开控制台窗口。
  2. 转到下载示例代码的文件夹。
  3. 键入 java -classpath . Server

如果此时没有遇到多个异常,就可以运行接触点客户端了。

遇到错误时的处理措施 . .

如果在上述两组命令的任意一组的响应中接受到错误,请按照以下说明进行处理:

  • 确保您的 PATH 环境变量指向 JDK V1.5 的实例(例如,PATH=C:\MyApps\Java\jdk1.5.0_06\bin)。
  • 确保上述引用出现在对 JDK 早期版本的引用之前
  • 确保所运行的防火墙产品未阻止这两个 JMX 程序(或下面将要看到的客户端)。

对于上述 1 和 2 两项,我使用了作为 Java 2 Platform Enterprise Edition (J2EE) 的一部分安装的旧 JDK 版本。不幸的是,这个早期 JDK 版本在我的 PATH 变量中位于所需的 JDK V1.5 之前。因此,如果您希望避免错误,请确保使用了最新的 JDK,并将其放在您的 path 变量的开始位置。这就是现代软件:真的是基于组件的,每个组件都需要重视!

此时,您应该有两个基于 JMX 的程序在运行:rmiregistry 和 Server。图 5 显示了刚刚启动后的服务器程序控制台。看到图 5 中的输出后,就可以松一口气了,因为您的服务器现在已在正常工作。此时,按 Enter 键,以使服务器进入接收模式。服务器将开始等待接收传入客户端请求。

图 5. 基于 MBean 的服务器程序
基于 MBean 的服务器程序
基于 MBean 的服务器程序

基本基础设施已经就位。现在必须运行基于 JMX 的 AIDE,并与 Server 程序进行通信。

此处值得注意的是,JMX 是一项重要而有意义的技术;本教程仅涉及了 JMX 所提供的功能中很少的一部分。更多地了解此技术是一个非常不错的想法。

关于客户端和服务器的说明

本教程剩下的部分将讨论客户端和服务器。此讨论的上下文如下(以图 4 为依据):

  • 服务器 是托管实体。
  • 客户端 是驻留在接触点内的管理器。

显然,服务器通常被视为管理器,但在本例中却并非如此!

向接触点添加 JMX 客户端

打开 Eclipse 后,选择要添加 JMX 代码的项目。我使用的是 WeatherStation 示例,但您也可以使用任何一个您想使用的项目。要从 Eclipse Workbench 添加客户端 Java 类,请完成以下步骤:

  1. 复制下载的四个 Java 类:
    • HelloWorld.java
    • ClientListener.java
    • SimpleStandard.java
    • SimpleStandardMBean.java
    将其复制到 \ibm\com\impl 子文件夹中。(这些类的源代码可从 ac-aidetut2source.zip 文件中剪切粘贴,请参阅下载。)
  2. 在 \ibm\com\impl 子文件夹中打开 JavaSource 文件夹。
  3. 单击 File > New > Class
  4. Name 字段中,键入 HelloWorld.java。(我假定您已经删除了前面添加的旧 HelloWorld.java 类。如果尚未删除,可以直接将其重命名为 HelloWorld1.java。)在其他字段中会显示缺省值。可以忽略这些字段。
  5. 单击 Finish。现在应该在 \ibm\com\impl 子文件夹中看到此新类。
  6. 对于其他 Java 类,重复步骤 3 到步骤 5 的操作。

与前面一样,通过完成以下步骤重新部署接触点项目:

  1. 单击 File > Save All,然后选择项目名称。
  2. 单击 File > Export
  3. 选择 WAR file,然后单击 Next
  4. 单击列表控件,然后从列表中选择所需的 Web 模块。
  5. 浏览到所需的磁盘目标,然后选择 Overwrite existing file 选项。
  6. 单击 Finish,然后按照本系列教程第 1 部分中所讨论的进行重新部署。

然后,单击 Create & browse 时,应该在控制台窗口中看到消息 Well, hello there!,另外还应该看到指示成功连接到 JMX 服务器程序的新消息(请参见图 6)。

图 6. 基于 MBean 的客户端已与服务器程序进行了通信
基于 MBean 的客户端已与服务器程序进行了通信
基于 MBean 的客户端已与服务器程序进行了通信

您刚刚已经将接触点连接到外部使用工具的程序。现在让我们了解将如何对其进行操作。

与托管资源交互

托管资源启动并开始运行后,您就可以开始与其进行交互了。

与托管资源交互

图 7 显示了操作场景。

图 7. 接触点及其基于 MBean 的客户端和服务器程序
接触点及其基于 MBean 的客户端和服务器程序
接触点及其基于 MBean 的客户端和服务器程序

图 7 顶部的框表示现在包含支持 JMX 的简单客户端程序的接触点。正如您很快会看到的,此客户端将向托管实体发送请求。图 7 底部的框表示您的托管实体。在操作中,托管实体可以为网络路由器、应用服务器、数据库服务器或多种技术的组合。重要的是,在本例中,图 7 中的托管实体是通过 JMX 代码和数据进行管理的。这意味着,除了将其集成到接触点之外,还解决了管理此类实体所涉及到的很多问题。

使服务器准备好接收客户端连接

回到图 5,您现在需要更改服务器状态,以使其进入可接收客户端连接的状态。为此,请选择图 5 中所示的服务器程序控制台,然后按 Enter 键,这将得到图 8 中所示的输出。

图 8. 服务器已准备好接收客户端连接
服务器已准备好接收客户端连接
服务器已准备好接收客户端连接

服务器(或托管实体)已经创建了一个 MBean,并已准备好接收传入请求。现在,通过创建另一个 MBean 实例来进行客户端请求。

在服务器中创建 MBean:读取托管资源配置

回到图 6,选择项目控制台窗口,然后按 Enter 键。控制台窗口应被更新,如图 9 中所示。

图 9. 客户端已与服务器进行了通信
客户端已与服务器进行了通信
客户端已与服务器进行了通信

图 9 中进行了以下操作:

  • 接触点创建了一个新 MBean 实例。
  • 接触点从服务器检索到了 MBean 详细信息——总共三个实例。
  • 接触点已准备好进行后续步骤。

在服务器中创建 MBean:更改托管资源配置

回到图 9,再次选择项目控制台窗口,然后按 Enter 键。控制台窗口应被更新,如图 10 中所示。

图 10. 客户端已与服务器进行了通信
客户端已与服务器进行了通信
客户端已与服务器进行了通信

图 10 中进行了以下操作:

  • 接触点对其 MBean 实例的一个属性执行了 get 操作。
  • 接触点在其 MBean 实例上创建了一个事件侦听器。
  • 接触点对其 MBean 实例执行了 reset() 操作。
  • 接触点事件侦听器接收到由于 reset() 操作调用而引发的通知。

图 10 显示了大部分主要 IT 管理操作。您通过获取属性的值从托管实体获取数据。然后注册一个通知侦听器,以接收事件和对托管对象调用方法,通知侦听器将随后接收到一个相应的事件。

现在,您可以停止服务器和 RMI 注册表程序了。

总结

在本教程中,您进一步了解了 AIDE,并简单了解了如何使用 JMX 进行 IT 管理。务必了解,JMX 不过是可用于此用途的众多技术之一。管理基础设施的需求已经存在很长时间了,因此也出现了很多备选技术。这些技术包括 SNMP、CLI、Java Dynamic Management Kit (JDMK) 和 Windows Management Instrumentation (WMI) 等。每种方法都有其优点和缺点,也有其追随者和反对者。

不过,对于 21 世纪的 IT 管理,有一件事是肯定的:其重要性勿庸置疑。随着 IT 预算缩减和人员配备水平的降低,对有效的自动 IT 管理的需求正以前所未有的速度增长。

本教程拓展了您在 IBM AIDE 工具包方面的知识。使用事件是 IT 管理的关键,而 AIDE 通过广泛使用 EMF 提供了对这方面的支持。您现在应该能够将自己的 Java 代码添加到接触点,并向其中添加 JMX(一种成熟的管理技术)。此技术允许将现有的基于 JMX 的管理迁移到基于接触点的管理环境中,而后者允许您在保护遗留 IT 管理工具的同时进入一个更为现代的环境中。

虽然本教程中的 JMX 代码集成示例很粗糙,但却说明了进行合并不是很困难。映射 JMX get 操作、set 操作和事件完全变成了模型设计问题。也就是说,在配备了托管实体工具后,您就向易管理性迈进了一大步。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services, XML, Java technology
ArticleID=166690
ArticleTitle=使用 AIDE 实现高效率,第 2 部分: 构建实际接触点
publish-date=10092006