SCA:实现SOA的编程模型

日期: 2008-01-09 来源:TechTarget中国

  SCA提供了实现面向服务的架构(SOA)的一个编程模型。

  面向服务的架构已经在软件开发领域存在很多年了。但是当一些组织试图去定义最佳的实现和管理技能的时候,为一个特定组织开发一个SOA的细节却是难以捉摸的。在这篇文章里,我将介绍SOA的一种实现方式——服务-组件架构。

  SOA在概念上来说是关于松耦合的行为。业务和系统功能作为大的独立服务被展现,使得它们以不同的方式在业务流的组合中被使用。这是一个简单的描述,但实现起来就相当的复杂了。任何使用EAI和分布式技术的人都能回忆起在一个企业里兜售业务功能的困难。

  SOA原理是抽象的,独立于实现技术。从开发角度来看,定义SOA构成是有帮助的,它使得工程师可以无须求助于技术规范来用具体术语讨论开发实现。为了这个目标,开放面向服务的架构(OSOA)组织发布了服务组件架构(SCA)规范1.1(www.osoa.com)。

  SCA已经被IBM,BEA,Sun,Software AG,IONA,SAP,和Oracle以及其他一些公司开发很多年了。可以在IBM,Rogue Wave,Oracle,Tibco,Apache Software Foundation(Tuscany)和Eclipse Foundation(SOA Tools Platform)获取实现。

  SCA编程模型

  SCA编程模型主要通过提供一个服务的开发,集合,部署的方法,来关注SOA的工程细节。为了和SOA原理一致,SCA通过元数据驱动,语言独立和容器独立来支持异构的实现。只要一个从SCA规范到技术的映射可以被定义,SCA就能被实现。于是,SCA被和多种语言和容器绑定;最近的一个C语言规范以及形成草案。

  目前,SCA映射已经存在于Java,C++,Ruby,Spring,和BPEL及其他语言中。另外,SCA绑定也在web服务,JMS,JCA和其他通信机制中存在。SCA的目标是减少SOA的概念原理到可以在一个具体上下文中讨论的具体元素集合。

  SCA的好处有:

  ·使用组件和组合简化SOA实现

  ·使用松耦合的组件和参考来支持敏捷特性

  ·通过一个综合的调用模型支持事件驱动的行为

  ·将开发和集合分开,允许技术不可知的组合

  建立服务:程序集(Assembly)模型

  程序集模型描述了服务是如何被定义和配置的。

  组件是SCA模型的核心,可以用支持SCA的任何语言来实现。一经定义,组件可以使用属性来声明配置,这将在接下来的实现中映射到accessor和mutator。

  下面的是一个XML声明的组件。

  //例1:组件声明  
  (a)
  (a)
  
  (b)
  
  AddServiceComponent
  
  (b)
  AddServiceComponent

  引用使得组件可以调用其他服务。引用在部署时或运行时被解析。例1(b)显示了一个例子引用。

  组合是组件的群。根据声明,一个组合可以被作为一个服务或者新的组件使用。因此,SCA模型支持递归程序集。

  如果你通过将服务元素包含在组合声明里,那服务本质就是组合。和组件类似,组合和服务可以通过属性来声明配置。就像你可以从SCA程序集的元素声明里看到的一样,已有的程序可以通过将应用建模为一个组件,组合或者提供一个可调用的程序接口而添加到架构中来。

  布线(Wiring)

  组件连接是通过布线来完成的,也就暗示了需要定义组件之间的源/目标信息。和其他SCA元素一样,布线细节可以被声明设置。SCA布线不需要元和目标是一个相同的类型(比如Java到WSDL的接口就是可接受的),只要考虑到了诸如远端性,回调支持,容错,和异常处理等的兼容性。例3(a)是一个简单的布线实例。

  //例2:引用声明   name=”CalculatorComposite”>
  CalculatorServiceComponent
  AddServiceComponent
  …
  …
  //例3:(a)引用中的直接布线(b)和一个web服务绑定的引用
  (a)
  target=”StockQuoteMediatorComponent”/>
  (b)
  callbackInterface=”helloworld.HelloWorldCallback”/>
  callbackInterface=”http://helloworld#wsdl.interface(HelloWorldCallback)”
  wsdli:wsdlLocation=”http://helloworld wsdl/helloworld.wsdl” />
  ”http://helloworld#wsdl.endpoint(HelloWorldService/HelloWorldSoapPort)” location=”wsdl/helloworld.wsdl” />

  为了简化开发,SCA支持“自动布线”。只要应用是明确的,容器就应该能在运行时布线组件。

  Binding

  SCA模型通过绑定支持服务之间的通信,这在很多技术中存在了。为了和规范一致,所有的实现必须支持一个SCA服务绑定和Web服务绑定。绑定是被服务和应用使用的。服务使用绑定来定义它们如何被调用;引用使用它们来声明它们如何调用一个服务。例3(b)是一个使用web服务绑定的例子。

  服务质量:策略框架

  为了关注服务质量(QoS)和非功能化的需求,SCA模型提供了一个策略框架。策略可以用来定义安全,可用性和交易,以及其他需求。策略可以和每个组件关联在一起。服务和应用可以拥有多个策略来允许不同方式的访问。策略框架的主要元素是Intents, Profiles和Policy Sets。

  Intents是在一个组件实现上的QoS限制的抽象描述。比如,消息需要是加密的。一个用“confidentility”命名的Intent可以如例4(a)中被定义。   //例4:(a)Intent声明;(b)Profile声明(a)
  Communication through this binding must prevent
  unauthorized users from reading the messages.
  (b)

  Profiles是Intent名字的聚合。一个Profile中应用的Intents被映射到Policy Sets中的实现。例4(b)是一个Profile声明。

  Policy Sets和Intents实现相关。它们在程序集模型里声明技术相关的元素限制。例5是一个和Confidentility Intent相关的Policy Set。这个例子使用了intentMap元素,表明一个给定的Intent的另一种实现。

  //例5:使用一个intentMap和WS-PolicyAttachment的Policy Set   provides=”confidentiality”
  appliesTo=”binding.ws”
  http://www.osoa.org/http://schemas.xmlsoap.org/ws/2004/09/policy”>http://schemas.xmlsoap.org/ws/2004/09/policy“>
  default=”transport”>
  http://myStore.example.com/acct
  myStore:myPortType
  myStore:InventoryService
  URI=”http://myStore.example.com/policies.xml” />
  …
  …

  Policy Set包含了一个技术的规范,包括绑定,源,目标的细节。如果被要求使用一个公用密钥体系,Policy Set可以包含一些加密方法,信任关系和密钥存储的信息。WS-Policy和WS-PolicyAttachment是最好的Plicy Set声明的格式。然而,支持其他语言(比如XACML和所有权语言)是可能的,依赖于容器实现。

  Intents通过组件元数据连接到组件上。例6给出了一个对服务声明的对连接认证和可靠性intents。

  //例6:连接在服务上的Profile

  在写此文时,Policy Sets和Intents是包含在一个全局定义文件里的,它被通过Intent或Profile引用到一个程序集描述器文件。

  数据访问:服务数据对象

  服务数据对象(SDO)并不是SCA模型合适的部分,但却是最好的SCA数据架构。SDO基于非连接数据图的概念。SDO架构保持了数据对象的树或图,可以通过API访问。这个架构允许强类型和弱类型数据模型,因此支持静态和动态的数据访问机制。SDO架构并不对相关的查询语言进行假设。为了分开程序代码和数据访问代码,架构鼓励使用数据访问服务(DAS)来操作图(incubator.apache.org/tuscany/das_index.html)。通过增加元数据,SDO也支持运行时数据图的查看。既然架构在理念上已经和XML同时设计,它也提供了丰富的操作XML的机制。事实上,为了实际使用考虑,一个SDO的数据结构最好是XML文档。在写此文时,SDO规范是2.1版本。

  总结

  SCA尝试基于SOA的概念去创建一个简单,强壮的编程模型。它的价值存在于概念的简单,程序集和QoS的声明式方式。通过集合时间和运行不行和松耦合策略,SCA无须组件的先验知识来创建一个服务。这反过来也使得服务组件和结合开发者可以单独工作。和SDO结合,一个厂商中立的SOA方案是可能的——模型设计者从早先的模型中看到了其弱点——通过提供一个干净的程序集和QoS的区分。如果Apache Tuscany Project是一个SCA生存能力的验证,那么一个直接(尽管不是必须简单)的SOA实现是被保证了的。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 企业应用集成的关键产品之工作流

    企业在努力实现业务敏捷、推动朝着对工人的个性化支持以及集成业务流程的组合发展。应用集成项目必须权衡这些要素。