频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

19.3 Apache Tuscany

作者: 《开源技术选型手册》编委会 出处:电子工业出版社  2008-05-29 17:22    砖    好    评论   进入论坛
阅读提示:《开源技术选型手册》第19章为您介绍的是1面向服务架构篇Web框架篇,本节主要讲述的是Apache Tuscany。

19.3 Apache Tuscany

随着SCA(服务组件架构)和SDO(服务数据对象)最终落户OASIS,国内对它们的关注也呈上升趋势。与以往SOA 开发部署方式相比,SCA 所提供的编程模型和装配模型大大减轻了这些工作的难度。加之有OASIS 标准组织和以IBM为代表的业界巨擘的保驾护航,SCA 和SDO 的前途不可限量。

Tuscany 是SCA 和SDO 的第一个参考实现,旨在提供基于SCA 和SDO 的SOA 基础设施。Tuscany 几乎是伴随规范成长起来的,这样做的目的是对规范进行验证并获得有益的反馈。Tuscany 当前版本实现了SCA 1.0 规范和SDO2.1 规范,它目前处于Apache 的孵化器中。鉴于SCA 成长性良好,以及Tuscany 的首个参考实现的地位,我们强烈建议研究和关注SOA的人们去了解它。

功能和特点

Tuscany 项目包含3 个子项目:SCA 项目、SDO 项目和DAS 项目。其中SCA 和SDO 分别对应于SCA 和SDO 规范,DAS 项目暂时没有相关的规范对应。以上3 个子项目的功能特点如下:

Tuscany SCA子项目

实现了SCA 1.0 规范,目前有Java 和C++
两个实现版本。以下为SCA-Java 的功能特点。

1.实现了SCA主要规范,包括:

SCA装配模型1.0
SCA 策略框架1.0
SCA Java公共标准和API 1.0
SCA Java组件实现1.0
SCA Spring组件实现1.0
SCA BPEL客户端和实现1.0
SCA Web服务绑定1.0
SCA EJB会话Bean绑定1.0

2.支持许多尚未在SCA规范中定义的特性:

支持DWR、RSS和ATOM Feed的SCA绑定
HTTP资源、JSON-RPC、PUB/SUB通
知和RMI
支持OS GI、XQuer y、B P E L及包括Groovy、Javascript、Python和Ruby在内的动态语言的SCA实现类型
支持SDO、JAXB、XmlBeans、Axis2的AXIOM、JSON、SAXON、DOM、SAX和StAX的数据绑定

3.支持多种部署方式:

单独运行
跨多JVM的分布式节点运行
内嵌于Jetty或Tomcat中运行
作为标准的Web应用运行
作为Geronimo中的一个模块运行(实验阶段)

Tuscany SDO子项目

实现了SDO 2.1 规范,目前只有Java 实现
版本。以下是其功能特点:

1.简化和统一SOA中异构数据的访问和代码;

2.为数据访问提供了静态和动态编程模型;

3.基于离线数据集,并能跟踪数据集中数据的变化;

4.提供了冲突的乐观锁检测机制。

Tuscany DAS子项目

实现了访问关系数据的SDO 接口,只有Java实现版本。以下是其功能特点:

1.将对数据源的查询转化成一个数据对象图;
2.将数据对象图的更新转化为对数据源的一系列的CUD操作;
3.基于Command模式;
4.支持MySQL;
5.静态数据对象;
6.用于静态图的动态根;
7.关系的“唯一性”属性;
8.定义结果集格式;
9.日志功能改进;
10.配置可通过编程完成;
11.用于空SDO图的帮助类;
12.COC(Convention over configuration);
13.“ID”列是主键;
14.“xxx_ID”是“xxx”表的外键。


背景介绍

长期以来,SOA 被视为解决业务和IT 之间映射的灵丹妙药。在各大厂商、机构和媒体的包装下,SOA 被标榜为具有加速业务实现、快速应对业务变更,以及重用现有投资等种种好处。如今,从事企业开发的开发者如果没有听说过SOA,在开发者中他会被视为异类,在客户心目中,就有可能对他的水平打上大大的问号。毕竟,在如此猛烈的宣传攻势下,从开发者到客户没有谁能充耳不闻。但是,现实中的SOA 真的是那么美好么?个中奥秘,恐怕只有实践者才能体会得到。由于面对过多的技术细节,缺少清晰的编程模型,加上部署环境复杂多变,使得SOA 项目危机重重。而这,正是SCA/SDO 规范大显身手之处。

