IBM WebSphere Service Registry and Repository 简介,第 2 部分: 体系结构、API 和内容

这是介绍 WebSphere Service Registry and Repository 功能、体系结构和治理模型的系列中的第二篇文章。本文提供 WebSphere Service Registry and Repository 及其功能的体系结构概述。其中描述了 WebSphere Service Registry and Repository 组件如何协同工作以广告、查找、检索、管理和治理服务元数据。

Barbara McKee, 集成架构师, EMC

Barbara McKee 是 WebSphere Service Registry and Repository 的集成架构师,负责 WebSphere Service Registry and Repository 与 IBM SOA Foundation 的其他部分的交互。过去十年来,她致力于将松散耦合和动态性注入企业应用程序的技术,并对 UDDI 标准、Web 服务互操作性和业务规则作出了贡献。



Marc-Thomas Schmidt, ESB 首席架構師, EMC

作者照片Marc-Thomas Schmidt 是 IBM 的傑出工程師 (Distinguished Engineer),已從事了十多年 IBM 的業務整合技術方面的工作,涉及到的領域包括從工作流管理系統,到面向訊息的高級中間件,再到業務流程管理技術等方面。他目前負責 IBM 的 ESB 技術的技術架構方面的工作。



John Colgrave (colgrave@uk.ibm.com), 高级软件工程师, IBM

John Colgrave 是 IBM Hursley Laboratory 的高级软件工程师,在设计和构建中间件方面拥有超过 20 年的经验。他目前是从事 IBM WebSphere Service Registry and Repository 项目的架构师。



Duncan Clark, IT 架构师, EMC

Duncan Clark 是 WebSphere Service Registry and Repository 的 IT 架构师,专门研究 SOA 生命周期中的 WebSphere Service Registry and Repository 治理方面。过去十年来,他从事过面向分布式服务的系统方面的工作,范围从防卫模拟到知识管理一直到协作门户。过去三年来,Duncan 一直在开发面向服务的解决方案,用于支持生命科学和注册中心市场中的治理和遵从性。



2007 年 5 月 29 日

引言

IBM WebSphere® Service Registry and Repository(以下称为 Registry and Repository)是用于服务交互端点描述的主元数据存储库。作为服务元数据的集成点,Registry and Repository 建立了用于查找和管理服务元数据的集中位置。一旦将服务元数据放置到 Registry and Repository 中,可见性就得到了控制,版本就得到了管理,建议的更改就得到了分析和理解,使用就受到了监视。

在前一篇文章中,您探索了 Registry and Repository 的概念和功能,以及 Registry and Repository 在整个面向服务的体系结构 (SOA) 生命周期中的作用。本文提供 Registry and Repository 体系结构的概述和帮助您利用 Registry and Repository 功能来广告、查找、管理和治理服务的技术详细信息。


WebSphere Service Registry and Repository 体系结构组件如何协同工作

让我们首先简要了解所有关键构件如何在 WebSphere Service Registry and Repository 体系结构中组合在一起(请参见图 2)。WebSphere Service Registry and Repository 是一个 Java™ 2 Platform Enterprise Edition (J2EE) 应用程序,运行于 WebSphere Application Server 上并使用关系数据库作为服务元数据持久性的支持存储区。您可以使用 J2EE 无状态的会话 Bean 或 Web 服务来以编程方式与 Registry and Repository 交互,也可以使用 Registry and Repository Web 应用程序或 WebSphere Service Registry and Repository Eclipse 插件来通过用户界面与 Registry and Repository 中的服务元数据交互。

Registry and Repository 包含 XML 文档形式的服务元数据构件、代表不受 Registry and Repository 中的文档支持的服务元数据实体的概念、分配给这些服务元数据构件和实体的语义元数据,以及构件和实体之间的关系。您可以使用编程和用户界面来对内容执行基本的 Create、Retrieve、Update 和 Delete (CRUD) 操作,以及对内容执行基于 XPATH 表达式的灵活查询。

