使用 AIDE 实现高效率,第 4 部分: 接触点通知与简单管理器

构建自主计算系统

本教程是系列教程中的第 4 部分,将介绍如何创建将工具提供的通知映射到其接触点对等项的接触点。本系列前面的教程介绍了如何在接触点实现简单的 GETSET 操作。本教程将添加通知处理来达到此目的,为您的接触点和基础托管资源进行更为完整的交互打好基础。您还将了解如何以编程方式操作一系列接触点,从而为创建简单的自主管理器打下基础。

Stephen B Morris, CTO, Omey Communications

Stephen 是爱尔兰的 Omey Communications 的 CTO。在过去 20 年中,Stephen 曾在一些世界级大型网络公司参与过各种软件项目,包括基于 J2EE/J2SE 的网络管理系统,帐单编制应用程序、移植和开发 SNMP 实体、网络设备技术和 GSM 移动网络应用程序。他是 Network Management, MIBs and MPLS: Principles, Design and Implementation(Prentice Hall PTR,2003 年)一书的作者,同时也在 InformIT 和 OnJava.com 发表过多篇有关网络管理和其他主题的文章。您可以通过 stephenbjm@yahoo.com 与 Stephen 联系。



2007 年 3 月 26 日

开始之前

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

关于本系列

本系列教程描述 IBM® Autonomic Integrated Development Environment (AIDE) 工具包和信息技术(Information Technology,IT)管理的关键元素(从托管元素一直到自主管理应用程序),本教程是其中的第 4 部分。可以认为自主管理应用程序位于自主计算管理价值链的顶部(如图 1 中所示)。

本系列教程包含代码级别的描述,以说明如何包含 Java™ Management Extensions (JMX) 应用程序编程接口 (API)。此 API 提供了一个非常方便的机制,用于从使用 JMX 工具的实体提取数据,并将其作为自主接触点的一部分呈现。JMX 是一项重要的技术,因为它可帮助对任何 Java 实体进行管理,包括从 Java 2 Platform Micro Edition (J2ME) 和 Java 2 Platform Standard Edition (J2SE) 一直到 Java 2 Platform Enterprise Edition (J2EE) 的所有实体。

本教程重点介绍将 AIDE 通知与多个接触点一起使用和集成。操作基于 Web 服务的多个互连接触点是增加管理价值的关键组成部分,我们将对这个重要的主题(经常称为编排)进行详细的讨论。

注意:我所使用的术语事件通知 可互换。

和本系列的前面数个教程一样(请参见参考资料),本教程将使用随 AIDE 工具包提供的示例,并以此作为基础。在本教程中,您将了解如何使用 AIDE 通知、操作多个接触点,并了解简单自主管理器的一些主要组件。我们的主要目的是为了更全面地讨论可促进 AIDE 和自主计算环境采用的管理工作。本系列教程的目标读者是具有一定 Java 编程知识且希望使用 AIDE 技术创建 IT 管理系统的关键组件(使用工具的实体、接触点和管理器)的任何人。

关于本教程

本教程说明如何使用 AIDE 通知、操作多个接触点,并了解简单自主管理器的一些关键元素。本教程以第 1 部分第 2 部分第 3 部分的内容为基础,将向您介绍自主计算管理价值链。本系列教程的目标是为解决有关管理器应用程序、接触点和托管实体的问题提供坚实的基础。

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

先决条件

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

  • JMX
  • 托管实体工具
  • Web 服务编排
  • 监视和管理

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

本教程中提到的所有示例接触点和 Java 类都属于 AIDE 分发版本。之前的教程包括可从指定的位置下载的其他 Java 或 JMX 代码。因此,如果您已经遵循本系列之前的教程进行了操作,并不需要对本教程进行任何更改。

系统要求

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

注意:您可以使用 Tomcat V4,但是还必须使用兼容程序包。如果使用兼容程序包来帮助运行 J2SE 4.x,您可能无法运行 JMX 示例代码(对本教程不成问题),所有这些代码通常都使用 J2SE V5.0 进行了测试。


简要回顾