由IBM、BEA 等业界巨头共同开发制定的SCA/SDO 规范,是近年来影响最大的SOA 规范。SCA 于2005 年面世,旨在为服务网络的构建、装配和部署定义一个简单、基于服务的模型。SDO则早在2003 年就已经存在,它要解决的问题是为SOA 环境下,异构数据的访问提供一个统一简单的方式。为了促进规范的制定、开发和推广,这些厂商成立了OSOA(Open Service OrientedArchitecture)组织。目前OSOA 组织的厂商有18 家,旨在为SOA 起草一系列的规范,并以免版税的许可方式提供给业界使用,值得一提的是国内厂商普元也是该组织的成员之一,这也是该组织唯一的国内厂商。目前OSOA 下只有两个项目:SCA 和SDO。但是OSOA 毕竟不是标准组织,而且有强烈的厂商背景。为了进一步促进SCA/SDO 的推广和采纳,2007 年3 月, OSOA联盟宣布了SCA 和SDO 规范中关键部分的完成,并发布了SCA 1.0 和SDO 2.1 的时候,将其正式提交给OASIS。同年9 月,SCA/SDO 正式成为OASIS 下的标准,同时成立OpenSOA(OpeService Oriented Architecture)工作组负责标准化。

与WS-* 等SOA 标准规范最大的不同点在于,创建SCA/SDO 并非为了解决SOA 领域中的某一技术问题。它更多地偏向于创建一个明确的SOA 编程和装配模型,帮助SOA 实实在在地落地。与组件技术相结合,为开发者提供一个简单的SOA 编程运行时;同时提供一个装配模型,将一些需要在部署时才确定的绑定协议、策略等信息推迟。这些都使得开发者在开发时无需面对具体的技术细节,而将更多的精力投入到业务问题的解决之中。这无疑大大地提高了SOA 开发实施的效率。

SCA 和SDO 均可以独当一面,并非一定要联合使用,但联合使用有助于将两者的优势结合。联合使用时,SCA 对应服务网络结构,其每个节点由具体的业务组件组成;而SDO 则对应于在服务网络上各个节点间传递的业务数据。它们之间的关系如图19-5 所示:

 

目前,基于SCA 的产品不少,但是开源的可选择的并不多。在Java 领域,主要是ApacheTuscany、Codehaus Fabric3、Eclipse STP。其中,Tuscany 是第一个实现SCA 1.0 和SDO 2.1规范的开源软件,它注重提供一个SOA 的基础设施,项目本身并不提供SOA 开发和管理方面的IDE 插件。据说Fabric3 项目本身是Tuscany 项目内讧的结果,这次的内讧导致了Bea 的开发者全部撤出Tuscany,而成立了Fabric3。目前该项目的主导是Bea,目前还没有1.0 版本的发布。Eclipse STP,它的目的是为SOA 软件的设计、配置、装配、部署、监视和管理提供支持,它利用SCA 作为其模型。目前项目还在Eclipse 的孵化器中。从了解SCA/SDO 本身来说,Tuscany 显然是一个最佳的选择。

参考资料

网站类:

1.OSOA的官方网站:http://www.osoa.org/
2.IBM DeveloperWors中文站 SOA与Web服务专区:http://www-128.ibm.com/developerworks/cn/webservices/
3.BEA dev2dev中文站点:http://dev2dev.bea.com.cn
4.Apache Tuscany官方站点:http://incubator.apache.org/tuscany/
5.Eclipse plugin的更新站点:http://people.apache.org/~jsdelfino/tuscany/tools/updatesite/
6.构客网:http://gocom.primeton.com/

该网站是OSOA 组织成员,国内厂商普元创办的SOA 和面向构件社区。从该网站可获得不少关
于SCA/SDO,以及Tuscany 的相关讨论。

书籍类:

1.《Understanding SOA with Web Services中文版》
译者:徐涵 出版社:电子工业出版社 出版时间:2006年 ISBN:7121028018

