服务组件架构(Service component Architecture,SCA)
尽管服务组件架构(SCA)被作为规范定义(该规范定义了使用面向服务架构构建系统的模型),但它是一个有效的模型(该模型用来将组件组合成服务),并为服务组合成解决方案提供了额外支持。
SCA基于2个主要的元模型:
类型元模型。
组合元模型。
类型元模型
这个元模型(见图2)描述组件类型、接口和数据结构。

图2 描述组件、接口和它们依赖的元模型
一个组件实现由以下的4组规范定义:
被提供的接口——组件定义的接口集。这些接口通常定义为WSDL端口类型或语言接口,如Java或C++。一个组件可以暴露0或多个接口。每个接口包含几个方法。
被要求的规范(引用)——组件实现使用的接口集。这些接口通常定义为WSDL端口类型或语言接口,如Java或C++。一个组件可以有0或多个接口。
用来裁剪或自定义组件行为的属性。每个属性定义为一个属性元素。一个组件可以包含0或多个属性元素。
定义组件实现的实现元件。SCA允许很多不同的实现技术,如Java、BPEL、C++、SQL等。SCA为引入新的实现类型定义了扩展机制。
组合元模型
这个元模型(见图3)定义了组件实例,以及它们是如何连接的。

图3 组件实例和它们在组合元模型中的连接
这个元模型中实例的概念有别于在OO中使用的实例概念。此处的组件实例是指一个带有被完整解析的属性集,为解决特殊问题而修改组件行为的组件实现。
一个组合定义了很多组件实例,它们彼此交互,这里的交互使用连线(wire)来定义。
在SCA中,连线使得绝大多数的底层代码被抽出(与Indigo中的信道类似)。如,连线可以被定义同步的或异步的,支持组件调用的事务行为等。SCA在幕后处理这些底层细节。连线同样可以在任意方向上连接2个不同的接口语言(如Java接口和WSDL 端口类型/接口),只要这2个接口定义的操作是等价的就行了。
除了连线,SCA也支持通过特殊的组件类型,如导入(imports)和导出(exports),进行模块间通信。连线、导入和导出组件的结合使得组件可以引用外部服务。
组合元模型定义的组件组合,与服务组合既类似又不同,尽管两者都定义了使组件/服务一起工作的方式。通过被组合本身引入的功能,服务组合增强了参与服务的功能;而这个元模型只定义组件(更接近于服务实现)间的连接。
SCA实现依赖于服务数据对象(Service Data Objects,SDO),它提供了表示数据的通用模型的技术。SDO是组件的数据交换基础。SDO架构中的基本概念是数据对象——包含基本类型数据和(或)其它数据对象的容器。元数据提供了被包含数据的信息,它被数据对象显式引用。在SDO中数据对象的组合由数据图表示。除了对象本身,图中还包含变更概要,用来记录图中数据对象和属性在处理过程中变化的信息(类似微软环境中的ADO)。除了SDO,SCA还引入了服务消息对象(Service message objects,SMO),它提供了服务间处理和交换消息的抽象层(类似JBI中的标准化消息)。
SCA目前尚显稚嫩(本文写作时版本为0.9),并且还不支持SOA实现要求的大多数?模式。作为替代,目前IBM的Websphere ESB/WPS 6.0的SCA实现引入了协调器框架,它基于SCA并为协调器实现和定位提供了定义良好的机制。(类似Indigo中的中介)。
如果GUI支持,SCA实现会非常强大,可以在面板上实现图形化组件的连接,这种方式正是IBM的WebSphere Integration developer(WID)中所实现的。