在学习本教程前,我们简要地回顾一下到目前为止本系列教程中已介绍的内容:

  • 第 1 部分介绍了接触点的创建以及 AIDE 入门。
  • 第 2 部分介绍了 IT 管理的基本知识,并说明了如何向 AIDE 接触点添加 JMX 代码以及如何与 JMX 工具托管实体交互。
  • 第 3 部分为使用 JMX 工具的资源的 GETSET 操作提供了简单的接触点接口。

观察图 1 中的实体,可能看到一些重要的原则起着控制作用:

  • 接触点创建
  • 接触点自定义
  • 托管实体工具
  • 通用的低级别接触点管理接口
  • 管理应用程序和托管实体间的动态交互

图 1 显示了自主计算管理价值链。这其中包含了在托管自我配置 (self-configuration)、自我修复 (self-healing)、自我优化 (self-optimization) 和自我保护 (self-protection)(也称为 self-CHOP)环境中可能找到的所有类型的实体。在操作上下文中,关系图中的每个级别可能会存在比这还要多得多的实体。因此,图 1 仅是为了演示之用。从关系图底部的托管实体向上,组件在开发成本和网络潜在影响方面的价值会逐渐增加。在本教程稍后介绍管理器应用程序的组成时,您将了解有关这方面的更多信息。

图 1. 自主计算管理价值链
自主计算管理价值链

在本教程中,将通过把资源事件映射到 AIDE 通知来完成基本的管理任务。您还将了解接触点之间交互的重要问题。令人惊奇的是(至少对我是如此!),通过使用代理代码可相对容易地实现后一个目标。通过这个练习可很容易得到简单自主管理器的定义。

什么是 IT 管理通知,它为何如此重要?

您实际上可能更习惯于使用事件!任何基于 GUI 的软件(例如,使用 AWT 和 Swing 库编写的 Java 程序)都使用事件模型。事件是通过用户交互创建的,并随后由特殊用途代码予以处理。GUI 事件示例包括:

  • 单击图形按钮
  • 选择菜单选项
  • 窗口交互(关闭、最小化、最大化等等)

什么是事件?

事件 可以粗略定义为任何值得注意的且需要用户或计算机快速做出响应的事情。IBM 已为来自各种计算实体源的事件消息(称为Common Base Event)定义了一个标准格式。为什么此标准非常重要呢?它使得应用程序不仅仅能够报告事件。由于定义了事件并了解了其含义,因此软件可以动态对其进行处理,而无需专人进行处理。Common Base Events 提供了闭合“管理循环”的强大(跨供应商)方法。有关这个颇有意义而且重要的主题的更多信息,请参阅我的文章“The Need for Autonomic Computing”(请参见参考资料中给出的链接)。

您必须编写 Java 代码来处理来自这些操作的事件,Java Virtual Machine (JVM) 将随后自动调用此代码。需要利用事件机制来促进软件进行良好而即时的响应。也就是说,您可以在不用担心 GUI 内部机制的情况下编写应用程序代码。正如您将要了解到的,GUI 事件与出现在 IT 管理中的事件概念类似。

事件也在 IT 管理中扮演着重要的角色,其中包括以下形式(还包括其他形式):

  • 应用程序发出的异步事件(例如,反病毒软件)
  • 使用工具的软件发出的 JMX 通知
  • 简单网络管理协议(Simple Network Management Protocol,SNMP)陷阱和通知

如果您使用的是 Windows XP,请单击“控制面板”>“管理工具”>“事件查看器”,以查看 Microsoft 事件类别(“应用程序”、“安全性”和“系统”)。这个管理工具在很多情况下都很有用,例如安装软件出现问题时。

您也在第 2 部分第 3 部分看到过 JMX 通知。这些通知是源自使用 JMX 工具的对象的 Java 消息,用于指示发生了重要事件。

上面列表中您唯一不熟悉的项是与 SNMP 相关的项。SNMP 是一个相当老的标准管理协议,目前具有三个版本,均提供以下内容:

  • 表示托管数据的方法
  • 在托管实体上实例化管理数据
  • 安全子系统
  • 使用简单消息传递协议与托管实体交互