2.《SOA原理、方法、实践》
作者:毛新生等 出版社:电子工业出版社 出版时间:2007年 ISBN:9787121042645

文章类:

1.SCA入门的绝佳材料:http://www.davidchappell.com/articles/Introducing_SCA.pdf
2.SOA编程模型:http://www.infoq.com/cn/articles/SOA-programming-models
3.SDO介绍

第一部分:http://java.sys-con.com/read/313547.htm
第二部分:http://java.sys-con.com/read/358059.htm

快速上手教程

本节就Tuscany 的3 个子项目分别给出相关的入门介绍,为读者在今后的使用和研究铺平道路。所需环境如下:

1.Java:JDK 1.5.X
2.如果用Ant:1.7.0
3.如果用Maven:2.0.6

Tuscany 的安装非常简单,从官方网站下载解压即可。

Tuscany SCA

基本概念

基础

组件(Component),组件是SCA中最基本的功能单元,可以类比于Java中的类。需要注意的是,由于SCA语言中立的特性,SCA组件可能是Java代码,也可能是C++代码,甚至是BPEL描述语言。

组合(Composite),组合是一个逻辑概念,类似功能模块。它可以包含多个组件,也可以包含多个组合。在物理上组合并没有对应物,它可能是单机单进程的,也可能是多机多进程的。组成组合的组件可以是由单个技术实现的,也可以是多个不同技术实现的。在SCA中,组合使用SCDL(服务组件定义语言)来定义,保存到.composite文件中。域(Domain),域代表了一个完整的配置运行时,它可包含多个组合。单个域定义了所有SCA机制的可视化边境,如在同一个域内,可以使用域特定的通信机制。在域外则使用如Web服务等互操作机制与其他客户端进行通信。

组件相关概念

服务,代表组件对外提供的功能。

引用,代表组件对外界的依赖。
属性,代表组件的配置信息。

绑定,定义组件与外界的通信机制(一般就是通信协议),当这发生在同一域中时,可以不显式指定。

组合相关概念

连线(Wire),代表组合内组件间的依赖关系。

提升(Promotion),组合暴露其包含组件的服务或引用的过程。

策略,对应QoS方面的设定,如安全、可靠性、事务等。

开发方法

SCA 的开发方法非常简单,一句话即可概括:先实现,再装配。在此,通过实现一个简单的组合来说明使用Tuscany SCA 的过程。在这个组合中包含有两个组件——GreetingService 和IsWhoService,前者调用后者,并打印出相应的信息。整个实现步骤非常简单:

定义和实现GreetingServic

public interface GreetingService {
String greeting();
}
……
import org.osoa.sca.annotations.Reference;
public class GreetingServiceImpl implements GreetingService {
private IsWhoService isWho;
@Reference //定义引用
public void setIsWho(IsWhoService isWho){
this.isWho= isWho;
}
public String greeting() {
return "Hello "+ isWho.who();
}
}
定义和实现IsWhoService
 public interface IsWhoService {
String who();
}
……
public class IsWhoServiceImpl implements IsWhoService {
public String who() {
return "SCA";
}
}
装配(hellocomposite.composite)
http://www.osoa.org/xmlns/sca/1.0" name="Greeting">








测试运行
import org.apache.tuscany.sca.host.embedded.SCADomain;
……
SCADomain scaDomain= SCADomain.newInstance("hellocomposite.composite");
GreetingService greeting= scaDomain.getService(GreetingService.class,
"GreetingComponent");
System.out.println(greeting.greeting());

从整个步骤来看,它与Spring 的开发方式极其相似。其中,在代码中使用@Reference 来定义引用;在.composite 文件中,使用implementation.java 指明组件的实现是Java,使用 定义组件间的引用关系。组件间的依赖关系采用依赖注入的方式由SCADomain 对象完成,从这个角度来看,SCADomain 与Spring 的BeanFactory 非常类似。

3.相关建议

这个例子毕竟只能用来演示Tuscany SCA 的使用方式,对于实际的开发应用作用却十分有限。为了能在实际的生产环境中使用它,有几点建议可以参考:

以David Chappell的《Introducing SCA》为入门材料(下载地址见上述的参考资料)。

SCA目前的资料并不多,它的白皮书是难得的学习材料,而且官方网站也提供了一些教程和文章的链接。