Registry and Repository 还提供了许多治理功能,您可以使用它们来管理和治理您的服务元数据。本系列的第 3 部分将重点讲述 WebSphere Service Registry and Repository 治理模型和功能。

以下几个部分将描述本文涵盖的关键 WebSphere Service Registry and Repository 体系结构元素:

  • Registry and Repository 组件描述支持 Registry and Repository 功能的体系结构元素。
  • WebSphere Service Registry and Repository 内容模型解释可放入 WebSphere Service Registry and Repository 中和从中检索的信息。
  • WebSphere Service Registry and Repository 界面讨论可用于与 WebSphere Service Registry and Repository 交互的编程和用户界面。本系列文章的第 3 部分将更详细地讨论此主题。
图 1. WebSphere Service Registry and Repository 体系结构
WebSphere Service Registry and Repository 体系结构

Registry and Repository 组件

本部分逐步向您介绍 WebSphere Service Registry and Repository 体系结构的主要组件,以帮助您了解如何能够与 Registry and Repository 交互,并使用自定义的扩展点来扩展其功能。

Registry and Repository 体系结构包含许多核心组件,它们结合起来使 Registry and Repository 能够响应本系列第1 部分“WebSphere Service Registry and Repository 在 SOA 生命周期中的一天”(请参见参考资料部分)所列出的场景。

Registry and Repository 是一个 WebSphere J2EE 应用程序。因此,它利用了 WebSphere Application Server 所提供的基于角色的访问控制。当在您的环境中将 Registry and Repository 部署为企业范围的应用程序时,建议启用该安全性。这会启用基于角色的视图和访问控制,后者与许多 Registry and Repository 治理功能绑定在一起。

Registry and Repository 使用关系数据库作为其支持存储区。您可以将任何 XML 文档放在 Registry and Repository 中,但是有些类型非常特殊,例如 WSDL 和 XSD。这些特殊类型已进行建模,当将这其中某种特殊类型的文档加载到 Registry and Repository 中时,则会将其分解为更细粒度的内容模型。

WebSphere Service Registry and Repository 核心。WebSphere Service Registry and Repository 为服务元数据同时提供了“注册中心”和“存储库”功能。存储库允许用户存储、管理和查询包含服务描述的服务元数据构件(WSDL、XSD、WS-Policy、SCDL 或 XML 文档)。它不仅很好地处理包含服务元数据的文档,而且还提供那些文档内容的细粒度表示形式(例如,WSDL 文档中的 port和 portType)。而且它还提供注册中心功能,通过用户定义的属性、关系和分类器来扩展已注册的服务声明和派生内容模型元素。Registry and Repository 提供了一个丰富的查询界面,当您希望查找某个服务端点或服务界面时,该查询界面将利用那些扩展。

每当 Registry and Repository 检测到对注册中心或存储库内容的更改,它就调用所有已注册的验证和通知插件。两种插件都被视为扩展机制,您可使用它们来自定义 Registry and Repository 如何对更改作出反应。您可以编写并注册验证功能,并在对内容做出更改时由 Registry and Repository 执行。例如,您可以编写并注册一个检查服务定义完整性的验证功能。您还可以编写并注册通知功能,以将更改传播到存储库内容。Registry and Repository 附带了现成的 JMS 通知插件。Registry and Repository 具有一个订阅功能,允许用户在使用通知中注册他们的兴趣。

治理功能。Registry and Repository 支持一组丰富的可扩展治理功能,包括以下能力:为所治理实体建立您自己的服务生命周期模型、定义服务状态之间的有效转换、编写和插入验证器以保护状态之间的转换,以及指定(通知)作为转换结果而执行的操作。它还提供相关的界面来分析 Registry and Repository 内容更改所产生的影响,并提供了对此类更改的审核。WebSphere Service Registry and Repository 的治理模型将在本系列的第 3 部分中进行介绍。

