探索 WebSphere Application Server Feature Pack for SCA,
第 1 部分: 服务组件体系结构功能部件包概述
 

2009-09-01 作者:Chao M Beck,Stephen Kinder 来源:IBM

 
本文内容包括:
开放服务组件体系结构概念、该技术的目标以及为 IBM® WebSphere® Application Server V7 用户提供巨大价值的一些重要集成点集锦的概述。

引言

IBM 长期以来一直推崇面向服务的体系架构(Service Oriented Architecture,SOA)。SOA 有生命力的重要原理之一在于,对业务流程(由业务服务组成)建模,将其分解为在各种现有或新服务基础上组装的服务,将其部署到运行时执行环境中,然后不仅从 IT 的角度而且从业务性能的角度对其进行管理

图 1 描绘了 SOA 生命周期。当流程更改(由于外部业务压力或通过观察流程实际运行而做出的内部改进)时,此周期将重复进行。业务与 IT 聚在一起设计企业 SOA 的协作性质提供了与业务相关的敏捷应用程序,这样的应用程序可以解决切实的业务相关问题。

图 1. SOA 生命周期
图 1.  SOA 生命周期

在许多企业中,SOA 中存在的粗粒度业务服务目录实际上由多种技术所承载,从 COBOL CICS® 应用程序到 WebSphere Application Server J2EE™ 应用程序、SAP、.NET® 等等。事实上,即使在较小的企业中,“业务目录”也包括由第三方承载并通过 Web 普遍可用的服务。在敏捷 SOA 中,企业需要能够随着业务应用程序的发展将这些服务连接和组合在一起;但是,给定的业务程序员所能应付的技术种类是非常有限的。企业需要更好的方法来整合无论承载于何处的关键业务资产,并将它们包括在新业务服务中;企业还需要减少业务程序员必须应付的技术种类。

企业正在想方设法攻克必须获取才能使用某个服务的知识,开发人员正在想方设法在不需要知道服务实现细节的情况下组合粗粒度业务服务。服务组件体系结构 (SCA) 旨在提供这些功能。SCA 对开发人员隐藏服务连接细节,采用任何供应商都能理解的开放和可移植元数据形式捕获相关服务设计(如接口和语义契约),并将业务逻辑与所有应用程序发生的最终基础结构更改隔离开来。

当您能够以可使用的元数据形式从应用程序中分析出这些细节时,将会发生若干有趣的事情:

  • 服务接口及其语义被带到前端,它们在那里属于某个 SOA:应用程序以不会与自身的实现技术纠缠在一起(并且不会陷入其他实现的细节)的方式,声明它所提供的服务、它所使用的服务,以及它所依赖的语义。
  • 业务逻辑与服务组合中的更改相隔离,服务与其使用者之间的路径也是隔离的。
  • 您能够使用电路板范式查看服务之间的关系,从而使得服务设计的可视化表示形式极其直观。

SCA 简史

您可能会吃惊地发现 SCA 并不是新生事物;IBM WebSphere Process Server 开创了 SCA 的先河,提供了 Version 6.0 版本中的开放版本的前身。IBM 使用此开创性技术(我们将称之为“经典 SCA”)培育了开放的面向服务的体系结构 (OSOA) 组织的若干供应商认可的开放 SCA 规范。SCA 代表 IBM SOA Foundation 的 SOA 编程模型,并且是 IBM 应用程序服务器和业务流程管理软件组合的战略技术。

OSOA 组织的宗旨是定义一组核心规范来描述一个语言无关的模型,以便使用面向服务的体系结构来构建应用程序和系统。OSOA 还定义了一组特定于编程语言的规范,对其他实现服务的方法进行了扩展和补充,例如 Java™、BPEL、C++ 以及诸如 EJB™ 组件等 Java EE 技术。SCA 还依赖诸如 Web 服务等其他开放标准。

SCA 不是其他细粒度服务实现语言和框架的竞争者,而是一种补充和包含技术。

在进行规范工作的同时,还涌现了若干已开发出规范实现的开放源代码社区。WebSphere Application Sever V7 应用开放源代码 Apache 项目 Tuscany 来提供 SCA 运行时的核心,并将该支持与 WebSphere Application Server 中固有的世界级企业应用程序服务器功能集成在一起。

