解析SCA中的基本概念

来源:百度文库 编辑:神马文学网 时间:2024/05/03 09:18:49
http://www.51cto.com 2007-01-09 17:52 出处:BLOG
0个好 关键字:SCA  SOA 0块砖
强力砖:此为空地,我要占领!
叫个好 评论: 0 |查看全部 |收藏本文 |我说两句拍一砖
");免费学习Cisco技术,赢Linksys无线路由
Cisco年度盛典,近80门免费网络技术课程,尽在Networkers Online 2006!中小企业防病毒产品免费试用
提供企业防毒产品免费试用,并有多种精美礼品任选!
在51CTO.COM投放广告
【导 读】SCA(Service Component Architecture)是一种规范,它使开发人员可以将注意力集中在业务逻辑的编写上。服务组件模型(SCA)中提出了一些新的概念,比如服务组件, 模块,共享库,导入和导出等。本文将分别解释这些服务组件中的基本概念。
 
SCA(ServiceComponentArchitecture)是一种规范,它使开发人员可以将注意力集中在业务逻辑的编写上。更直接地说,它是一种大大改进了的部署描述符,它可以使用任何语言而不限于Java。此外,您还可以使用编程式语言和声明式语言,比如BPEL和XSLT。SCA的特别之处在于,它对安全性、事务和可靠消息传递之类的特性使用了声明式策略的理念。
使SCA脱颖而出的是,它是专门针对SOA设计的,而不像J2EE只是面向SOA做了修改。SCA关注的是如何描述按照各种编程模型和协议编写的组件所组成的程序集。
服务组件模型(SCA)中提出了一些新的概念,比如服务组件,模块,共享库,导入和导出等。下面将分别解释这些服务组件中的基本概念。
1 服务组件
服务组件是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。我们可以把它看成是构建我们应用的积木。我们可以非常容易地把传统的POJO,无状态会话BEAN等包装成SCA中的服务组件。 SCA服务组件的主要接口规范是基于WSDL(Web ServiceDescriptionLanguage)的,另外为了给Java编程人员提供一个比较直接的接口,SCA的部分服务组件也提供了Java接口。因此,使用服务组件的客户端可以选择使用WSDL接口或Java接口。
服务组件提供给别的服务调用的入口叫Interface(接口)。而服务组件本身可能也需要调用别的服务,这个调用出口叫Reference(引用)。无论是接口还是引用,其调用规范都是WSDL或Java接口。SCA服务组件的接口模型请参考图 1:
图 1: SCA 服务组件接口模型

WebSphere Process Server充分利用了SCA的这种组件架构,并在产品中提供了一些与业务联系比较紧密的组件,比如业务流程,人工任务,业务状态机,业务规则等。这样用户就可以直接利用这些服务组件,构建自己的业务流程或其它业务集成的应用。在WebSphere Process ServerV6.0.1中,服务组件及SCA在架构中的作用如图 2所示:
图 2: WebSphere Process Server V6.0.1的架构环境

