基于SCA规范的服务框架设计与实现<o:p></o:p>
Author: 岑文初<o:p></o:p>
Email: wenchu.cenwc@alibaba-inc.com<o:p></o:p>
Version: 0.1<o:p></o:p>
Date: <st1:chsdate isrocdate="False" month="7" day="1" islunardate="False" w:st="on" year="2007" style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x">2007-07-01</st1:chsdate><o:p></o:p>
概述... 2<o:p></o:p>
SCA的简单介绍... 3<o:p></o:p>
SCA & OSGI 4<o:p></o:p>
Tuscany, First Demo. 5<o:p></o:p>
Mail Composite Demo. 5<o:p></o:p>
基于Tuscany实现内嵌服务框架定制... 9<o:p></o:p>
一点感想... 10<o:p></o:p>
<o:p> </o:p>
概述<o:p></o:p>
SCA(Service Component Architecture)是针对SOA提出的一套服务体系构建框架协议,内部既融合了IOC的思想,同时又把面向对象的复用由代码复用上升到了业务模块组件复用,同时将服务接口,实现,部署,调用完全分离,通过配置的形式灵活的组装,绑定。
从代码级的面向对象思想,到组件级的EJB概念,再到服务级的SOA理念,是一个开发复用的不断提升的过程,经历的经验教训正在给实践做出最好的指导。SOA提倡的就是更高级别的复用,服务的复用,Internet提供了开放的环境,但是没有一种统一的服务访问模式,让各个企业之间成了信息内部丰富的孤岛,需要将这些孤岛串联起来,同时要最大限度的复用有限的资源,因此提出了面向服务概念,但是多年的SOA口号下却缺少着一个真正的实施标准和解决方案,因此SOA的理论传播大于实际实施。<o:p></o:p>
SCA和SDO的出现,给SOA来了点实际的。SCA(Service Component Architecture)其实就是将过去EJB的成果继续下去,基于Component的复用,同时吸收了IOC的思想,Component之间的组装是通过SCA框架来实现的,但是很重要的一点,他没有走EJB的老路,而是学习spring的轻量级框架,不再为开发者作的面面俱到。SCA的Component和OSGI的Bundle一样其实是对Java封装的一种贯彻,它有需要Import的服务引用,需要Export的服务,很重要一点就是它对于Component,service,reference的实现都没有作限制,这类对象只需要有个接口定义和实现描述即可,当前规范中支持的接口定义可以是java接口也可以是wsdl文件(最终也是转换成为java接口),实现的话那么更加广泛java,webservice,rmi,jms,脚本语言等等,同时提供了扩展接口。<o:p></o:p>
SCA的简单介绍<o:p></o:p>
OSOA(Open Service Oriented Architecture)针对SOA实现提出了一系列技术框架规范,其中包括了两大部分:SCA(Service Component Architecture)和SDO(Service Data Objects)。SCA旨在解决使用各种不同的实现来创建面向服务的组件,以及如何将创建的组件装配和发布,满足业务流程需求的开发和部署。SDO提供给应用开发一套完整的数据处理方案,数据源及其格式将对应用处理透明。这两者可以分开使用也可以一起配合使用。http://www.osoa.org/display/Main/Home 是SCA的官方网站,里面现在提供了两部分项目的规范定义文件。
SCA最基本的结构单元就是Component,SCA Composite将多个Component包含定义在内,组成了完整的业务模块单元。下面就是Component基本结构单元的结构图,后面会对这个基本单元的各个部分作详细的描述:
<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape coordsize="21600,21600" id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 257.25pt"><v:imagedata src="10C657F8.files/image001.emz" o:title=""></v:imagedata></v:shape>
图 1 SCA Component结构图
<o:p> </o:p>
Composite通常都有一个xxx.composite文件用来描述Composite的结构以及每一个Component的实现,接口,服务,引用的定义。
<v:shape coordsize="21600,21600" id="_x0000_i1026" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 495.75pt"><v:imagedata src="10C657F8.files/image003.emz" o:title=""></v:imagedata></v:shape>
图 2 SCA Composite结构图
<o:p> </o:p>
基于OSGI的开发首先要求就是基于接口开发,任何业务模块的开发,都需要将业务操作抽象成为一系列的接口定义(通常就成为最基本的Interface Specification Bundle),业务间的调用都是通过接口调用来实现的,也支持IOC来注入接口。
<v:shape coordsize="21600,21600" id="_x0000_i1027" type="#_x0000_t75" style="WIDTH: 415.5pt; HEIGHT: 236.25pt"><v:imagedata src="10C657F8.files/image005.emz" o:title=""></v:imagedata></v:shape>
图 3 OSGI 模块间交互情况
OSGI容器类似于Spring容器,负责装载以及装配各个定义好的Bundle,各个Bundle都有自己的import和export的接口包,具体的实现对彼此都是透明的,容器支持动态的装载和卸载各个实现Bundle的,这样就做到了对业务无影响的情况下就可以切换不同的业务实现。同时接口化编程能够被更好的贯彻,模块与模块之间只能通过模块间的业务接口来互相访问对方的业务信息,降低了耦合度。
但是也可以看出OSGI适合单机部署的应用开发,其实就本身OSGI的设计初衷就不是考虑跨服务器多机部署的情况,因此不适合作为平台的服务框架。但是对于需要单机部署的一些特殊业务实现(例如Job服务,当前实现了Job接口的定义以及Quartz的实现)就可以采取这种方式,不过如果不是需要切换实现,那么不是很体现的出OSGI的特性。
记得在论坛上有人讨论过SCA和OSGI的优劣,但其实作为这两个规范面向的解决问题都是不同的,SCA是SOA的一个实现,SOA是解决分布式服务的互通问题,而OSGI是针对单机服务的动态绑定义及组装,因此两者不存在着可比性,但是在我看来,两者却有着很好的互补性,在平台的现有情况下,用SCA来实现服务框架,同时通过OSGI来实现组件装配,这无疑是很好的一件事情。
<st1:place w:st="on"><st1:state w:st="on">Tuscany</st1:state></st1:place>, First Demo<o:p></o:p>
OSOA提出的SCA只是一个规范,因此包括BEA,IBM等大公司的平台都有相应的技术实现,而Tuscany是Apache孵化项目中的一个实现了SCA,SDO的规范的开源项目(http://incubator.apache.org/tuscany/home.html)。最新的版本是基于SCA 规范 v1.0版本而实现的SCA Java 0.90-incubating,当然它还提供了C++的版本。
开发SCA的组件和java开发普通的业务模块没有什么区别,只是在业务逻辑代码开发完以后需要将逻辑实现以及需要发布和引用在配置文件中定义和描述。下面分别是MailComposite的Java类图以及SCA组件的结构图。
<v:shape coordsize="21600,21600" id="_x0000_i1028" type="#_x0000_t75" style="WIDTH: 381pt; HEIGHT: 319.5pt"><v:imagedata src="10C657F8.files/image007.emz" o:title=""></v:imagedata></v:shape>
图 5 Mail Composite的基本类图
<v:shape coordsize="21600,21600" id="_x0000_i1029" type="#_x0000_t75" style="WIDTH: 417pt; HEIGHT: 459.75pt"><v:imagedata src="10C657F8.files/image009.emz" o:title=""></v:imagedata></v:shape>
图 6 Mail Composite组件结构图
Mail.composite具体的内容如下:
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://mail"<o:p></o:p>
xmlns:wsdli="http://www.w3.org/2004/08/wsdl-instance" name="Mail" ><o:p></o:p>
<!—- 组件级别的服务定义,这个定义可以被不同的composite引用,也就是它的作用域为服务框架,promote表示这个服务由内部哪个具体的component或者component级别的service实现,也就是这里只是一个声明的部分,实现参看最后的MailCustomerComponent --><o:p></o:p>
<service name="MailCustomerService" promote="MailCustomerComponent"/><o:p></o:p>
<component name="MailComponent"><o:p></o:p>
<implementation.java class="com.alisoft.sample.tuscany.MailServiceImpl"/><o:p></o:p>
<!— 此service标签是component级别的服务,内部可以组装,但是无法跨composite,作用域为composite内 --><o:p></o:p>
<service name="MailService"> <o:p></o:p>
<!-- 服务接口描述 --><o:p></o:p>
<interface.java interface="com.alisoft.sample.tuscany.MailService"/><o:p></o:p>
</service><o:p></o:p>
<!—- 组件的引用,可以是另一个component也可以是component级别的service --><o:p></o:p>
<reference name="postOfficeService" target="PostOfficeComponent"/><o:p></o:p>
</component><o:p></o:p>
<component name="PostOfficeComponent"><o:p></o:p>
<implementation.java class="com.alisoft.sample.tuscany.PostOfficeServiceImpl"/><o:p></o:p>
</component><o:p></o:p>
<component name="RetailStoreComponent2"><o:p></o:p>
<implementation.java class="com.alisoft.sample.tuscany.RetailStoreServiceImpl"/><o:p></o:p>
</component><o:p></o:p>
<component name="RetailStoreComponent"><o:p></o:p>
<service name="RetailStoreService"><o:p></o:p>
<!—- 发布成为webservice的服务,设定绑定的地址,需要有wsdl文件的配合(将wsdl描述文件打入包,接口的描述可以是wsdl,也可以是java类型的接口) --><o:p></o:p>
<interface.wsdl interface="http://mail#wsdl.interface(RetailStoreServicePortType)" /><o:p></o:p>
<binding.ws uri="http://localhost:8085/RetailStoreService"/><o:p></o:p>
</service><o:p></o:p>
<implementation.java class="com.alisoft.sample.tuscany.RetailStoreServiceImpl"/><o:p></o:p>
</component><o:p></o:p>
<!—Composite级别的reference,指明是提供给谁的这里是提供给MailComponent的retailStoreService的,绑定的是内部那个发布成为webservice的component,注意component内部可以作为组装对象 --><o:p></o:p>
<reference name="RetailStoreReference" promote="MailComponent/retailStoreService"><o:p></o:p>
<interface.java interface="com.alisoft.sample.tuscany.RetailStoreService"/><o:p></o:p>
<binding.ws wsdlElement="http://mail#wsdl.port(RetailStoreService/RetailStoreServiceSOAPPort)"/><o:p></o:p>
</reference> <o:p></o:p>
<component name="MailCustomerComponent"><o:p></o:p>
<implementation.java class="com.alisoft.sample.tuscany.MailCustomerService"/><o:p></o:p>
<reference name="customerService"/><o:p></o:p>
</component><o:p></o:p>
<!—- 这是Composite级别的引用,需要通过promote指定是提供给哪个具体Component的引用,promote表示的就是提供给哪一个Component的引用
相关推荐
总结而言,文件中提到的分布式SCA应用的设计与实现,是基于Tuscany SCA框架对SCA规范的具体应用和创新。该分布式模型展现了分布式系统在云端部署、易于实现、逻辑整合和实际应用中的特点和优势。通过这些详细的理论...
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这意味着,这些服务可以以一种统一和通用的方式进行交互。 **SCA**(Service Component Architecture)则是一种用于构建...
在学习和应用SCA规范时,应重点理解每个概念的含义及其相互关系,以及如何在实际项目中实现组件化和服务化的架构设计。 此外,开发者还需要关注SCA的实现框架,比如Apache Tuscany,这是一个开源的SCA实现,提供了...
总结来说,基于SCA的可移植FPGA波形组件接口设计是一项关键技术,它为现代通信系统提供了新的设计思路和解决方案。通过对波形组件接口的标准化和模块化设计,这项技术不仅能够提升系统的性能,还能增强系统的可移植...
本主题探讨的是如何在Matlab环境中开发和实现基于SCA的调试分析组件,这对于理解和优化通信系统的性能至关重要。 SCA是一种基于面向服务架构(Service-Oriented Architecture, SOA)的框架,特别设计用于SDR系统。...
SCA的目标是提供一个统一的框架,用于开发、部署和管理基于服务的应用程序。SCA规范定义了一种标准化的方式来表示、组合和执行服务组件,使得开发者可以使用多种编程语言和技术来构建服务,同时保持一致的接口和行为...
本文通过介绍在FPGA上实现SCA波形组件接口的设计与实现,强调了OCP协议在专用硬件处理器上的应用,以及CP289规范在保证SCA组件可移植性和可配置性方面的重要性。通过这些技术手段,可以在FPGA上实现与通用处理器相...
该组件的设计与开发遵循SCA规范,可以有效避免数据在调试过程中的重复提取,并且能够在波形运行过程中直接调用Matlab进行实时数据分析。使用该组件可以快速准确地定位到数据发生错误的位置,并且对波形组件的功能...
这些组件可以是各种类型的服务实现,如Java、C++、BPEL、Web Services等,它们通过SCA规范中的描述符文件进行配置和连接。SCA Assembly Model涵盖了以下关键概念: 1. **Composite**: 组装单元,是SCA中最基本的...
仿真实例表明,基于SCA规范的分布式多数据融合仿真系统设计方案能够有效地处理分布式环境下多级融合算法的分解与仿真。这样的系统可以在集成现有模型的基础上,支持新模型的开发,从而提高整体的仿真系统的灵活性和...
总之,SOA-SCA-Assemblymodel涉及的是在SOA架构下,如何使用SCA规范来构建和组装服务组件,以实现灵活、可扩展和可重用的应用程序。这一模型不仅简化了服务组件的开发和集成过程,还促进了不同平台和语言之间的互...
【基于ZedBoard的SCA架构的设计与实现】 软件通信体系架构(Software Communications Architecture, SCA)是一种标准化的体系架构,用于设计和构建模块化的、可重用的、可扩展的无线通信系统。ZedBoard是由Xilinx...
作为一个软件无线电开发设计者,理解和掌握SCA规范至关重要,因为它可以帮助你构建可适应未来通信需求的灵活、可扩展的系统。 在实际应用中,SCA常用于军事通信、公共安全通信、卫星通信等领域,因为它能够快速适应...
WSIF作为一种Web服务领域的规范,实现了基于Java API统一调用各种服务的能力。尽管WSIF在统一调用方面取得了进展,但它并未形成一个完整的组件架构模型。因此,IBM在此基础上进一步发展出了SCA,不仅解决了统一调用...
此外,SCA规范还允许将现有程序、代码和服务转换为可被引用的服务,无需修改原始代码。 **SCA与OSGI(Open Services Gateway Initiative)** 有所不同,OSGI最初设计用于移动设备计算,关注点在于动态管理和模块化...