一个 SNMP 消息类型专门用于事件;根据 SNMP 版本的不同,这些事件分别被称为陷阱通知。当 SNMP 管理员接收到陷阱消息时,必须对此消息进行解码和分析。简而言之,SNMP 事件提供了供托管实体用于告知您(管理员)需要对其加以注意的机制。

所有事件类型的关键在于,它们都是自动生成的,从而使得管理器无需不断查询托管实体来确定是否发生了重要的事件。通过在中介中使用事件,可提供一种强而有效的方法来减少管理器和托管实体间的交互。而这可以反过来减少管理器、托管实体、网络和网络服务的管理负担。

IT 管理事件略有不同

使用事件支持长时间运行的服务

事件的另一个常见用途是用于在复杂用户交互期间提供应用程序特定的反馈机制。此类用法的一个常见示例是软件下载(对设备或应用程序)。当启动下载过程时,设备可以发送一条事件消息;然后,可以在下载完成时再发送另一个事件。与此类似,可以发送事件来指示进程。后者可用于指示进程并未停滞不动。下载完成时,接收方可以随后发送完成事件消息,以指示下载成功。

虽然 Java Swing GUI 事件和 IT 管理事件间的对照会非常有用,但二者之间存在着一些至关重要的差别。GUI 事件始终是由某个用户交互引发的。相反,IT 管理事件可能在根本没有用户交互的情况下发生(尽管它们指示发生了重要的事情)。因此,二者之间并非完全类似,但可以根据对比了解大概的信息。

图 1 显示了托管系统中事件的情况。请注意,事件流的方向通常是单向的,从托管实体指向接触点。即,通常事件告知用户发生了重要的事情。图 1 中的其他交互与 GETSET 操作相关;您已经在前面的教程中看到过这两个操作了,出现在此处一点也不奇怪。

幸运的是,AIDE 包含了对通知的良好支持。我在第 2 部分曾提到过这一点,但在本教程中,您将了解通知实际发生时的详细情况以及使所有通知成为一个整体的代码。让我们首先深入分析一个 AIDE 通知示例。


接触点如何处理通知?

了解如何使用通知更新侦听器,并了解如何使用代理操作多个接触点。

使用通知更新侦听器

首先使用我们的老朋友 WeatherStation 接触点设置通知生成器。清单 1 显示了来自 Java 文件 WeatherStationImpl.java 的一个方法。我在紧靠发出通知之前的位置添加了对 println() 方法的调用。如果您希望自己运行此代码,请直接在文件中添加类似的代码行,并重新构建它即可(如以下所述)。正如您在第 2 部分中看到的,此代码利用了 Eclipse Modeling Framework (EMF) 的一些效率增强功能。联机帮助中提供了一些有关 EMF 的好文章。因此,我在此简单提一下,使用 eNotify() 方法将更改通知发送到可能侦听此对象的任何侦听器。

清单 1. 发出通知的 WeatherStation 方法
public void setOperationalStatus(String newOperationalStatus)
{
    String oldOperationalStatus = operationalStatus;
    operationalStatus = newOperationalStatus;
    if (eNotificationRequired())
    {
      System.out.println("Emitting a notification for OperationalStatus\n");
      eNotify(new ENotificationImpl(this, Notification.SET,
        ComPackage.WEATHER_STATION__OPERATIONAL_STATUS,
        oldOperationalStatus,
        operationalStatus));
    }
}

我们现在可以直接使用 WeatherStation 接触点测试清单 1 中的代码。此接触点将运行代码:它不会导致您接收通知。这将在稍后发生。完成以下步骤,以测试清单 1 中的代码:

  1. 在 Resource Viewer 窗口中单击 Kickme()
  2. 在 Resource Viewer 窗口中单击 Recalibrate()

帮助中对这两个操作进行了详细说明。调用 Kickme() 方法将导致不确定的温度更改——可将此视为 WeatherStation 中一个可通知的事件!调用 Recalibrate() 方法会随后使得 WeatherStation 接触点脱机,从而可以等待 10 秒,以等待温度稳定下来。这个暂停将随后导致 OperationalStatus 的值从 Available 更改为 Unavailable。对 OperationalStatus 的修改出现在前面清单 1 中所示的 setOperationalStatus() 方法中。

