资料来源:http://www.ibm.com/developerworks/cn/webservices/lp/sca/
术语缩写:
SCA:Service Component Architecture
WPS:WebSphere Process Server
WSIF:Web Service Invocation Framework
WID:WebSphere Integration Developer
SDO:Service Data Object
第一部分 SCA编程模型入门 (http://www.ibm.com/developerworks/cn/webservices/ws-sca/)
1.2 SCA中的基本概念
1.2.1 服务组件:
基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。
SCA服务组件的主要接口规范是基于WSDL,部分服务组件也提供了Java接口。
使用服务组件的客户端可以选择使用WSDL接口或Java接口。
服务组件提供给别的服务调用,这个入口叫Interface(接口)。
而服务组件本身调用别的服务,这个调用出口叫Reference(引用)
SCA服务组件与传统组件的主要区别在于:
1. 服务组件往往是粗粒度的,而传统组件以细粒度居多。
2. 服务组件的接口是标准的,主要是WSDL接口,而传统组件常以具体API形式出现。
3. 服务组件的实现与语言是无关的,而传统组件常绑定某种特定的语言。
4. 服务组件可以通过组件容器提供QoS的服务,而传统组件完全由程序代码直接控制。
1.2.2 服务模块(Module)
由一个或多个具有内在业务联系的服务组件构成
模块是SCA中的运行单位,因为一个SCA模块背后对应的是一个J2EE的企业应用项目。
由于一个模块中往往会包含多个服务组件,我们可以通过接口与引用之间的连线来构建服务组件之间的相互调用关系。
另外,我们可以在这些连线上面设定需要的QoS要求,比如事务,安全等。
1.2.3 导入(Import)和导出(Export)
产生背景:
实际的应用通常需要多个模块才能满足要求,而且这些模块之间又往往存在相互调用的关系。
另外模块中服务组件需要调用已有的一些应用,或者是让一些已有的应用来调用模块的服务,而这些应用可能不是基于SCA架构的。
解决办法:
在模块中我们引入了两个特殊的"端点",
一个是导入(Import),它的作用是使得模块中的服务组件可以调用模块外部的服务。
另一个是导出(Export),它的作用是使得模块外部的应用可以调用模块中的服务组件。
导入端点提供了四种绑定方式,包括:JMS绑定,Web Service绑定,SCA绑定和无状态会话BEAN的绑定。
导出端点提供了三种绑定方式,包括:JMS绑定,Web Service绑定和SCA绑定。
1.2.4 共享库(Library)
在构建了多个模块的时候,可以选择创建一份可以在不同模块之间进行共享的资源,它们存放的地方即共享库。
共享库包含的内容只有:数据定义,接口定义,数据映射和关系。
与模块最大的区别使共享库不包含服务组件,因此也就不包含业务逻辑。
从包含的功能来看,我们可以把共享库看作是模块的一个子集。
1.2.5 Standalone Reference
一个特殊的端点,只有引用(Reference),而没有接口(Interface)。
只要把这个端点的引用连接到需要调用的服务组件的接口,外部的Java代码(比如JSP/Servlet)就可以通过这个引用的名称来调用相应的服务组件了。
1.3 同步调用和异步调用
同步调用:最常见,一种阻塞式的调用方式,但不适合SCA环境中粗粒度的组件服务调用。
SCA编程模式提供三种异步调用:
1. 单向调用方式。
2. 延迟响应方式。
3. 请求回调方式。
1.4 SCA客户端的两种调用方式
1. 静态调用方式
一种类型安全的方式,在一般Java编程中最为常见。
所谓类型安全指的就是在编译的时候就做类型的检查,而不是等到运行的时候发现类型错误问题。
在SCA客户端编程中,静态方式就是直接拿到实际实现的接口类型,也即直接拿到Java接口。
2. 动态调用方式
在动态调用方式中,客户端通过invoke方法的字符串参数的方式来指定具体要调用的方法名称。
另外要注意的一点是,在这种调用方式下,所有参数传递都是通过DataObject的方式,即SDO的方式。哪怕实际参数只是一个字符串
第二部分 服务组件体系结构概述 (http://www.ibm.com/developerworks/cn/webservices/ws-soa-scadev1/)
面向服务的体系结构 (SOA) 是一个框架,用于组合各个业务功能和流程(称为服务),以便实现复杂的业务应用程序和流程。
在 SOA 框架中,相对粗粒度的业务组件被作为服务公开。
SOA 将 IT 资产构造为一系列可重用的服务,这些服务是松散耦合的,与平台和实现无关。
SOA 将解决方案设计为服务的组装,通过定义良好的接口和契约进行连接。
SCA 可简化使用 SOA 构建的业务应用程序的创建和集成。
SCA 提供了构建粗粒度组件的机制,这些粗粒度组件由细粒度组件组装而成。
SCA 方法的优势包括:
简化业务组件开发
简化作为服务网络构建的业务解决方案的组装和部署
提高可移植性、可重用性和灵活性
通过屏蔽底层技术变更来保护业务逻辑资产
提高可测试
SCA 体系结构
SCA 将构建面向服务的应用程序的步骤划分为两个主要部分:
实现提供服务和使用其他服务的组件
组装组件,以通过服务引用其他服务的方式来构建业务应用程序
1. 服务实现和服务客户机
服务实现是业务逻辑的具体实现,提供服务和/或使用服务。这些实现会使用众多实现技术中的任意一种,如 Java™、BPEL 或 C++。实现是业务流程的“仆人”。
实现可以提供服务,而服务则是由一个接口定义的一组操作,此接口供其他组件调用。
实现也可以调用其他服务,称之为服务引用,服务引用指示了此实现对外界服务的依赖关系。
实现还可以具有一个或多个可配置属性。属性是可以从外部配置的数据值,会影响此实现的业务功能。
SCA 服务通常对参数和返回值使用文档样式的业务数据,最好使用服务数据对象(SDO)表示这些参数。
服务、引用和属性是实现的可配置方面——SCA 将其统称为组件类型。
2. 组装
组装一个组合业务应用程序的过程,在此过程中配置并连接提供服务实现的组件。SCA 组装在两个层次进行:
系统内松散连接的组件的组装
模块内松散连接的组件的组装
SCA 组装模型包括一系列由 XML 元素定义的构件。
第三部分 其他资源:
SCA/SDO中文规范(目录)http://gocom.primeton.com/special/scaspecs/
SCA规范学习-装配规范 http://wenku.baidu.com/view/cb05e5ed5ef7ba0d4a733b9d.html
SCA与其他主流技术的集成 https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=88296
Spring:在很多企业级的应用系统中,Spring已经担负起可靠的细粒度的集成框架;
OSGi:正在成为Java世界里最为有效的解决依赖关系的技术;
SCA:SCA是被标准化组织接纳为新一代标准的SOA重要构成之一;
SCA的先进思想在于:
构件的实现(implementation)和引用(reference)将服务的实现和使用分离开来,
同时将各种可能的通讯方式从业务代码中分离出来,转为由容器处理。
SCA 规范V1.0 标准发布 http://webservices.ctocio.com.cn/news/413/7133913.shtml
这次发布的V1.0包括的内容有:
- Assembly model, for composing services
- Policy Framework, for applying infrastructure such as Security, Reliable Messaging
- Java Component model
- Spring Component model
- BPEL Component model
- C++ Component model
- Bindings for Web services
- Bindings for JMS
- Bindings for EJB Sessions Beans
官方站点:http://www.osoa.org
SCA与其他主流技术的集成 https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=88296
SCA规范学习-装配规范 http://wenku.baidu.com/view/cb05e5ed5ef7ba0d4a733b9d.html
SCA_Java http://wenku.baidu.com/view/6e8634ef551810a6f5248688.html
http://www.oasis-open.org/cn/who/index.htm
Organization for the Advancement of Structured Information Standards
结构化信息标准促进组织是一个推进电子商务标准的发展、融合与采纳的非盈利性国际化组织。
在 Apache Tuscany 上开发基于 SCA 的 Web 2.0 应用 http://www.ibm.com/developerworks/cn/webservices/0907_sca_web20/index.html