2007 年末,出席 OSOA 会议的供应商给 OASIS 带来了他们的规范、知识和激情,SCA 将在那里通过正式的标准化过程和创建公开可用的遵从性测试套件得到充实。标准化工作预期将于 2009 年完成。

SCA 技术概述

SCA 组合

顾名思义,服务组件体系结构是一个组件模型。面向服务的粗粒度构件被表示为组件。组件描述它们所提供和所依赖或引用服务。组件还指向提供服务实现的代码块。组件通过连接联系在一起。组件可以通过公开可配置的属性来定制它们的行为。策略和服务质量意图用于扩展服务或引用(称为交互意图)以及组件(称为实现意图),以便配置由 SCA 运行时提供的附加语义。

图 2. SCA 组合
图 2. SCA 组合

组件的组装正式组成了组合。组合是组件和连接的集合;即服务的组装。组合提供了定义组件本地边界的范围界定机制,但是可以进一步隐藏组件中不打算供其他 SOA 应用程序使用的服务。组合一经定义,即可重用来以嵌套方式为其他组件提供实现。组件、组装、内部连接和服务及引用定义采用称为服务组件定义语言(Service Component Definition Language,SCDL)的开放 XML 语言来编写。服务和引用通过使用绑定与特定的协议(如 Web 服务)绑定。绑定是 SCDL 定义的一部分,这样就不需要使用此详细信息填充业务逻辑(实现)。

请注意,SCA 包括一组与语言无关的规范,支持在各种各样的应用程序环境中实现 SCA。每个应用程序环境将提供一组在该环境中有意义的实现、绑定和策略功能。例如,WebSphere Application Server Feature Pack for Service Component Architecture V1.0 为实现为 Java 或其他 SCA 组合的组件提供了支持,并且明确地不支持部署 C 或 C++ 实现。

SCA 贡献包

定义组合以后,需要将其连同相关组件实现构件一起部署到运行时中。SCA 贡献包是包含所有这些构件的包。一个称为贡献包文档的特殊 XML 文档 (sca-contribution.xml) 描述了应该如何部署组合,并定义了依赖项(即其他贡献包),其中包含该贡献包需要执行的构件(例如共享 XML 模式或 Java 实用程序类)。

图 3. SCA 贡献包
图 3. SCA 贡献包

贡献包部署到某个 SCA 中。SCA 域是一种管理范围界定机制,但同时还提供了服务目录,SCA 运行时使用该服务目录来简化 SCA 组件的连接。SCA 域中部署的服务通过缺省绑定可用,此绑定支持按逻辑域界定的名称来指定引用目标,而不是像其他绑定那样必须指定端点配置的细节,从而让 SCA 运行时去查找服务的最佳可能路径。就 Feature Pack for SCA 而言,SCA 域和单元具有相同范围,SCA 域中部署的服务通过缺省绑定在整个 WebSphere 单元中可用。

SCA Java 编程模型

SCA 采用了 Java EE 5 注释提供的易用性改进,以及支持逆向控制和依赖项注入的现代容器设计。SCA Java 实现具有使用注释来声明组件定义的优点,并由 SCA 容器将 SCA 服务引用、策略和属性注入它们的代码。使用此模式的实现不仅与容器或框架 API 的细节隔离,而且还与端点配置隔离。SCA 体系结构使得应用程序组装人员可以使用正式元数据重写代码中提供的注释,从而允许您在开发过程中将一切保持简单,同时为企业部署提供对服务策略和配置的严格控制。

为什么要使用 SCA

SCA 编程模型的主要用例涉及到将业务功能抽象为松散耦合的服务的能力,这些服务由粗粒度组件、细粒度组件的组合以及粗粒度组件的组合实现。SCA 通过两种方式提供组合:通过引用组合和通过实现组合。SCA 组件可以通过独立于服务的部署位置和方式的单个调用编程模型编排这些服务的调用模式来组成服务。SCA 还可以通过将细粒度组件的组装运用实现为粗粒度组件的实现来提供组合。细粒度组件位于通过实现组合的“叶子”的位置,而粗粒度组件位于其“根”部。

