内容


设计和开发更高效的 SOA,第 5 部分

利用 Rational Software Architect 8.0.2 更迅速、更准确地构建面向服务的解决方案

系列内容:

此内容是该系列 # 部分中的第 # 部分: 设计和开发更高效的 SOA,第 5 部分

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

此内容是该系列的一部分:设计和开发更高效的 SOA,第 5 部分

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

简介

本系列的前几篇文章探讨了 Rational SOMA 2.9(下文简称为 “Rational SOMA”)和 IBM Rational Software Architect for WebSphere Software 7.5.4 及其更高版本(下文简称为 “Rational Software Architect”)支持服务解决方案设计原则的方法。因此,您应该已经使用了这种方法和这个工具创建了明确指定、组织良好的服务解决方案设计。那么接下来,应该如何处理服务模型呢?

本文演示了 Rational Software Architect 8.0.2 为从服务模型自动创建软件服务工件而提供的部分支持。具体来说,我们将演示 Rational Software Architect 创建服务组件架构 (SCA) 工件的功能。其他文章(例如之前包含 4 个部分的 developerWorks 系列文章向 SOA 转型)描述了如何使用 Rational Software Architect 创建其他类型的服务和软件开发工件。

首先,我们将简要讨论 SCA,随后将描述 SoaML 服务模型元素与 SCA 元素之间的一些映射关系。在确立了这样的背景之后,我们将介绍 Rational Software Architect 对于从服务模型转换到 SCA 工件的支持。在本文的最后,我们提供了一个示例,演示 Rational Software Architect 附带的示例服务设计模型略加修改后的版本生成的 SCA 输出。

服务组件架构概述

Open SCA 规范描述了构建可重用软件服务的一种模型。这组规范包含组装模型规范,列举了一些基本 SCA 概念,描述了如何构造 SCA 配置文件。其中提供的部分规范定义了如何使用特定的实现技术和框架来构造 SCA 组件,例如 Java、C++、BPEL、PHP 和 Spring。以下几个小节简要介绍了与本文最为相关的 SCA 元素,其中包括:

  • 组件
  • 实现
  • 接口
  • 组合

SCA 组件

SCA 的基本构造块就是组件。如图 1 所示,一个组件可以提供一项或多项服务,可以有一个或多个引用,它可以通过这些引用来使用其他软件元素提供的服务,包括其他 SCA 组件、传统 Web 服务和企业 Java Bean。SCA 组件可以使用多种开发技术来实现。它可利用广泛的通信协议与其他组件通信,从最常用(也是性能最低下)的 SOAP 到实现了 SCA 容器的运行时应用服务器特有的高性能本机协议。除此之外,SCA 组件还支持依赖性注入,利用这种能力在部署时定义其可配置属性,例如,指定组件支持的策略的特定实现。

图 1. SCA 组件
SCA 组件提供服务和使用引用,同时支持使用多种技术进行服务实现、绑定和接口定义
SCA 组件提供服务和使用引用,同时支持使用多种技术进行服务实现、绑定和接口定义

实现

组件实现是提供服务和/或引用其他位置提供的服务的业务功能的具体实现。除此之外,实现可能有一些可设置的属性值。SCA 组件可使用 Java、C+ 或 COBOL 等编程语言实现。此外,也可使用 SCA 组合公开的服务加以实现(下文将介绍组合)。

接口

SCA 接口定义一种或多种业务功能。这些业务功能由 SCA 服务提供,供 SCA 引用使用。SCA 服务提供了一个接口的业务功能,供其他组件使用。

接口类型系统

open SCA 规范目前支持使用以下接口类型系统来描述 SCA 接口:

  • Java 接口
  • WSDL 1.1 portType
  • WSDL 2.0 接口

SCA 在接口类型方面可扩展。例如,支持 IBM 大型机上的 CICS(客户信息控制系统)的 IBM SCA 实现支持使用 CICS Channel 和 Commarea 以及 WSDL 定义接口。

远程和本地接口

SCA 接口可以是远程的或本地的。远程服务可由在与服务本身不同的操作系统地址空间内运行的客户端调用(这同样适用于在与服务不同的机器上运行的客户端)。SCA 组件的服务是否是远程的是由服务接口定义的。对于 Java 而言,这是通过为 Java 接口添加 @Remotable 注释定义的。WSDL 定义的接口始终是远程接口。