图 2 显示了执行清单 1 中的代码时得到的控制台窗口输出。必须向下滚动控制台窗口内容才能看到此输出。

图 2. 产生了一个通知
产生了一个通知

很好!您已经让通知开始工作了。现在设置另一个接触点来侦听此通知。将使用代理代码进行此工作。

使用代理操作多个接触点

与接触点进行交互比您已经看到的示例更复杂一些,因此,为了避免任何设置相关的问题,以下我们将给出所需的配置步骤。

代理代码测试设置

我在实现这两个接触点正确互操作期间遇到了一些问题,因此下面将列出使其正常工作所需的主要步骤。此内容和有关 WeatherStation 的示例相关帮助内容(名为“Guided WeatherStation demonstration”的部分中)相结合,应该足以帮助您解决问题。

以下步骤与联机帮助中的步骤相关:

  • 准确按照联机帮助中的步骤 1-5 进行操作。
  • 对 EventConsumer 接触点重复步骤 6。
  • 在步骤 7 中,按照清单 2 中所示更改 WeatherStationEventConsumer_testRemote.java 中的代码行。

    此步骤假定您使用 Eclipse 作为测试环境。

  • 严格按照联机帮助中所示完成步骤 8。
清单 2. WeatherStationEventConsumer_testRemote.java 中所需的端口更改
// Unchanged version:
   static final String DEFAULT_FACTORY_SOAP_ENDPOINT_WS = 
      "http://localhost:9080/WeatherStation/services/WeatherStation";
   static final String DEFAULT_FACTORY_SOAP_ENDPOINT_EC = 
      "http://localhost:9080/EventConsumer/services/EventConsumer";

// Modified version:
   static final String DEFAULT_FACTORY_SOAP_ENDPOINT_WS = 
      "http://localhost:8080/WeatherStation/services/WeatherStation";
   static final String DEFAULT_FACTORY_SOAP_ENDPOINT_EC = 
      "http://localhost:8080/EventConsumer/services/EventConsumer";

进行清单 2 中的代码更改时,请确保导出 WeatherStation 项目的 .war 文件。如果未手动保存经过修改的文件,将在导出期间提示您进行此操作。

此时,您应该已经构建了两个接触点(WeatherStation 和 EventConsumer),并将其部署到了 Apache Tomcat。 接下来,按照以下所示运行 WeatherStationEventConsumer_testRemote.java:

  1. 打开 WeatherStation JavaSource 下的 tests 文件夹。
  2. 右键单击 WeatherStationEventConsumer_testRemote.java,然后单击 Run As > Java Application

我最开始运行此程序就出现了错误消息,类似于 Errors in project, continue anyway。我选择了继续,错误消息就再没有出现过了。我另外并没有遇到任何问题,因此这个消息可能是一个旧式调试语句。

此时您应该看到大量控制台输出。清单 3 显示了其中的重要内容。(我已经从中删除了很多不重要的消息)。

清单 3. 控制台输出
Subscribing to OperationalStatus of WeatherStation at 
  </http://localhost:8080/WeatherStation/services/WeatherStation...

Kicking WeatherStation at
  http://localhost:8080/WeatherStation/services/WeatherStation...

Waiting 5 seconds; temperature should read abnormally low

Recalibrating WeatherStation at 
  http://localhost:8080/WeatherStation/services/WeatherStation...

Last OperationalStatus change event received at
  http://localhost:8080/EventConsumer/services/EventConsumer:
<ns1:lastOperationalStatusReceived
  xmlns:ns1="http://wsdmdemo.org/service/resourcemanager">
  Unavailable</ns1:lastOperationalStatusReceived>

Waiting 10 seconds; temperature should read normal and
manager should have received "Available" operational status
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Temperature xmlns:ns1="http://wsdmdemo.org/service/weather-station"
  Duration="PT5.0S"
    LastUpdated="2006-05-24T16:44:57+01:00">79.0</ns1:Temperature>

