SOA是思想,如何具体体现或者按照SOA的思想来编程呢?方案很多,我们现在来学习下最常用和正在茁壮成长的SCA。SCA-Service Component Architecture,即为服务组件架构,是IBM和BEA等提出来的一套面向服务的SOA编程模型或者说是编程架构,是SOA思想的一种实现方式。这就说明了SOA与SCA间的关系,SOA是思想,SCA是对SOA思想的一种实现或者说细化。
编程思想经历了结构化程序设计-面向对象-面向组件-面向服务的变化,系统是越来越复杂,但是模块间的耦合是越来越低。并不是说面向服务编程就不需要面向对象思想了,它们是在不同高度的编程思想。SCA中的服务“Service"就是对组件编程(EJB,COM,CORBAR)的进一步升华,此处的服务是独立于具体的技术(即与编程语言和传输协议无关),并提供一个完整的业务功能(不是分步的、细节的)。
SCA的目标是很容易地实现大规模系统的集成,通过服务间的松耦合、独立于具体技术来实现服务组件的最大可重用性。
SCA特点:
1. SCA是用于建构服务的,松耦合的。
2. SCA是一个跟实现语言无关的组件编程模型。SCA提供了统一的调用方式,可把不同的服务类型(POJO/EJB/BPEL/JMS/WEB服务)通过统一的接口来封装调用。使得整合已有的异构系统成为可能。
3。SCA支持不同的通讯协议,如Web服务、JMS、Rest、JSON/RPC等
4。SCA隔离了业务逻辑和具体技术实现。使开发者更集中于业务逻辑而非技术细节,也极大地提高了业务逻辑的灵活度-可以采用不同的服务实现而无需改变业务逻辑。
5。SCA提供了许多面向企业计算的QoS能力。
SCA-服务组件体系架构,显然服务组件-SCA Component是该体系架构的基本单元。它提供服务,引用其他服务,并包含property-组件属性。其结构如下图:
服务(Service),是一个接口,也可以是WSDL的portType,表示有本组件提供给其他组件使用的业务功能,是用来让其他服务组件调用的。
引用(Reference),表示本组件的实现所依赖的由其他组件提供的服务。
属性(Property),这是一些影响业务功能的数据值,可以通过设置这些属性值来对实现进行配置。
组件实现(Implementation),指提供了特定业务功能(service)的代码段。对java来说,就是接口实现类。
一个服务组件,对外提供的服务(Service)和服务实现是必须的,属性和对其他组件的引用不是必须的。
服务模块-SCA Composite,服务模块的作用是按照一定的逻辑划分对组件进行分组,同时把一个分组内的各个组件连接在一起,即便它们使用了不同的实现技术。反过来,也可以把模块作为组件,用来构建其他更复杂的模块。集成办法:通过service和reference的连线(wire)-即组件的reference调用其他组件的服务service,将组件的service和reference提升(promote)为模块的service和reference。服务模块组成如下图:
对于模块内部组件间如何连线,如何设置服务的绑定和引用的绑定,我们将通过Apache SCA Tuscany实例来解释。