双向接口

SCA 支持服务提供者与消费者之间的双向通信。 这是通过支持回调接口的概念实现的。如果一个接口元素包含回调,则可以将整个接口称为 “双向接口”。

如果一项 SCA 服务使用双向接口元素定义,则提供服务的组件将实现该接口,并使用回调接口与服务消费者进行通信。

如果一项 SCA 引用使用双向接口元素定义,则使用引用的组件将使用该接口与被引用的服务通信(也就是说,它使用这个接口)。使用引用的组件将实现回调接口。

如图 2 所示,一个组件上的一项 SCA 服务(图中所示的 “提供者”)和另一个组件上的一项 SCA 引用(图中所示的 “消费者”)可以使用相同的双向接口元素定义。在建模方面来说,它们具有相同的类型。这两个组件可以凭借这种类型兼容的服务/引用来实现相互通信。然而,消费者所提供接口和所需接口的含义与提供者所提供接口和所需接口的含义是镜像关系。我们将这样的引用称为服务的 “共轭”。

图 2. 使用相同的双向接口元素定义的 SCA 服务和引用
SCA 组件可跨使用相同双向接口元素定义的服务/引用对通信。具有引用的组件所实现和使用的接口(也就是使用服务的组件)将与具有服务的组件实现和使用的接口成相反镜像关系或共轭关系
SCA 组件可跨使用相同双向接口元素定义的服务/引用对通信。具有引用的组件所实现和使用的接口(也就是使用服务的组件)将与具有服务的组件实现和使用的接口成相反镜像关系或共轭关系

SCA 组合

SCA 规范提供了组合 (composite) 的概念,用于将 SCA 元素装配为逻辑组。一个 SCA 组合包含一组组件、服务、引用和互联这些要素的连接器。组合中还可包含一组属性,可用于配置组件。图 3 展示了 SCA 组件的概念图。

图 3. SCA 组合
SCA 组合支持装配 SCA 组件、服务、引用、连接和属性
SCA 组合支持装配 SCA 组件、服务、引用、连接和属性

在组合内部,使用那些使用可兼容接口元素定义的成对的服务和引用之间的 “连接器”(通信信道)来连接装配的组件。SCA 提供了 “自动连接” 组件的能力。如果选择了自动连接,则部署组合的 SCA 运行时 (SCA runtime) 将内省组合内的元素,并自动将识别的兼容的服务和引用连接在一起。

组合可使用 SCA 服务和引用与外部元素进行通信。这些服务和引用是使用 “提升” 定义的。提升 (promotion) 涉及将组合的服务和引用连接到装配后的组件的兼容服务和引用。组合实际上会将服务和引用委托给组件的兼容服务和引用。

如图 3 所示,可以使用较低级的组合实现装配于较高级的组合之中的组件。使用方组件仅可连接到被使用组合的服务和引用,并为该组合的任何属性设置值。组合的内部构造对于使用方组件来说是可见的。

将 SoaML 映射到 SCA

阅读过 Jim Amsden 撰写的 developerWorks 文章使用 SoaML 建模或者研究过 Rational Software Architect 附带的示例 SoaML 模型的敏锐的读者可能已经注意到,许多 SoaML 与 SCA 概念都极为相似。举例来说,考虑图 4 所示的 SoaML Participant。Participant 提供服务、发出请求,这与定义服务和引用的 SCA 组件和组合极为相近。SoaML 服务和请求的类型由 ServiceInterfaces 确定,它能实现和/或使用简单 UML 接口。ServiceInterface 可明确映射到 SCA 接口元素,这种元素定义接口和回调接口。此外,SoaML 请求与其 ServiceInterfaces 实现了共轭关系,类似于 SCA 接口元素应用于 SCA 引用时的共轭关系。图 4 中在请求名称中附加了一个波浪线 (~),表明了 SoaML 请求的共轭关系。

图 4. Rational Software Architect 中的一个 SoaML Participant
具有一项服务和 3 个请求的 SoaML Participant。关于 SoaML 与 SCA 之间的映射细节,是通过在 Rational Software Architect 的 SCA 转换配置文件中定义 SCA 原型的属性来捕捉的
具有一项服务和 3 个请求的 SoaML Participant。关于 SoaML 与 SCA 之间的映射细节,是通过在 Rational Software Architect 的 SCA 转换配置文件中定义 SCA 原型的属性来捕捉的