<ns1:lastOperationalStatusReceived 
  xmlns:ns1="http://wsdmdemo.org/service/resourcemanager">
  Available</ns1:lastOperationalStatusReceived>

清单 3 中的控制台输出显示了代理代码的使用。在 WeatherStationEventConsumer_testRemote.java 程序中,进行以下操作:

  1. 为 WeatherStation 接触点创建 EndpointReference 实例。
  2. 为 EventConsumer 接触点创建 EndpointReference 实例。
  3. 订阅 WeatherStation 的 OperationalStatus 属性。
  4. 调用 WeatherStation 的 kickme() 方法。
  5. 调用 WeatherStation 的 recalibrate() 方法。
  6. 接收通知(在清单 3 中以粗体文本显示)。

调用 recalibrate() 方法将导致 OperationalStatus 的值从 Available 更改为 Unavailable。这将反过来导致 WeatherStation 发出一个通知消息。EventConsumer 接触点在步骤 6 中接收通知。正如您所知,此通知是由前面在清单 1 中看到的代码发出的。

10 秒钟过后,WeatherStation 接触点将 OperationalStatus 值从 Unavailable 更改回 Available,而这将导致 WeatherStation 发出第二个通知,如清单 3 底部所示。EventConsumer 接触点如何处理这些通知是设计问题。我将在本教程稍后讨论这个问题,不过此处请注意,EventConsumer 接触点可能根据通知采取一些直接行动。例如,它可以向网络管理员发送电子邮件。或者,可以调用另一个接触点,以尝试获得有关为何出现该通知的更多信息(后者通常成为根源分析)。

使用代理代码非常方便!它可以非常好地包装和利用两个接触点的功能。现在让我们看看清单 4 中的代理代码。

清单 4. 代理代码摘录
// Create WeatherStation resource and proxy for it.
String strWSEndpoint = (args.length == 0) ? DEFAULT_FACTORY_SOAP_ENDPOINT_WS : args[0];
URI uriWSCreate = new URI(strWSEndpoint);
EndpointReference eprWSFactory = new EndpointReference(uriWSCreate);
ResourceCreationProxy WSFactory = new ResourceCreationProxy(eprWSFactory);
EndpointReference eprWSRes = WSFactory.create("WeatherStation");
WeatherStationProxy WSTouchpoint = new WeatherStationProxy(eprWSRes);

// Create EventConsumer resource and proxy for it.
String strECEndpoint = (args.length == 0) ? DEFAULT_FACTORY_SOAP_ENDPOINT_EC : args[0];
URI uriECCreate = new URI(strECEndpoint);
EndpointReference eprECFactory = new EndpointReference(uriECCreate);
ResourceCreationProxy ECFactory = new ResourceCreationProxy(eprECFactory);
EndpointReference eprECRes = ECFactory.create("EventConsumer");
EventConsumerProxy ECTouchpoint = new EventConsumerProxy(eprECRes, eprWSRes);

清单 4 中的 Java 代码说明了如何创建端点引用。您随后将使用这些引用来调用关联的接触点。清单 5 表明您如何实际调用接触点方法——即 WSTouchpoint.kickme()WSTouchpoint.recalibrate()

清单 5. 用于访问接触点方法的代理代码
System.out.println("Kicking WeatherStation at " + 
DEFAULT_FACTORY_SOAP_ENDPOINT_WS + "...");
WSTouchpoint.kickme();
System.out.println("Waiting 5 seconds; temperature should read abnormally low");
Thread.sleep(5000);
dump(WSTouchpoint.getResourceProperty(
  new QName("http://wsdmdemo.org/service/weather-station", "Temperature")));

System.out.println("Recalibrating WeatherStation at " + 
  DEFAULT_FACTORY_SOAP_ENDPOINT_WS + "...");
WSTouchpoint.recalibrate();
Thread.sleep(3000);

System.out.println("Temperature read from WeatherStation at " + 
  DEFAULT_FACTORY_SOAP_ENDPOINT_WS + ":");