学习例子代码。Tuscany的文档虽少,但是例子代码却相当丰富。但是全部把例子代码都看一遍显然是不合适的。有些例子代码可以在实际需要时再看不迟。阅读例子以相应涉及的知识点为优先考虑的因素。

参与论坛,多与同行进行交流,共同学习,共同成长。

Tuscany SDO

基本概念

DataObject,它包含实际数据。其中的数据可能是一些原始类型的数据,如int;也有可能是指向其他DataObject的引用。DataObject还有指向它的元数据的引用。DataGraph,它是一个多根的DataObject集合,会记录所有数据的变化,包括DataObject的CRUD。

元数据,记录DataObject的数据类型、约束和关系等信息。数据访问服务(DAS),负责由数据源产生DataGraph,并将DataGraph的变化应用到数据源中。

另外需要注意的一点就是,SDO 是一个脱机的数据集合,这是它与JDBC 的结果集最大的区别。SDO 这4 个基本组件之间的协作关系如图19-6 所示:

 

2.开发方法

SDO 提供了静态和动态两种编程模型。在静态模型中,不需要使用太多的SDO API,而是使用相应的工具,根据定义好的数据模型(一般保存在xsd 文件中)直接产生强类型结构,然后如普通对象一样使用它就行了。动态模型则相反,它不会产生一个强类型结构,而是根据数据模型在程序运行时动态创建DataObject,整个过程会大量使用SDO API。

以下分别给出静态模型和动态模型的例子,这两个例子都使用以下的XSD(name.xsd):

  xmlns:xsd="http://www.w3.org/2001/XMLSchema">







静态模型

使用org.apache.tuscany.sdo.generate.XSD2JavaGenerator产生对应的Java对象,书写对应的Ant脚本:

 
"org.apache.tuscany.sdo.generate.XSD2JavaGenerator" fork="true">












使用:
  Name name = NameFactory.INSTANCE.createName();
name.setFirst("David");
name.setLast("Haney");

其中,XSD2JavaGenerator 的prefix 参数指定xxxFactory 的前缀,此处是“Name”,最终Factory的名字就是NameFactory;产生的Java 对象的名字与XSD 中元素类型的名字是一致的,此处是“Name”。

动态模型

获取类型信息

HelperContext scope = SDOUtil.createHelperContext();
XSDHelper xsdHelper = scope.getXSDHelper();
URL url = getClass().getResource("src/main/resources/name.xsd ");
is = url.openStream();
xsdHelper.define(is, url.toString());
使用DataObject
 DataObject name = scope.getDataFactory().create("name.xsd ","Name");
name.setString("first", "David");
name.setString("last", "Haney");


整个过程实际与静态模型一致,只不过一种是以强类型的方式产生再直接使用,另一种是在内存中创建再使用。两种方式各有优缺点:前者的耦合性高,但是简单易于使用,且可利用实现环境的编译器在运行前发现语法错误;后者的耦合性低,但是使用相对麻烦,而且数据类型的错误要在运行时才能发现。

3.相关建议

通过例子了解API的使用,Tuscany SDO的例子给出了低、中、高三级的使用例子。但这都是动态模型的例子,对于静态模型的一个例子可以参考Tuscany SCA的helloworld-wssdo。

着重了解它的应用场景。虽然在小场景中它的使用方式与JDBC之类的数据方开发包非常类似,但是如何在一个异构的环境中去使用它,是一个需要考虑的大问题。Tuscany DAS

1.基本概念

与Tuscany SCA/SDO不同,Tuscany DAS并没有对应的规范,它只提供了对访问关系数据库的支持。它的最大特点就是使用Command模式,关于该模式的介绍请参考GOF的《设计模式》。

2.开发方法

Tuscany DAS的使用步骤分为两步

在配置文件中定义连接、Command名字、表的信息和它们之间的关系等信息;

由配置文件创建一个DAS对象,然后由DAS创建相应的Command对象去使用。
具体过程请参见Tuscany DAS自带的例子。

版本信息

Tuscany 项目由3 个子项目组成,当前每个项目中涉及语言实现和版本号如下:

 