分类。分类在与 Registry and Repository 的许多交互中起主要作用。它们允许您使用公司术语来标注服务端点和服务定义的各部分。Registry and Repository 使用它们来捕获治理状态。您可以使用它们来隔离在不同环境中部署的服务端点。Registry and Repository 分类系统被捕获在 OWL 文档中,您可以使用管理界面来将这些文档加载到 Registry and Repository 中。然后您可以使用来自这些分类系统的值来对 Registry and Repository 实体分类,从而允许您执行基于分类的查询,并基于分类来限制访问。

访问控制模型。除了 WebSphere Application Server 所提供的基于角色的访问控制外,Registry and Repository 还支持细粒度的访问控制模型,使您可以定义哪些用户角色能够在对应的构件上执行特定类型的操作。您可以在 XACML 中捕获访问控制规则,并引用生命周期状态和诸如分类及属性等语义标注。这允许您按业务领域限制服务可见性,或者限制哪些用户角色能够将服务转换到某些生命周期状态。本系列的第 3 部分将更详细地讨论该细粒度访问控制模型。

Registry and Repository 管理界面。这些界面支持 Registry and Repository 内容的导入和导出以便与其他 Registry and Repository 存储库交换,并提供基于 JMX 的 API,用于 Registry and Repository 的配置和基本管理。这些界面支持与访问控制模型和分类系统进行交互。

编程界面。您可以使用 Java 和 SOAP API,从而以编程方式与 Registry and Repository 交互。这些 API 提供基本的 CRUD 操作、治理操作和基于 XPath 的灵活查询功能。您可以使用 SOAP API 来传递使用 XML 数据结构的内容,或者使用 Java API 来传递使用 SDO 数据图的内容。

用户界面。提供了两个界面来支持您与 Registry and Repository 交互。基于 Servlet 的 Web 用户界面 (UI) 支持是代表不同角色的用户与 Registry and Repository 进行交互的主要方式。此 UI 支持查找和发布场景、元数据管理和分析场景以及支持 SAO 治理的功能。开发人员角色可以通过一个 Eclipse 插件来使用 Registry and Repository,该插件支持从基于 Eclipse 的开发工具或管理控制台查找、检索和发布服务元数据(请参见上面的图 2)。


WebSphere Service Registry and Repository 内容模型

本部分提供 WebSphere Service Registry and Repository 内容模型的相当简略的描述。有关完整描述,请参见 WebSphere Service Registry and Repository 产品信息中心的 WebSphere Service Registry and Repository Programming Model(请参见 参考资料)。

该内容模型具有表示服务描述构件和服务描述元数据的实体。所有 WebSphere Service Registry and Repository 内容元素都有一个由 WebSphere Service Registry and Repository 分配的 URI、名称和描述。

图 2. Service Registry and Repository 内容
Service Registry and Repository 内容

服务描述实体

Registry and Repository 中存储和管理三种服务描述实体 (Service Description Entity)。物理文档 (Physical Document) 是称为服务元数据构件的 XML 文档。逻辑派生 (Logical derivation) 是内容的更细粒度部分,是在将某些类型的物理文档加载到 Registry and Repository 中时分解产生的。概念 (Concept) 是通常输入的普通实体,代表未由 Registry and Repository 中的某个文档表示的任何内容。您可以与所有三种类型的服务描述实体交互,在查询中使用它们,应用服务标注,以及建立它们之间的往来关系。

物理文档

让我们首先讨论 WebSphere Service Registry and Repository 内容模型的最基础构件:服务元数据构件文档(物理文档),如 XSD 或 WSDL 文件。这些服务元数据文档在 Registry and Repository 中进行存储和管理。我们将表示那些文档的注册中心对象所构成的粗粒度模型称为物理模型。文档在 Registry and Repository 内容模型中是可进行版本控制的对象,这基本上意味着,除了 URI、名称和描述外,它们还有一个版本属性。

您可以在 Service Registry and Repository 中存储任何 XML 服务元数据构件类型,并获得更广泛的可见性、重用、管理和治理好处。

逻辑派生