dump(WSTouchpoint.getResourceProperty(new 
  QName("http://wsdmdemo.org/service/weather-station", "Temperature")));
System.out.println("Last OperationalStatus change event received at " + 
  DEFAULT_FACTORY_SOAP_ENDPOINT_EC + ":");
dump(ECTouchpoint.getResourceProperty(new 
 QName("http://wsdmdemo.org/service/resourcemanager", "lastOperationalStatusReceived")));
System.out.println("Waiting 10 seconds; temperature should read normal and");

我刚刚所进行的讨论说明了代理代码让您如何以编程方式使用接触点。那么,可以如何在操作上下文中使用代理代码进行通知管理呢?

实际应用中的代理代码

很多管理系统产品通常都分为多个功能区域,如故障、配置和性能等区域。事实上,国际标准组织 (ISO) 已定义了一系列管理功能区域:

  • F 故障管理
  • C 配置管理
  • A 帐户管理
  • P 性能管理
  • S 安全管理

这些区域通常归类于其首字母缩写 FCAPS 下。此类功能区域的标准定义的价值在于,可作为供应商和用户等的指导方针。

通常有各种专用于这些功能区域的服务器样式应用程序,因此经常会存在随时待命准备接收来自托管实体的事件的故障服务器。仔细考虑一下,后者或多或少地说明了 EventConsumer 接触点的角色。

事件(如清单 3 中所示)在操作 IT 上下文中可能非常重要。事件报告的一个常见原因是由于网络链路故障造成的。图 3 显示了一个互连网络示例。图 3 中的每个子网(Network A、Network B 和 Network C)中的用户都可以使用可用链路直接进行通信。

现在,假定 A 和 B 之间的链路出现故障。网络用户可能看不到明显的变化。不过,假定通信流量被重新路由到其他链路,则这些链路上可能出现拥堵。而正是由于这个原因,生成事件报告并迅速对其做出反应才变得非常重要。

因此,对于图 3,将看到生成一个事件(与清单 3 中所示类似)。故障管理器将对此事件进行记录(例如,记录在数据库中),并随后向负责网络的人员报告。

图 3. 互连网络
互连网络

更加智能化的事件管理应用程序将尝试确定何时服务可用但响应能力下降。这种类型的分析将尝试在事前(而不是事后)检测或者(更好的情况下)防止出现故障。服务响应能力逐渐下降(例如,IPTV、网络等)的一个常见原因是金属接触面腐蚀。随着问题逐渐恶化,这种腐蚀情况会导致出现错误。而这最终会导致服务水平严重下降。

这些事件处理操作通常由 IT 管理应用程序(如图 1图 3 中所示的应用程序)执行。通常,此类应用程序中最难的部分是对托管实体发出的很多消息进行详细审查。将精华和糟粕分开是 IT 管理挑战的一个主要部分!

是否会遇到通知“风暴”呢?

简单来说,的确如此!为接触点配备了发出通知的功能后,通常最好考虑一下通知整合的需求。为了说明这一点,让我们假定在清单 3 的代码中,由于存在软件错误,WeatherStation 接触点开始无休止地调用 Recalibrate() 方法。这将导致出现与 OperationalStatus 属性更改相关的不间断通知流。

那么,自主管理应用程序会是什么样子呢?


自主管理器:抽象需求

以下是期望自主管理器满足的一些典型需求:

  • 访问和控制很多接触点
  • 发现接触点
  • 接收重要 通知

要注意的第一点是,此列表并不全面。管理应用程序通常又大又复杂,经常是通过多年逐步开发形成的。这些需求的意义在于,清单 4清单 5 提供了基本管理器应用程序的入手点。以第 1 点为例,可以看到,能够使用清单 4清单 5 中的代理代码来访问为其实例化了端点引用的任何接触点并与之进行交互。

使用基于 Eclipse 的接触点资源查看器时,实际上就是在与该接触点交互。在网络管理中,这通常称为元素管理器:仅访问一个托管实体的属性。不过,通过代理代码,您可以跨越单个接触点的限制,以新的有趣方式将其组合在一起。管理器要负责为此机制提供平台来将托管实体组合在一起。