SCA 组件可以定义其实现、意图、策略集和其他详细信息。通过为服务模型应用 SCA 转换配置文件、为 Participant 应用 «SCA» 原型、定义原型属性,可以在 Rational Software Architect 中实现这些方面的建模。图 4 中 Participant 的 SCA 属性值是可见的,通过 Participant 的 Attributes 分段显示在 Rational Software Architect 之中。

图 5 展示了 SoaML 服务模型和 SCA 的某些方面之间的其他相似之处。在这里,我们可以看到 SoaML Participant 的结构图。该图展示了如何连接 Participant 拥有的内部部件来实现 Participant 的服务提供的操作。Participant 将其服务委托给它所拥有的某个部件的服务。

SoaML 与 SCA 之间的映射非常清晰。在本例中,Manufacturer Participant 类似于 SCA 组合。其内部部件映射到组合装配的 SCA 组件。部件之间以及组合与其委托部件之间的连接器 (SoaML ServiceChannels) 映射为 SCA 连接。

图 5. SoaML Participant 结构图
SoaML Participant 结构图。Participant 将其服务委托给一个内部部件。多个部件彼此连接,以实现服务操作。这些概念可映射为装配多个彼此连接的组件的 SCA 组合
SoaML Participant 结构图。Participant 将其服务委托给一个内部部件。多个部件彼此连接,以实现服务操作。这些概念可映射为装配多个彼此连接的组件的 SCA 组合

Rational Software Architect 利用图中所示的这些映射和其他映射将基于 SoaML 的服务模型转换为 SCA 工件。所有永久映射都记录在 Rational Software Architect 8.0 在线帮助中。

将 SoaML 服务模型转换为 SCA

除了作为建模环境之外,Rational Software Architect 还提供了其他强大功能,支持将内容从一个抽象级别转换到另一个抽象级别。例如,该工具包含一组产品化的转换,可原样使用这种转换来支持模型驱动的开发,将工作成果从模型转换为模型、从模型转换为文本(Java、WSDL 等)、从文本转换为模型。Rational Software Architect 还提供了一些工具来支持用户扩展现有转换或创建自己的转换。

本文主要关注如何使用提供的 UML 到 SCA 转换来加速服务解决方案的开发。从 SoaML 到 SCA 的转换的大体步骤如下:

  • 创建 SoaML 服务模型
  • 使用来自 SCA 转换配置文件的适当原型来标记服务模型
  • 创建和配置全新的 UML 到 SCA 转换配置
  • 运行转换

以下几小节内容将介绍上述后三个步骤。

使用 SCA 转换配置文件标记服务模型

Rational Software Architect 提供了一个 SCA 转换配置文件,支持设计人员为服务模型添加特定于 SCA 的标记。该配置文件包含四种原型和一些原型属性。UML 到 SCA 转换将利用这些原型及属性来控制处理。有关详细信息,请参阅 Rational Software Architect 8.0 在线帮助

简而言之,SCA 转换原型可应用于 UML Interface 和 UML Component 元素,以指导转换处理。可对 Interface 元素应用三种原型(«Java»、 «Remote» 和 «WSDL»)来指定 UML 到 SCA 的转换将生成哪种类型的接口描述文件,并引发对恰当的辅助转换的调用(具体来说,就是从 UML 转换到 Java 或从 UML 转换到 WSDL)。正如图 4 所示,为 UML Component 应用 «SCA» 原型会为其添加原型属性。转换将读取属性值,确定所得到的 SCA 元素(无论是 SCA 组合还是 SCA 组件)是否设置了自动连接属性、设置 SCA 元素的策略集和目的、确定 SCA 元素配置为采用哪种类型的实现。在某种情况下(在 SCA 原型的 implementationType 属性设置为 “Java” 时),UML 到 SCA 的转换将调用 UML 到 Java 的转换,为已创建的 SCA 组件生成一个主干 Java 实现文件。

创建和配置 UML 到 SCA 的转换配置