Registry and Repository 为许多知名 SOA 元数据类型提供了高级功能。这些关键的 Registry and Repository 元数据文档类型为:WSDL、XSD、WS-Policy 和 SCDL。对于这些文档类型,Registry and Repository 提供特殊服务,包括在接收时将文档“分解”为逻辑派生 或一组逻辑对象,以使用户能够超越所存储的文件边界探索 Registry and Repository 内容。逻辑对象不可以进行版本控制。

对于关键文档类型,Registry and Repository 还定义了一些预定义的属性,并设法检测与其他关键文档的关系,同时还在适用的情况下在内容模型中记录那些关系。例如,XSDDocument 有一个 targetNamespace 属性以及关系 importedXSDs、redefinedXSDs 和 includedXSDs。当在 Registry and Repository 中创建一个某种关键类型的文档条目时,将会检查它与其他关键类型构件之间的关系。如果这些相关构件还未在 Registry and Repository 中表示,则还会添加它们,在任一种情况下,都会记录构件之间的关系。

逻辑派生集构成了 Service Registry and Repository 的逻辑模型。该逻辑模型具有诸如 portType、port 以及与 WSDL 文件相关的消息、与 XSD 文档相关的 complexType 或 simpleType 等实体。逻辑模型的元素具有属性和关系,用于反映其基础文档中定义的特征子集。例如,WSDLService 元素有一个 namespace 属性和一个与它所包含的 port 的关系。需要重点指出的是,文档分解的所有各个结果聚合为单个 逻辑模型,该模型不仅表示各个文档的内容,而且还表示不同文档中内容之间的关系。

Registry and Repository 使用 XMLDocument(一种通用文档类型)来存储其他类型的服务元数据。XMLDocument 类型的文档不分解为逻辑模型。

概念

Registry and Repository 中还有另一种实体,在上图中不严格地称为概念。Registry and Repository 使用概念来表示在 Registry and Repository 中没有物理文档的任何内容。可以使用概念来表示对某个其他元数据存储库中内容的引用,例如 Portlet 目录中的某个 Portlet 或资产存储库中的某项资产。还可以使用它来将物理构件分组在一起,以将它们作为一个单元来进行治理;例如,可以对概念进行版本控制。

服务描述元数据

除了与服务元数据文档直接相关的内容外,Registry and Repository 还支持许多其他元数据类型,您可以使用它们来扩展服务描述实体以解释其语义。我们将那些元数据称为服务语义元数据。

Registry and Repository 支持三种类型的服务语义元数据类型:属性、关系分类器。您可以使用所有三种类型来扩展物理或逻辑模型中的实体以及概念。

可以使用服务语义元数据来:

  • 将一个“businessValue”属性与表示一个 WSDL 文件的物理模型实体关联。
  • 在表示“portType”的逻辑模型中的某个实体与表示 XML 文档的物理模型中的某个实体之间定义新关系“makesUseOf”。
  • 创建一个分类器“importantThings”,并将其与逻辑模型中的某个“port”实体和表示“Policy”文档的物理模型中的某个实体关联。这支持语义查询针对服务元数据的各个元素,以及在做出更改前进行有意义的依赖项分析。

属性

属性是与任何服务描述实体 (Service Description Entity) 关联的简单名/值对。有些属性由系统分配,如唯一 ID、所有者、上次更改该服务实体的时间。这些系统分配的属性无法更改。其他属性是通过将关键类型的服务描述文档“分解”为其逻辑模型来派生的。此类属性包括名称和命名空间。有时您允许更改这些系统分配的值。您也可以创建自己的属性。这些属性称为用户定义的属性。可以使用用户定义的属性来作为简单的、非结构化和无类型的扩展机制。属性可以在查询中使用,并且可用于建立细粒度的访问控制。

关系

关系将一个源服务描述实体与一个或多个目标服务描述实体绑定在一起。每个关系都被赋予一个名称。一个源只允许与给定的名称具有单个关系。有些关系由 Registry and Repository 在“分解”关键类型文档期间分配。将一个文档导入另一个文档而在 XSD 文档之间建立的关系就是此类系统分配的关系。您也可以定义自己的关系。例如,您可以:

  • 将表示外部对象的概念与使用用户定义的关系的服务关联起来。
  • 将所有要治理的服务描述文档作为一个单元与某个可治理的实体关联起来。
  • 将监视策略与服务端点关联起来。