关于当前版本的功能特点,在上述文字中已有交待,在此就不再赘述。至于未来的走向,在新版本发布后不久,项目的主要开发人员Jean-Sebastien Delfino 曾在邮件列表中征求过大家的意见。这些邮件的内容最后形成了Tuscany SCAJava 的路线图讨论稿,该讨论稿(http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Roadmap+Discussion) 保存在Tuscany 的Wiki中。其中对开发者来说,最关心的莫过于开发工具和文档。幸运的是,在该讨论稿中已经非常明确地提出,要改进对基于Eclipse 的工具的支持,以及网站的文档。

社区视角

SCA 和SDO 中的概念和模型并不是新鲜的面孔,它们也借鉴了许多已经在业界成功应用的经验和成果。如SCA 的编程模型和装配模型,对于熟悉Spring 的开发者来说并不陌生。其中的依赖注入、标注、分离关注点和声明式的配置方式,早已在Spring 中广泛使用。而SDO 本身,其实也就是一种DTO(数据传输对象)的应用并且它的离线结果集、元数据、数据变更记录等概念,也可在.Net 的ADO.Net 中的DataSet 中找到相应的影子。此外,DAS 应用了Command 模式,而这也与Ado.Net 的数据访问方式不谋而合。

SCA 和SDO 并非是一种彻底的革命,而是技术发展道路上的一次演变。这样降低了失败的风险,方便其推广和被接受。而且需要注意的是,SCA 和SDO 并不是替代现有的SOA 相关规范和标准。它的目的是提供一个编程和装配模型,以方便地使用它们。因此,与现有的标准规范之间的关系更多的是一种互补,而非竞争关系。2007 年9 月,SCA 和SDO 最终成为OASIS 下的标准,并成立了OpenCSA(开放组合服务架构)工作组负责它们的标准化。这一事件无疑为SCA 和SDO的推广使用起到了推波助澜的作用。

业界对于Tuscany 的评价基本是正面的,而且作为SCA/SDO 的牵头人之一的IBM 已经准备将Tuscany 融入其WebSphere 产品线中。研究和使用作为SCA/SDO 参考实现的Tuscany,对于了解规范的意义重大。但是,在使用之前尚需了解潜在的风险:

1.社区尚未有大规模应用的经验,这意味着遇到新问题的几率非常大。此时,应多求助于它的邮件列表;

2.Tuscany官方网站上的资料和文档非常有限,在其他地方要找到相关的文档和资料也非易事;

3.SCA虽然简化了开发人员的编程任务,但是对于装配来说,相关的标准规范仍需了解。而这些内容涉及广泛,有一定的学习难度;

4.由于规范正处于标准化的进程中,API变化频繁是件常事,因此要有心理准备。

作者介绍

胡键,2000 年硕士毕业后从事软件开发工作,在实际的项目中长期担任项目经理和技术经理。关心软件技术和相关工具的动态,将其中相对成熟的技术和工具应用到实际的项目之中。已在IBM developerWorks中国网站发表数篇文章。目前醉心于服务器端软件的设计和开发,并致力于研究SOA 方面的规范、技术和工具。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   
· 19.2 Apache ODE(05/29)
· 19.1 Apache CXF(05/29)
· 2.3 Seam(05/29)
· 2.2 Spring(05/29)
· 2.1 Struts(05/29)
专题
汶川大地震 IT技术人在行动
解析35岁技术人的价值与出路
LAMP技术精解
调查:十大发现 解秘技术人
北漂技术人90天求职纪实
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
网络工程师的职业规划与生存现状
网络工程师的职业规划与生存..
勇闯IT培训黑色围城
勇闯IT培训黑色围城
如何有效防御SQL注入攻击
如何有效防御SQL注入攻击
· 如何有效防御SQL注入攻..
· 2008年上半年全国软考..
· 选择适合自己的IT认证
· IPv6协议--拓展网络无..
· 了解统一威胁管理(UTM)..
· 调查:十大发现 解秘技..
· 技术人求职简历完备手册
· Vista SP1对决XP SP3
· 运营商封堵ADSL共享 中..
· LAMP技术精解
· PHP开发应用手册
· 解析35岁技术人的价值..
· 汶川大地震 IT技术人在..
· SOA 面向服务架构
· 龙芯要做中国的“奔腾”
· 微软出价446亿美元收购..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· ADSL应用面面俱到
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· RAID——磁盘阵列基础
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用