Rational Software Architect 为创建和配置转换配置文件提供了基于向导的支持。Rational Software Architect 在线帮助中更具体地介绍了这种方法。此过程简要概括如下:

  • 选择 Modeling > Transform > New Configuration 菜单项来调用转换配置向导。
  • 在向导的第一页上指定新配置文件的名称、将在您的工作区中的什么位置创建此配置文件,以及您正在配置的转换的类型,在本例中,类型为 UML 到 SCA 转换。
  • 在向导的第二页上选择转换的输入源和目标。源通常是一个服务模型或者一个服务模型的选定元素。目标可以是一个现有 SCA 项目,也可以是使用该向导以互动方式创建的一个项目。
  • 选择 “Finish”。

配置创建完成后,您就可以利用配置编辑器来设置可选属性。对于 UML 到 SCA 的转换,可以设置一个属性来为每个 SCA 组件生成实现,并设置另一个属性为转换源中发现的任何 WSDL 生成 Java 代码。这些 “在转换源中发现” 的 WSDL 包括:

  • UML 到 SCA 的转换通过服务模型中定义的 UML 接口生成的 WSDL;以及
  • 由服务模型中的 UML 元素引用的现有 WSDL。

作为后者的一个例子,请考虑图 6,图中演示了一个 SoaML ServiceInterface 规范。ServiceInterface 实现了一个 UML 接口,SCA 转换的 «WSDL» 原型将应用于此接口。ServiceInterface 使用了一个利用现有 WSDL 文档定义的接口。WSDL 的表示形式是通过将 WSDL 文档拖放到 UML 图上创建的。如果将从 WSDL 文档生成 Java 代码的转换属性设置为 “true”,则 UML 到 SCA 的转换首先将生成一个 WSDL 文件来为 UML 接口 “结账”,随后为 Invoicing 和 InvoiceProcessing WSDL 文档生成 Java 接口代码。

图 6. 使用 WSDL 文档定义的接口的 SoaML ServiceInterface
在 SoaML ServiceInterface 的这种规范中,“被使用” 的接口是通过引用已有 WSDL 文档定义的
在 SoaML ServiceInterface 的这种规范中,“被使用” 的接口是通过引用已有 WSDL 文档定义的

运行 UML 到 SCA 转换配置

可以使用以下方法之一来发起转换:

  • 通过菜单调用转换配置
  • 通过命令行运行转换
  • 以编程方式调用转换 API(例如通过用户构建的转换)
  • 通过 Ant 脚本运行

有关详细信息,请参阅 Rational Software Architect 在线帮助

示例:通过 SoaML 服务模型生成 SCA 内容

我们将利用一个简单、具体的示例来演示使用 UML 到 SCA 的转换获得的结果。

首先对 Rational Software Architect 8.0.2 中包含的示例采购单处理服务模型进行以下修改:

  • 为模型应用 SCA 转换配置文件。这可为特定于域的 SCA 标记准备模型。
  • 对服务模型的 “com” 和 “org” 包中的各 UML 接口应用 «WSDL» 原型。
  • 对 “com” 和 “org” 包中的各 SoaML Participant 应用 «SCA» 原型。
  • 对于各 Participant,请导航到其 Properties View,随后进入该视图的 Stereotypes 拖盘。对于 Manufacturer 以外的每一个 Participant,请将其 implementationType 原型属性设置为 “Java”。对于 Manufacturer,请将其 implementationType 原型属性设置为 “Composite”。

Figure 7 展示了 Invoicer Participant 的 Property View,其中已经应用了 «SCA» 原型,且 implementationType 原型属性已设置为 “Java”。

图 7. 一个 Participant 的 Property View,其中的设置旨在生成 Java 实现
本图显示了Invoicer Participant 的 Property View,已经应用了 SCA 原型,并且将 implementationType 原型属性设置为 Java。在运行 UML 到 SCA 的转换时,将创建一个具有 Java 实现的 SCA 组件
本图显示了Invoicer Participant 的 Property View,已经应用了 SCA 原型,并且将 implementationType 原型属性设置为 Java。在运行 UML 到 SCA 的转换时,将创建一个具有 Java 实现的 SCA 组件