表 1 根据其用作细粒度组件模型还是粗粒度组件模型对各种组件技术进行了大致归类。此表的重点在对粒度有最大影响的方面,即抽象、数据格式、传输独立性、交互模式和中介。

表 1. 组件模型比较
 
组件模型 细粒度 粗粒度
POJO
  • 强本地语义
  • 有限抽象
  • 有限组合
  • 对象图形数据
  • Getter/setter 模式很常见
  • 无远程调用
  • 无中介
EJB 3
  • 强本地语义,但注释不一致
  • 有限抽象
  • 对象图形数据
  • 有限传输独立性
  • 不禁止文档样式数据
  • 声明性 QoS
  • 无中介
Spring
  • 与 EJB 3 相同
  • 无远程调用
  • 不禁止文档样式数据
EJB 2.0 或更高版本的无状态会话 Bean
  • 非最优本地语义、本地/远程透明性
  • 有限抽象
  • 对象图形数据
  • 有限传输独立性
  • 难于通过中介传递
  • 无同步
SCA
  • 采用 Java 的强本地语义
  • 本地对象图形数据
  • 异步
  • 良好的抽象、语言独立性
  • 良好的传输独立性
  • 异步
  • 基于文档的远程调用
  • 可通过中介传递的组装
Java API for XML Web services (JAX-WS)
  • 无本地语义
  • 有限抽象
  • 有限传输独立性
  • 异步
  • 基于文档
  • 可通过中介传递

对 WebSphere Application Server 的价值

SCA 贡献包部署与 WebSphere Application Server 应用程序管理集成在一起,并利用了称为业务级应用程序支持的新 V7 功能,从而无需进行 Java EE 打包即可部署 SCA 贡献包。可以将这些贡献包中部署的服务添加到 WebSphere Application Server 单元级 SCA 域,该域允许同一单元中的其他 SCA 应用程序使用 SCA 缺省绑定,从而简化 SCA 组件的连接。

SCA 贡献包的服务质量意图和策略与 WebSphere Application Server 安全性、事务和 Web 服务策略集管理集成在一起,从而为 SCA 应用程序提供了企业级服务质量。

WebSphere Application Server 中部署的 SCA 服务通过 Network Deployment 高可用性配置可用,从而使得 SCA 贡献包能够利用您曾经预期 WebSphere 应用程序所能利用的集群技术。

作为一种技术,SCA 还是中间件产品的支持技术,并提供了与各产品的特定功能任务直接相关的灵活组件和组装支持。例如,WebSphere Application Server 将使用 SCA 来重点提供一个可靠的企业范围的解决方案,用于为 SOA 应用程序组合服务和构建业务逻辑;而 WebSphere Enterprise Service Bus 则使用 SCA 来提供一流的中介框架,从而公开虚拟服务端点并为您提供连接到不同技术的全面灵活性。即使这些产品使用公共技术,使用工具的方式也会帮助您确定哪个产品最适合于开发特定的 SOA 解决方案。

总结

Feature Pack for SCA 为 WebSphere Application Server V7 带来了简化的 SOA 编程体验。此 SCA 技术的初始交付版本提供了一个框架,可用于通过敏捷、灵活、开放的元数据驱动的机制组合粗粒度的服务。该功能部件包:

  • 为组合 SOA 应用程序提供了面向服务的电路板式的组装范式,重点集中于服务是什么而不是服务是如何实现的。
  • 通过将关注事项与有关所使用的服务的细节或可能使用服务的路径隔离,从而为 SOA 业务逻辑开发人员提供了适当的关注事项分离
  • 通过使用 Web 服务和 EJB 组件提供到现有资产的连接,从而允许您利用现有的服务
  • 通过使用依赖项注入和可简化连接的易于使用的 SCA 绑定,从而提供简单的粗粒度服务创建
  • 无需有关其实现或承载环境的特定知识即可重用粗粒度服务

本文是研究这项激动人心的新技术的各个方面的系列中的第一部分。

参考资料

学习 获得产品和技术

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织