分类

您可以将分类系统加载到 Registry and Repository 中,然后可以在其中使用它们来对服务描述实体应用语义含义。分类系统是使用 Web 本体语言(Web Ontology Language,OWL)来编码的文档;有关详细信息,请参见参考资料。虽然任何有效的 OWL 文档都可用作分类系统,但目前 Registry and Repository 中仅利用了 OWL 表达能力的一个很小子集。Registry and Repository 将 OWL 类表示为分类器,并在建立分类器层次结构时解释那些类之间的 subTypeOf 关系。诸如数据或者表示属性或其他内置 OWL 关系的其他 OWL 概念被忽略。

分类系统作为整体被导入 Registry and Repository,并且无法通过 Registry and Repository 功能来进行修改。更新是通过导入本体的修改版本来实现的。基础本体中的任何类都可以用作分类器;可以使用同一分类器来对多个实体进行分类,并且一个实体可以与多个分类器关联。

总之,您可以使用用户定义的属性和关系来自定义 Registry and Repository 元模型中提供的预定义属性和关系。您可以向 WSDLDocument 添加属性,或者为概念配置属性和关系以表示其结构。为简化自定义 Registry and Repository 实体的过程而提供了一种简单的“模板”机制,该机制允许您创建 XML 模式来捕获与特定类型的概念实体相关联的属性和关系的定义。然后您可以将该模板与该实体类型关联。然后与该类型实体的所有交互都将被“模式化”以匹配该模板,从而指出在与该类实体交互时相关的属性和关系。


WebSphere Service Registry and Repository 界面

您可以使用 Registry and Repository 提供的编程或用户界面来与其内容交互并对其内容进行管理。在本部分,您将了解这些界面,以便能够从 Registry and Repository 查找和检索服务元数据、识别服务之间的关系、保存服务描述,并在整个服务生命周期中对服务进行治理。

CRUD 操作

使用 WebSphere Service Registry and Repository 界面,您可以创建、检索、更新和删除由 Registry and Repository 管理的文档和概念。您不能删除逻辑模型中的实体。您只能通过更新包含逻辑实体的文档来更改这些实体。概念不可创建、检索和删除。您还可以更改所有实体类型的语义扩展。

查询界面

您可以通过两种方式与 Registry and Repository 查询界面交互。可以使用通过参数来配置的预定义查询(例如,具有分类器 X 的所有 WSDL);也可以编写自己的基于 XPath 的查询。

当您使用基于 XPath 的查询界面时,您将创建 XPath 表达式,该表达式确定将返回的托管实体类型,以及捕获与所需对象相关的托管元素的过滤器。还为您提供了扩展以便在查询中包括分类标注。例如,如果您要查找如下所有 WSDLService:它们有一个引用 bindingport,该 binding 又引用名为“StockQuotePortType”的 portType,则可以使用以下查询表达式:

//WSDLService[port/binding/portType/@name='StockQuotePortType'];

验证函数

Registry and Repository 允许您注册验证函数,它们将在对 Registry and Repository 内容执行基本 CRUD 操作时运行,并且也是在治理模型的上下文中运行。验证函数一定不能有副作用,并且必须返回可用于否决更新的 Boolean 结果。

事件通知

Registry and Repository 提供基本的事件通知功能,允许使用者注册它们对任何 Registry and Repository 内容更改的兴趣。最初,通知将基于 JMS 事件发布。这些事件标识了更改的类型,并包含指向所更改对象的指针。

Registry and Repository 同时为验证和通知提供了一些预定义内容。示例包括电子邮件通知功能(允许用户在有趣事件发生时请求发送电子邮件)和可在验证场景中使用的 WS-I 遵从性检查器。


支持的 API

IBM 支持两种风格的 API,您可以使用它们来与 Registry and Repository 交互:基于 Java 的 API 和基于 SOAP 的 API。两者都支持发布(创建和更新)服务元数据构件和与那些构件关联的元素据、检索服务元数据构件、删除构件及其元数据和查询 Registry and Repository 内容。