接下来,要创建并配置一个新的 UML 到 SCA 转换配置。

  • 对于配置的源,请选择 Purchase Order Process 服务模型的 “com” 和 “org” 包。对于配置目标,请创建一个新的 SCA 项目。
  • 在定义了源和目标之后,请选择 Finish,这会使转换配置向导开始创建您的配置,并在完成后终止。
  • 转换配置编辑器将保持打开状态。选择编辑器底部的 Properties 选项卡。
  • 确保转换配置属性均已设置为 “true”,以便为组件生成实现并为 WSDL 文档生成 Java 代码。

现在运行转换。

  • 选择转换配置编辑器的 “Main” 选项卡,随后选择 Run 按钮。

运行转换后,将使用 Java 代码、WSDL、XSD 和 SCA 内容填充 SCA 项目。同时也会为诸多系统元素创建带有 SCA 相关注释的 Java 代码,这些元素包括接口、组件(为这些组件创建的主干实现)和数据对象。还可以利用 Rational Software Architect 附带的 WSDL、XSD、SCA 和 Java 编辑工具进一步处理这些内容。

导航到 SCA 项目的 SCA Content > Composites 文件夹结构,展开 http://Manufacturer/ entry 下的内容(这定义了 Manufacturer 组合的名称空间)。双击 Manufacturer 项目将打开 Rational Software Architect 的图形 SCA 编辑器,并显示一个类似于图 8 所示的图形。在这里,可以看到 Manufacturer 组合的图形化展示,该组合公开的服务由四个连接在一起的 SCA 组件来实现。与源 SoaML 内容(即图 5 所示内容)的对应关系非常明确。

图 8. SCA 图形编辑器中的 Manufacturer 组合
显示在 Rational Software Architect 的 SCA 图形编辑器中的 Manufacturer 组合。在这里,可以看到该组合已由四个连接在一起的 SCA 组件实现
显示在 Rational Software Architect 的 SCA 图形编辑器中的 Manufacturer 组合。在这里,可以看到该组合已由四个连接在一起的 SCA 组件实现

在图 8 中,每个组件的 “J” 表示该组件基于 Java 实现。双击任意组件都将打开一个包含为该实现生成的主干代码的 Java 编辑器。

SCA 开发人员后续任务

Rational Software Architect 的 UML 到 SCA 转换使团队能够自动化通过服务模型构建 SCA 组件、组合和相关 WSDL、XSD 和 Java 代码的过程,从而从其服务解决方案设计中获得更多价值。然而,在 UML 到 SCA 转换开始运行后,通常仍然需要使用 Rational Software Architect 的 SCA 图形编辑器以及其他支持编辑器和向导解决一些具体问题。

例如,Rational Software Architect 目前可为 Web 服务和默认 (SCA) 绑定生成 SCA 配置代码。除此之外,转换操作将为给定服务或引用生成一项绑定,而 SCA 规范支持可以为一个给定服务或引用指派多个绑定。若要添加额外的绑定,可以在 SCA 图形编辑器中选择服务或引用,随后使用服务或引用的 Property View 的 Binding 选项卡来添加和定义绑定。

此外,当前转换可为 SCA 组件的 Java 实现生成(主干)源代码。改转换可以使用 SCA 原型的 implementationType 属性来确定对组件使用哪种类型的实现(EJB、JEE 等),并相应地配置 SCA 组件,但非 Java 实现必须独立进行编码。如用户愿意的话,产品化的转换可扩展为生成非 Java 实现代码。


相关主题

  • 向 SOA 转型是包含 4 部分的 developerWorks 系列文章,介绍了如何利用 Rational Software Architect 创建可供 WebSphere Integration Developer 在业务流程编排中使用的服务工件(WSDL、XSD、BPEL、服务组件定义等)。
  • 访问 OASIS Open CSA 网站,进一步了解服务组件架构 (SCA) 和 Open CSA Group 的其他计划。
  • SoaML(面向服务的架构建模语言)是 Object Management Group 推出的一种规范。SoaML 定义了一种符号和元模型来描述和指定面向服务的系统。
  • Jim Amsden 撰写的分为 5 部分的 IBM developerWorks 系列文章 “使用面向服务体系架构建模语言(SoaML)建模” 中的 SoaML 服务建模借鉴了 Rational SOMA 2.9 的大量服务建模方法。
static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services, Rational
ArticleID=742016
ArticleTitle=设计和开发更高效的 SOA,第 5 部分: 利用 Rational Software Architect 8.0.2 更迅速、更准确地构建面向服务的解决方案
publish-date=07212011