我们可以从图 2 中看到服务组件架构在WebSphere ProcessServer中的基础地位,也可以看到各种与业务相关的服务组件或技术相关的辅助服务组件的关系。关于WebSphere ProcessServer的体系架构这里不展开论述,具体请参考developerWorks专刊,2005年第三期的文章――WebSphere ProcessSrever V6体系结构概述。
SCA服务组件与传统组件的主要区别在于:
1. 服务组件往往是粗粒度的,而传统组件以细粒度居多。
2. 服务组件的接口是标准的,主要是WSDL接口,而传统组件常以具体API形式出现。
3. 服务组件的实现与语言是无关的,而传统组件常绑定某种特定的语言。
4. 服务组件可以通过组件容器提供QoS的服务,而传统组件完全由程序代码直接控制。
2 服务模块(Module)
服务模块(简称模块)由一个或多个具有内在业务联系的服务组件构成。把多少服务组件放在一个模块中,或者把哪些服务组件放在一起主要取决于业务需求和部署上灵活性的要求。模块是SCA中的运行单位,因为一个SCA模块背后对应的是一个J2EE的企业应用项目。这里之所以说是"背后",原因是我们在开发工具WID(WebSphere Integration DeveloperV6.0)中,通过业务集成透视图看到都是SCA级别的元素。但是当你切换到J2EE透视图你就会发现这些SCA元素与实际J2EE元素之间的对应关系。因此,在WID中构建一个模块就相当于构建一个项目。另外,由于模块是一个独立部署的单元,这给应用的部署带来很大的灵活性。比如,只要保持模块接口不变,我们很容易通过重新部署新的模块而替换原有的业务逻辑,而不影响应用的其它部分。
由于一个模块中往往会包含多个服务组件,那我们如何来构建这些服务组件之间的相互调用关系呢?在WID工具中,我们只要简单地通过接口与引用之间的连线,就可以指定它们之间的调用关系而不需要写一行代码。另外,我们可以在这些连线上面设定需要的QoS要求,比如事务,安全等。
3 导入(Import)和导出(Export)
用户实际的应用经常是比较复杂的,因此实际的应用通常需要多个模块才能满足要求,而且这些模块之间又往往存在相互调用的关系。
另外模块中服务组件除了调用别的服务组件之外,也需要调用已有的一些应用,或者是让一些已有的应用来调用模块的服务,而这些应用可能不是基于SCA架构的。为了解决上述问题,在模块中我们引入了两个特殊的"端点",一个是导入(Import),它的作用是使得模块中的服务组件可以调用模块外部的服务。另一个是导出(Export),它的作用是使得模块外部的应用可以调用模块中的服务组件。
由于涉及到模块内外的调用,因此需要指定专门的绑定信息。这些绑定信息包括了目标服务或源服务的调用方式,位置信息,调用的方法等。目前,在WebSphere Process Server V6.0中,导入端点提供了四种绑定方式,包括:JMS绑定,WebService绑定,SCA绑定和无状态会话BEAN的绑定。导出端点提供了三种绑定方式,包括:JMS绑定,WebService绑定和SCA绑定。对于SCA模块之间的调用,我们可以非常方便的把绑定方式设置为SCA绑定,但是对于非SCA模块与SCA模块之间的调用我们只能选择其它绑定方式。
4 共享库(Library)
当我们在构建了多个模块的时候,如果有一些资源可以在不同模块之间共享,那么我们可以选择创建一份可以在不同模块之间进行共享的资源,而不是在不同模块中重复创建。共享库就是存放这些共享资源的地方。共享库可以通过与模块类似的方式在WID中创建,但是共享库包含的内容只有:数据定义,接口定义,数据映射和关系。与模块最大的区别使共享库不包含服务组件,因此也就不包含业务逻辑。从包含的功能来看,我们可以把共享库看作是模块的一个子集。当一个模块需要用到共享库中的资源的时候,我们只需要使模块依赖于共享库即可。从部署的角度,一个共享库会对应一个JAR包。在部署的时候,模块所对应的J2EE企业应用会会自动包含所依赖的共享库JAR包。这里特别要注意的是,这里的共享库概念与WebSphere应用服务器中的共享库不是一个概念,它们之间没有任何联系,因此不要混淆。
5 Standalone Reference
模块中的服务组件是不能直接被外部Java代码使用的,为了外部的Java代码,比如JSP/Servlet使用模块中的服务组件,WID工具在模块中提供了一个特殊的端点,叫做StandaloneReference。这个端点只有引用(Reference),而没有接口(Interface)。只要把这个端点的引用连接到需要调用的服务组件的接口,外部的Java代码通过这个引用的名称来调用相应的服务组件了。具体如何调用请参考后面例子的实际代码。
至此,与服务模块相关的主要概念已大概介绍完了,它们之间的关系如图 3 所示:
图 3:服务模块总览图

本文转自:http://www.blog.edu.cn/user2/wearebest/archives/2006/1382732.shtml
(责任编辑:铭铭mingming_ky#126.com TEL:(010)-68476636)