编程 API 使用服务数据对象(Service Data Object,SDO)来捕获内容模型中固有的数据图,从而允许访问物理文档、物理文档的逻辑部分以及概念。SOAP API 使用 XML 文档来以类似的方式表示服务数据对象,从而同时与物理和逻辑模型中的内容结构通信。

对于粗粒度和细粒度的查询,您可以在 Query API 中使用 XPath 表达式来执行搜索。查询可以使用语义标准、属性和物理服务元数据构件的全部或部分来执行。您可以请求返回元数据的片段(例如端点)、返回所有元数据以及同时返回元数据和文档。除了基于 XPath 的“自由格式”查询外,还有一组预先封装好的查询可供您用于处理通过 Registry and Repository 内容模型的常见路径。

Governance API 允许您分析特定构件更改所产生的影响。可以使用一组预定义的影响查询,以帮助您按照流行模式在 Registry and Repository 内容中导航,例如 WSDL 文件所导入的模式或使用 XSD。此外,您可以使用治理操作来请求所治理实体的生命周期转换,以及请求对特定内容更改感兴趣的用户的电子邮件通知配置。

Registry and Repository 还提供一个基于 JMX 的管理 API (Administration API),该 API 支持基本的配置以及元数据的加载和管理以支持存储库内容,例如分类和生命周期管理。该管理 API 允许您加载将用于对所治理实体的生命周期建模的状态机定义,以及加载 OWL 中描述的分类系统。此外,该管理 API 还支持注册验证功能插件或其他通知提供程序。正如前面所解释过的,验证功能可用于控制基本 CRUD 操作,以及在所治理实体的生命周期状态转换上下文中使用。

Registry and Repository 附带了一个发布有关 JMS 主题更改事件的缺省通知处理程序。事件指定了事件的类型(创建、更新、删除或转换)、所影响的构件(通过其 URI 来标识)和其他一些有关该构件的信息。为避免与访问控制规则冲突,目标构件的实际内容并不随事件一起提供,而是必须单独检索。

审核

提供了一个记录有关 Registry and Repository 更新信息的简单审核功能。

用户界面

提供了两个访问 Registry and Repository 的用户界面。主界面是一个与 Registry and Repository 运行时一起部署的 Web 应用程序。此界面支持所有用户角色,提供查找、浏览、检索、发布和标注功能,以及诸如导入/导出和影响分析等治理活动。作为一个 Eclipse 插件提供了此用户界面的一个子集,以满足使用基于 Eclipse 的工具的开发人员和分析人员用户的需要。该 Eclipse 插件主要用于查找、浏览、检索和发布功能。基于 Web 的用户界面还用于执行服务元数据管理和治理。

Web 界面支持向用户展示 Registry and Repository 内容的可自定义视图。一组用户界面定义文件描述了构成该 Web 界面的各个组件的内容和布局。支持“特定于用户角色的透视图”的概念。Registry and Repository 附带了一组用于最常见用户角色的预定义透视图,但是您可以自定义预定义透视图或引入新的、特定于角色的透视图。


结束语

本文提供了 Registry and Repository 及其功能的体系结构概述。您已了解了体系结构组件以及它们在支持广告、查找、检索、管理和治理服务元数据方面如何相关。您了解了构成 Registry and Repository 内容模型的实体和元数据类型。对 Registry and Repository 所提供界面的概述将使您能够以编程方式与其内容交互和使用某个用户界面。本系列的第 3 部分将重点讲述 Registry and Repository 中可用的治理功能。


致谢

要特别感谢以下人士对策划 WebSphere Service Registry and Repository 体系结构所做的贡献:Raymond Ellis、Andrew Hately、Ed Kahan、Dan Wolfson。

参考资料

条评论

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=WebSphere
ArticleID=226997
ArticleTitle=IBM WebSphere Service Registry and Repository 简介,第 2 部分: 体系结构、API 和内容
publish-date=05292007