另一个重要的管理器需求是动态发现托管实体的需求。让人意外的是,很多商业管理系统并不提供发现机制,而需要手动输入所有托管实体的详细信息和位置。仔细看一下清单 4清单 5,您会发现我使用 Java 代码时采用的正是这个方法。Web 服务包括统一描述、发现和集成(Universal Description, Discover, and Integration,UDDI)标准,该标准支持对 Web 服务进行发现和描述。这种情况下的 Web 服务自然就是接触点。

再回头看一下清单 3,会发现通知是以有些盲目的方式报告给代理代码的。这可能会产生很多数据!通常,自主管理器仅希望接收重要的通知。也就是说,接触点需要负责对通知进行筛选。

简单自主管理器的结构

再看看清单 4清单 5,您会开始发现简单自主管理器的一些重要功能元素:

  • 发现和映射接触点
  • 实例化接触点端点
  • 调用接触点方法
  • 接收接触点通知
  • 恰当地响应接触点通知
  • 破坏接触点端点

在实际操作中,自主管理器和接触点间的交互倾向于遵循定义良好的工作流。过去,这些工作流是采用手动编码方式创建的。幸运的是,现在出现了一个相对较新的语言,称为业务流程执行语言(Business Process Execution Language,BPEL),可用于表示和自动化工作流。BPEL 在自主计算和 IT 管理中扮演重要的角色。


结束语:自主计算管理价值链的说明

自主计算是软件实体真正地进行自我管理。接触点和使用工具的托管实体是这个大厦中的砖瓦。传统 IT 基础设施一直注重快速设置和运行服务,然后根据情况被动地修复问题。现代 IT 的普遍性特征使得这种被动方法显得问题重重,从长远来看可能站不住脚。通过 AIDE 的各种效率增强功能,可帮助构造自主计算管理价值链的元素。

自我管理和主动管理的一个关键元素是有效地处理通知。AIDE 利用强大的 EMF 来提供高效的通知管理。侦听器仅“调整”为接收通知并恰当地做出反映即可。

对于 AIDE,多接触点的操作也相对简单,可以将其作为简单自主管理应用程序的基础使用。自主计算管理价值链越往上,抽象级别也会随之升高。这意味着各个接触点的底层细节就不再那么重要了——例如,如果管理器启动了多个设备的软件上载,则需要由接触点负责有效地执行此上载工作。管理器希望收到的是一个简单的成功/失败报告,也可以是进程指示。

工作流是 IT 管理的一个关键元素,可帮助支持复杂网络正常运行。过去,此类工作流是使用昂贵的专用代码实现的。BPEL 提供了一个新标准,用于改进此类工作流的创建、使用和维护工作。本教程的后续教程将讨论自主计算上下文中的这些主题和其他一些内容。

参考资料

学习

获得产品和技术

  • Autonomic Computing Toolkit:此工具包中包含了一系列 IBM 自我管理自主计算技术组件、工具、场景和文档,专门为希望了解自主行为并在其产品和系统中进行采用和开发的用户而设计。
  • IBM Autonomic Integrated Development Environment (AIDE):一组符合 Web 服务分布式管理(Web Services Distributed Management,WSDM)标准的软件开发工具。其中包括 IBM Manageability Endpoint Builder(用于构建允许产品公开易管理接口的端点)和 IBM Manageability Endpoint Simulator(以前称为 IBM Touchpoint Simulator)等工具。
  • Java Management Extensions:下载用于管理用途的 Java API。
  • Java 2 Platform, Standard Edition:下载此平台,并了解关于 J2SE 的更多信息;这是用于在桌面和服务器上进行应用程序开发和部署的完整环境。
  • Apache Tomcat version 5.0:访问此网站,以获取 Apache Tomcat 最新发布的内容。
  • IBM 试用产品下载:使用 IBM 试用软件开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services, XML, Java technology
ArticleID=203926
ArticleTitle=使用 AIDE 实现高效率,第 4 部分: 接触点通知与简单管理器
publish-date=03262007