第36卷 第1期计算机科学Vol.36No.1面向服务的体系结构主要实现技术比较研究
尹红丽1 王永明2
(云南师范大学计算机科学与信息技术学院 昆明650092)1
(华南理工大学计算机科学与工程学院 广州510641)2
摘 要 面向服务的体系结构(SOA)是一种网络环境下分布式应用系统的概念模型。在这个模型中,松耦合的系统
组件在网络上被描述、发布和调用。实现这样体系结构的网络应用系统有多种方法。对CORBA,DCOM,RMI以及WebService,Jini等几种主要实现方法进行了详细的分析并对这些方法作了对比,指出这些实现方法各自的优势和不足。分析对比的结果将为今后根据具体应用选用正确、有效的实现方式提供指导作用。关键词 SOA,比较研究,分布式系统,软件体系结构中图法分类号 TP242.6 文献标识码 A
ComparativeResearchonSeveralMainImplementationTechniqueofSOA
YINHong2li
1
WANGYong2ming
2
1
(SchoolofComputerScienceandInformation,YunnanNormalUniversity,Kunming650092)
(SchoolofComputerSci.&Eng.,SouthChinaUniversityofTechnology,Guangzhou)2
Abstract SOAisaconceptualmodelofdistributedapplication,inthismodel,theloosecoupledsystemcomponentsweredescribed,releasedtoimplementtheapp2licationsystemwithSOAmodel.Wecomparedand,DCOM,RMI,WebServiceandJi2ni,pointedouttheiradvantagesandTheasreferencetochoseimplementationmethod.Keywords SOA,Comparative,,Softwarearchitecture
强调软件组件的松散耦合,并使用独立的标准接口。”
传统的分布式计算模型是从本地计算模型的基础上发展而来的,为了能够最大限度减低复杂度,重用本地计算模型去解决分布式计算的问题,传统的分布式计算模型尽量向编程人员屏蔽网络的存在,所以在编程人员看来,网络编程与本地编程并没有根本的差别,编程人员不用担心网络的存在。编程人员无须区分远程地址空间和本地地址空间的区别,所有的组件均利用一种通用语言———接口语言,一般称为接口定义语言(InterfaceDefinitionLanguage)通过它来做到与具体编程语言无关。通过这些简化,编程人员采用本地计算模型来实现一个分布式的计算应用。人们称这种方法为“本地化设计、分布式工作”模型。CORBA,DCOM,RMI等都属于这种解决方式。WebService和Jini是新型的动态分布式实现方案。本文将对这些实现方法的原理进行分析和对比研究。
1 引言
,企业级应用需求要求新的软件系统不再是从底层做起,而是依据企业逻辑需求重新组织已有的数据存储,将现有的数据和事务通过新的渠道,比如Inter2
net浏览器或者手持设备呈现给用户。另外,为了提高企业计算的高效性、可用性、规模性,现有许多的操作系统都是分布式操作系统,运行在许多机器之上。这样的企业级解决方案就必须协调运行在群组硬件之上,实现这种系统的一种方法就是将该系统组织成群组服务的模式,每一个服务都提供一组定义良好的功能集合。整个系统其实就被设计和实现为一组相互交互的服务,而将功能以服务的形式展现出来是该系统灵活性的关键。它使得系统中的某些服务能够充分利用其它的服务而无需考虑其物理位置。系统通过添加新的服务来不断升级,这样就应运而生了面向服务的体系结构(SOA)。W3C(TheWorldWideWebConsortium,万维网联盟)将
SOA定义为[1]“:一种应用程序体系结构,在这种体系结构
2 CORBA(通用对象请求代理体系结构)组件实现
方法
CORBA[2]遵循了通用的分布式系统解决方案模式。服
务提供者通过在可用的命名目录(CORBA命名)中发布其服务对象,对此分布式对象感兴趣的客户则通过该命名服务找到服务器对象,然后就可以调用服务器对象上的合适的服务了。为了做到这一点,客户必须提前与命名服务以及服务器
中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,可以以定义好的顺序来调用这些服务形成业务流程”。Gartner则将SOA描述为“:客户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成,SOA与大多数通用的客户端/服务器模型的不同之处,在于它着重
到稿日期:2008204229 本文受云南省教育厅科学研究基金项目(08Y10326)资助。
尹红丽(1976-),女,讲师,主要研究方向为智能处理、多智能体系统;王永明(1976-),男,博士,主要研究方向为网络集成、网络机器人。
・282・
提供的各种服务绑定以得到有关的信息(比如服务器对象提供的属性、方法、接口等)。这是通过CORBA接口定义语言(InterfaceDefinitionLanguage,IDL)完成的。IDL是中立于任何语言的,CORBA通过IDL来实现与编程语言的无关性。IDL有助于描述服务而无需深入到具体实现细节。用这种方法可以将实现(Implementation)与接口(Interface)相分离。
CORBA服务器必须实现IDL接口,而CORBA客户使用此
4 远程方法调用(RMI)实现方法
从Javal.1开始,远程方法调用(RMI)作为Java分布式对象技术的核心,成为JavaAPI之一。它使得Java程序之间能够实现灵活的、可扩展的分布式通信。RMI允许对象存在于多个指定地址空间,分布在各种Java虚拟机上。每个指定地址空间可以在同一计算机上或网上的不同计算机上。由于远程方法调用跨越Java虚拟机边界到不同的指定地址空间,因此没有对象共享的全局变量。
RMI具有以下特点:
1.面向对象的设计模式:RMI能够传递完整的对象类
接口。CORBA组件之间的交互见图1
。
型,包括其实现,因此可以在分布式计算解决方案中,而不仅
图1 CORBA组件
仅在本地计算中,使用面向对象的编程;
2.易于连接到已有的系统中:RMI是通过Java的本地方
所有本地调用的方法均通过一个称为桩的客户代理完成,它将方法参数和数据进行串行化,并发送到称为体的服务器端对象,而体则需要重构此方法及其详细内容。体要负责代表客户来调用这个方法,并正确地返回结果。桩和体的交互是通过ORB进行的。ORB也称为对象BUS,它负责找到合适的服务器对象(使用服务器对象引用),并向服务器传输方法参数、数据,此外还要从服务器传回方法结果。客户与
ORB通过一个桩实现交互,而服务器对象则使用一个对象适
法接口(JNI:JavaNativeInterface)与已有的系统交互的。使用RMI和JNI可以用Java编写新的客户端而服务端使用已有的实现,并可以根据需要对RMI服务端已有实现的任何部分重新编写,大大提高了软件的复用率;
4.多线程并行计算:RMI,允许服务器使用Java;
5.Java,此外由于RMI程序易于编写,它们同样也易6.分布式无用单元收集:RMI使用它的分布式无用单元
配器(ObjectAdapter,OA)或者ORB接口与ORB实现交互。客户的ORB与服务器的ORB之间通过通用跨ORB(GeneralInterORBProtocol,GIOP)跨协
议(InternetInterORB,,位置、收集算法来收集远程服务器上不再被网络上任何客户引用的对象。分布式的无用单元收集可以根据需要定义服务器对象,当它们不再被客户端访问时,将被从系统中删除,从而大
大提高了系统的效率。
3 DCOM()组件实现方法
DCOM[3]也采用通用的分布式系统解决模式,与COR2BA十分相似。通过对象提供服务的服务器在一个可用的命
5 WebService组件实现方法
WebService[4]作为一种分布式的服务提供方式,可以认
名目录(活动目录服务)中发布其对象。对此分布式对象感兴趣的客户必须知道此服务器提供的多种服务。这通过MS2
IDL实现。服务对象实现了IDL接口。
为是SOA体系结构的一种实现方式,其目的是使分布在网络上不同地理位置和不同平台的客户可以获得服务。Web
Service框架体系由3个基本元素组成———服务提供者、客户(服务接收者)和服务注册。服务提供者将自己的服务在服务
所有本地调用的方法均通过一个称为代理的客户代理来完成,它将完成方法参数和数据的串行化并发送到一个称为桩的服务器对象上,在此要重构此方法及其详细内容。这个桩负责代表客户调用方法并正确地返回结果。由于DCOM规范是二进制级的,它可以将不同编程语言编写的二进制组件加以集成,如C++,Java和VisualBasic等。与CORBA不同,DCOM只能基于MicrosoftWindows平台,是Win2
dows2Windows的分布式解决方案。DCOM组件之间的交互
注册处进行注册,客户通过访问服务注册来获得服务的信息,然后获得服务。
与当前传统的组件技术不同,Web服务不使用特定于对象模型的协议(比如DCOM,RMI或IIOP,这些协议要求在客户机和服务器上同时具有特定的基础结构,既需要在可控制的环境中使用)。在Web环境中,客户机和服务器千变万化,它们使用不同的操作系统和不同的技术,因此把组件的实现紧密地绑定在特定的组件技术上是不切实际的。Web服务是使用HTTP,SOAP和XML等普遍存在的标准协议和数据格式来通信的,因此所有支持这些协议和数据格式的系统都能支持Web服务。
Web服务以消息的形式来提供服务,它使用基于XML
见图2。
的消息来作为数据通信的基本方法。这使Web服务完全与
图2 DCOM组件
语言、平台和对象模型无关。Web服务可以使用任何语言和对象模型在任意的平台上实现,任意的应用程序都可以使用
・283・
Web服务。只要描述Web服务功能的接口和消息序列以及
协议保持不变,Web服务和客户应用程序可以任意改变而不会相互影响。运行时,客户应用程序发出服务调用请求,客户端代理程序把该请求转化为符合WebService调用所要求的格式,通过SOAP协议向服务发出调用,服务接到请求后进行处理,把结果通过SOAP协议返回给客户。从而客户完成一次服务调用。因为Web服务要在异构的Web环境中使用,在这个环境中存在着多种不同的操作系统、对象模型和编程语言,所以Web服务必须具有以下特点:
1.松散耦合:客户程序仅使用自描述的、基于文本的消息与Web服务进行通信;
2.方便的通信:连接到Internet上的任意系统或设备都可以与Web服务进行通信;
3.通用的数据格式:Web服务使用广泛支持的XML标准来描述其数据格式,所有支持这个标准的系统都可以识别Web服务的消息。
6 Jini组件实现方法及几种方法比较
Jini[5,6]组件包括服务、客户和查找服务(Lookupserv2ices)。在客户开始接受服务之前,必须要经过3个过程:发现(Discovery)、加入(Join)和查找(Lookup),这3个过程同时也
是通过3个同名的协议完成的:发现协议(Discovery)、加入(Join)协议和查找(Lookup)协议。客户和服务都可以通过发现过程来定位查找服务的位置,加入过程使得服务可以把自己注册到查找服务上去。的服务。
发现(Discovery)、加入()述如下:当一个Jini,(multi2cast)。网络中的,当它监听到这个消息后,,并进行分析,以便决定是否与发送者相联系。如果它决定和发送者联系,就会通过一个TCP与发送者建立连接,并通过RMI(RemoteMethodInvocation)向发送者回传一个服务登记对象(serviceregister),发送者通过调用服务登记对象中的register()方法,作为参数上传一个
serviceitem对象,这就完成了发现和加入。Serviceitem对象
是自愈合的,这一点是通过Jini的租用机制实现的。租用机制使得服务经过一定的时间,自动地从联邦中移除,而无需管理员维护。服务提供者要和查找服务协商对查找服务的租用期,并且维护一个租用使它保持有效,否则查找服务就会取消服务注册。而客户也要和服务提供者协商服务租用期。当网络发生变化时,Jini使得管理员无需做改变软件中的URL、更新资源文件、为客户机安装服务代理等工作,而这些在传统的分布式计算体系中是很正常的。比如CORBA,.NET,J2EE等都需要静态的安装(需要人工安装且不能动态的更新)客户桩(stub)和服务器端骨架(skeleton),而Jini通过代码移动解决了这个问题,这也是Jini最强有力的一个特点。Jini采用如下方法解决分布式计算中存在的常见问题:1)利用Java来克服编程模型和编程语言的问题;2)提供了一个新的基础设施。
Jini还提供了一种分布式事件机制,这是对JavaBeans事件模型的扩展,由此服务请求者可以在服务提供者处注册其所需服务。服务一旦可用,服务请求者还能获得服务通知,因此不再需要任何轮询。部分失败是通过租用机制加以处理的。租用为服务的使用引入了一个时间的概念。在Jini中,接。在Jini环境中,,,。这样就可以支持建,。此外,由服务请求者与服务提供者协,还可以控制某个服务提供者的服务请求者。1是Jini对相关问题的处理方法,表2是几种分布式计算体系结构比较研究。
表1 Jini的问题处理方法
问题
Jini
网络延迟部分失败并发性
服务提供者和服务请求者之间的耦合
编程模型
通过Jini远程接口区别本地对象/组件和远程对象/组件
使用租用机制和发现协议加以处理
通过事务管理器接口加以处理
由于代理对象将按需下载到客户端,因此没有更多的紧耦合。服务提供者与服务请求者之间的关系是动态的,服务期的长短可以依据服务请求者和服务提供者的协商而定。
编程语言
采用Java语言,不支持指针,区别本地对象和远程对象
基础设施相关
提供一个分布式事件机制,服务请求者可以在某个服务提供者处注册其所需的服务,并在服务可用时得到通知。
与协议无关,可以包容任何协议:JRMP,IIOP,OR2PC,SOAP是一个对象容器,其中包括一个serviceobject对象,作为Jini服务代理(Proxy),它负责和服务器交互,它实现了一个或者若干个客户与服务交互的接口。客户同样通过发现协议(Discovery)获得一个服务登记对象(serviceregister),然后调用服务登记对象的Lookup()方法(不要把它和Lookup服务混淆,前者是服务登记对象的一个方法,后者是整个查找服务),作为参数上传一个servicetemplate对象,用来作为查询准则。这个对象含有一个引用指向一组Classobjects对象,这些对象指示查找服务,客户所需要的Java类型的serviceobject对象。lookup()方法返回符合客户需要的serviceob2ject对象。每个serviceobject对象都会实现(implement)一个或者若干个客户与服务交互的接口(interface)。客户通过引用(reference)来使用serviceobject对象,通过这个对象来获得服务。
与一般的分布式系统努力掩盖网络存在的做法不同,Jini努力去适应网络存在这个事实。比如网络可靠性的问题,Jini
地址空间
客房获得所需服务的通知机制服务请求协议
表2 几种分布式计算体系结构的问题处理方法比较
问题
CORBA
DCOM
RMI
网络延迟部分失败并发性
编程模型
没有显式区别本地没有显式区别本地显式区别本地对象对象和远程对象对象和远程对象和远程对象无法处理无法处理无法处理并发是一个可选服
可以得到并发服务没有处理并发
务
・284・
服务提供存在紧耦合,客户桩者与客户(stub)需要由客户的耦合应用进行编译通知客户
获得所需没有可用的分布式服务的机事务通知机制制
存在紧耦合,客户桩(stub)需要由客户应用进行编译或者导入
没有可用的分布式事务通知机制
无紧耦合,客户桩(stub)可以在运行时下载到客户
交互来实现系统动态、松耦合集成,极大地降低了复杂性与成本。但目前为止没有文献对实现它的方法进行明确的论述,造成人们在实现它时总是无从下手。本文在深入分析了
SOA实现方法机理的基础上,提出各自的优点和不足之处;
使用Java事件通知
模型
并将主要方法作横向比较研究。Jini是一种基于Java的分布式系统,具有许多其它分布式模型没有的优点,是如今使用最多的分布式计算编程模型。但在如今多种模型并存的现实情况下,Jini不可能完全代替CORBA,DCOM,RMI,基于UDDI的WebService等分布式计算体系,所以应该努力解决这些分布式计算体系之间共存并且相互操作的问题,这样不仅能够充分利用不同的分布式计算体系的优点,还可以巧妙地避免彼此的缺点。而且从应用的层次上来看,用户并不希望被绑定在一家公司的产品上,而希望有更多的选择余地,所以,下一步的研究应着重于解决这些分布式系统之间互操作的方法,它不仅有理论上的意义,还具有现实的意义。
没有显式区别本地
区别本地
对象和远程对象,需
和远程地
要在本地建立远程
址空间
对象的对象引用
没有显式区别本地对象和远程对象,需要在本地建立远程对象接口的专用指针
区别本地和远程对象。使用3种技术来处理远程交互:1)建立对远程对象的引用;2)非远程对象可以串行化并以传值的方式传递;3)简单数据类型也可以利用传值的方式传递
编程语言及基础设施相关
何种编程语言应用组件之间的交互
多种编程语言所有远程对象使用CORBA接口定义语言(CORBA2IDL)
多种编程语言所有远程对象使用
Java
所有远程对象使用
COM接口定义语言Java远程接口发布,(COM2IDL)进行发并实现Java远程接
参考文献
[1]
WuJie.DistributedSystem,等译.北京机械工业
请求协议
进行发布
依赖于通用ORB协议(GIOP)通用In2ternet跨ORB协议(IIOP)
具有平台无关性
布
口
依赖于Java远程方
依赖于对象远程过
法协议(JavaRe2
程通信协议(OR2
motemethodProto2
PC)
col,JRMP)MicrosoftWindows
出版社,2001:5215
[2]]
李兵,陈鸣..解放军理:4:39243
,.基于DCOM的分布式计算机控制系统,2001(6):7210
,杨宗凯,乐春晖.基于WebService的一种分布式体系结构.计算机应用研究,2002(6):1052107
KumaranS.Jini技术指南.林琪,欧阳宇,等译[M].北京机械工
操作系统
系列
应用的网络方面
ORB负责处理数据
ORPC的调用和格式转换
具有平台无关性,但需要安装Java机(VM)
/,JVM2JVM之间进行,利用Java串行化技术通信
]
[5]
业出版社,2003:10220
[6]
EckelB.ThinkinginJava[M].2ndedition,Revision12,2000:50265
结束语 SOA,通过服务的
(上接第266页)
[7]
CiupaL,LeitnerA,OriolM,etal.Objectdistanceanditsappli2cationtoadaptiverandomtestingofobject2orientedprograms∥Proc.ofthe1stInternationalworkshoponRandomTesting(RT’06).ACMPress,2006:55263
信念网络[12]等来学习测试用例。因此,未来工作主要是多种
分类学习模型的应用以及进一步的实例研究。
参考文献
[1][2][3]
HamletR.Randomtesting.EncyclopediaofSoftwareEnginee2ring.JohnWileyandSons,1994
RumbaughJ,JacobsonI,BoochG.TheUnifiedModelingLan2guageUserGuide.Boston:Addison2Wesley,2001
WangL,YuanJ,YuX,etal.GeneratingTestCasesfromUMLActivityDiagramBasedonGray2BoxMethod∥Proc.ofAPSEC’04.IEEEComputerSociety,NewJersey,2004:2842291[4]
ChenT,PoonP,TangS,etal.IdentificationofCategoriesandChoicesinActivityDiagrams∥Proc.ofthe5thInternationalConferenceonQualitySoftware(QSIC’05).IEEEComputer[5]
Society,2005:55263
ChenM,QiuX,XuW,etal.UMLActivityDiagram2basedAu2tomaticTestCaseGenerationforJavaPrograms.TheComputerJournal,2007,doi:10.1093/comjnl/bxm057[6]
ChenTY,HuangDH,ZhouZQ.Adaptiverandomtestingthroughiterativepartitioning∥Proc.ofthe11thInternationalConferenceonReliableSoftwareTechnologies,LNCS4006.Ber2linHeidelberg:Springer2Verlag,2006:1552166
[8]
GrochtmannM,WegenerJ,GrimmK.Testcasedesignusingclassificationtreesandtheclassification2treeeditorCTE∥Proc.ofthe8thInternationalSoftwareQualityWeek(QW’95).Soft2wareResearchInstitute,SanFrancisco,CA,1995
[9]SinghH,ConradM,SadeghipourS.TestCaseDesignBasedon
ZandtheClassification2TreeMethod∥Proc.ofthe1stInterna2tionalConferenceonFormalEngineeringMethods(ICFEM’97).IEEEComputerSociety,1997:81290
[10]KruppA,MuellerW.ClassificationTreesforRandomTestsand
FunctionalCoverage∥Proc.oftheConferenceonDesign,Auto2mationandTestinEurope,EDAA.2006:103121032
[11]McMinnP.Search2basedSoftwareTestDataGeneration:ASur2
vey.SoftwareTesting,VerificationandReliability,2004,14(2):1052156
[12]HanJ,KamberM.DataMining:ConceptsandTechniques.Mor2
ganKaufmannPublishers,2001:2792296
[13]KolmanB,BusbyR,RossS.DiscreteMathematicalStructures.
FourthEdition.PrenticeHall,Inc.,2001
[14]BlahaM,RumbaughJ.Object2orientedModelingandDesign
withUML.SecondEdition.PearsonEducation,Inc.,2005
・285・
第36卷 第1期计算机科学Vol.36No.1面向服务的体系结构主要实现技术比较研究
尹红丽1 王永明2
(云南师范大学计算机科学与信息技术学院 昆明650092)1
(华南理工大学计算机科学与工程学院 广州510641)2
摘 要 面向服务的体系结构(SOA)是一种网络环境下分布式应用系统的概念模型。在这个模型中,松耦合的系统
组件在网络上被描述、发布和调用。实现这样体系结构的网络应用系统有多种方法。对CORBA,DCOM,RMI以及WebService,Jini等几种主要实现方法进行了详细的分析并对这些方法作了对比,指出这些实现方法各自的优势和不足。分析对比的结果将为今后根据具体应用选用正确、有效的实现方式提供指导作用。关键词 SOA,比较研究,分布式系统,软件体系结构中图法分类号 TP242.6 文献标识码 A
ComparativeResearchonSeveralMainImplementationTechniqueofSOA
YINHong2li
1
WANGYong2ming
2
1
(SchoolofComputerScienceandInformation,YunnanNormalUniversity,Kunming650092)
(SchoolofComputerSci.&Eng.,SouthChinaUniversityofTechnology,Guangzhou)2
Abstract SOAisaconceptualmodelofdistributedapplication,inthismodel,theloosecoupledsystemcomponentsweredescribed,releasedtoimplementtheapp2licationsystemwithSOAmodel.Wecomparedand,DCOM,RMI,WebServiceandJi2ni,pointedouttheiradvantagesandTheasreferencetochoseimplementationmethod.Keywords SOA,Comparative,,Softwarearchitecture
强调软件组件的松散耦合,并使用独立的标准接口。”
传统的分布式计算模型是从本地计算模型的基础上发展而来的,为了能够最大限度减低复杂度,重用本地计算模型去解决分布式计算的问题,传统的分布式计算模型尽量向编程人员屏蔽网络的存在,所以在编程人员看来,网络编程与本地编程并没有根本的差别,编程人员不用担心网络的存在。编程人员无须区分远程地址空间和本地地址空间的区别,所有的组件均利用一种通用语言———接口语言,一般称为接口定义语言(InterfaceDefinitionLanguage)通过它来做到与具体编程语言无关。通过这些简化,编程人员采用本地计算模型来实现一个分布式的计算应用。人们称这种方法为“本地化设计、分布式工作”模型。CORBA,DCOM,RMI等都属于这种解决方式。WebService和Jini是新型的动态分布式实现方案。本文将对这些实现方法的原理进行分析和对比研究。
1 引言
,企业级应用需求要求新的软件系统不再是从底层做起,而是依据企业逻辑需求重新组织已有的数据存储,将现有的数据和事务通过新的渠道,比如Inter2
net浏览器或者手持设备呈现给用户。另外,为了提高企业计算的高效性、可用性、规模性,现有许多的操作系统都是分布式操作系统,运行在许多机器之上。这样的企业级解决方案就必须协调运行在群组硬件之上,实现这种系统的一种方法就是将该系统组织成群组服务的模式,每一个服务都提供一组定义良好的功能集合。整个系统其实就被设计和实现为一组相互交互的服务,而将功能以服务的形式展现出来是该系统灵活性的关键。它使得系统中的某些服务能够充分利用其它的服务而无需考虑其物理位置。系统通过添加新的服务来不断升级,这样就应运而生了面向服务的体系结构(SOA)。W3C(TheWorldWideWebConsortium,万维网联盟)将
SOA定义为[1]“:一种应用程序体系结构,在这种体系结构
2 CORBA(通用对象请求代理体系结构)组件实现
方法
CORBA[2]遵循了通用的分布式系统解决方案模式。服
务提供者通过在可用的命名目录(CORBA命名)中发布其服务对象,对此分布式对象感兴趣的客户则通过该命名服务找到服务器对象,然后就可以调用服务器对象上的合适的服务了。为了做到这一点,客户必须提前与命名服务以及服务器
中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,可以以定义好的顺序来调用这些服务形成业务流程”。Gartner则将SOA描述为“:客户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成,SOA与大多数通用的客户端/服务器模型的不同之处,在于它着重
到稿日期:2008204229 本文受云南省教育厅科学研究基金项目(08Y10326)资助。
尹红丽(1976-),女,讲师,主要研究方向为智能处理、多智能体系统;王永明(1976-),男,博士,主要研究方向为网络集成、网络机器人。
・282・
提供的各种服务绑定以得到有关的信息(比如服务器对象提供的属性、方法、接口等)。这是通过CORBA接口定义语言(InterfaceDefinitionLanguage,IDL)完成的。IDL是中立于任何语言的,CORBA通过IDL来实现与编程语言的无关性。IDL有助于描述服务而无需深入到具体实现细节。用这种方法可以将实现(Implementation)与接口(Interface)相分离。
CORBA服务器必须实现IDL接口,而CORBA客户使用此
4 远程方法调用(RMI)实现方法
从Javal.1开始,远程方法调用(RMI)作为Java分布式对象技术的核心,成为JavaAPI之一。它使得Java程序之间能够实现灵活的、可扩展的分布式通信。RMI允许对象存在于多个指定地址空间,分布在各种Java虚拟机上。每个指定地址空间可以在同一计算机上或网上的不同计算机上。由于远程方法调用跨越Java虚拟机边界到不同的指定地址空间,因此没有对象共享的全局变量。
RMI具有以下特点:
1.面向对象的设计模式:RMI能够传递完整的对象类
接口。CORBA组件之间的交互见图1
。
型,包括其实现,因此可以在分布式计算解决方案中,而不仅
图1 CORBA组件
仅在本地计算中,使用面向对象的编程;
2.易于连接到已有的系统中:RMI是通过Java的本地方
所有本地调用的方法均通过一个称为桩的客户代理完成,它将方法参数和数据进行串行化,并发送到称为体的服务器端对象,而体则需要重构此方法及其详细内容。体要负责代表客户来调用这个方法,并正确地返回结果。桩和体的交互是通过ORB进行的。ORB也称为对象BUS,它负责找到合适的服务器对象(使用服务器对象引用),并向服务器传输方法参数、数据,此外还要从服务器传回方法结果。客户与
ORB通过一个桩实现交互,而服务器对象则使用一个对象适
法接口(JNI:JavaNativeInterface)与已有的系统交互的。使用RMI和JNI可以用Java编写新的客户端而服务端使用已有的实现,并可以根据需要对RMI服务端已有实现的任何部分重新编写,大大提高了软件的复用率;
4.多线程并行计算:RMI,允许服务器使用Java;
5.Java,此外由于RMI程序易于编写,它们同样也易6.分布式无用单元收集:RMI使用它的分布式无用单元
配器(ObjectAdapter,OA)或者ORB接口与ORB实现交互。客户的ORB与服务器的ORB之间通过通用跨ORB(GeneralInterORBProtocol,GIOP)跨协
议(InternetInterORB,,位置、收集算法来收集远程服务器上不再被网络上任何客户引用的对象。分布式的无用单元收集可以根据需要定义服务器对象,当它们不再被客户端访问时,将被从系统中删除,从而大
大提高了系统的效率。
3 DCOM()组件实现方法
DCOM[3]也采用通用的分布式系统解决模式,与COR2BA十分相似。通过对象提供服务的服务器在一个可用的命
5 WebService组件实现方法
WebService[4]作为一种分布式的服务提供方式,可以认
名目录(活动目录服务)中发布其对象。对此分布式对象感兴趣的客户必须知道此服务器提供的多种服务。这通过MS2
IDL实现。服务对象实现了IDL接口。
为是SOA体系结构的一种实现方式,其目的是使分布在网络上不同地理位置和不同平台的客户可以获得服务。Web
Service框架体系由3个基本元素组成———服务提供者、客户(服务接收者)和服务注册。服务提供者将自己的服务在服务
所有本地调用的方法均通过一个称为代理的客户代理来完成,它将完成方法参数和数据的串行化并发送到一个称为桩的服务器对象上,在此要重构此方法及其详细内容。这个桩负责代表客户调用方法并正确地返回结果。由于DCOM规范是二进制级的,它可以将不同编程语言编写的二进制组件加以集成,如C++,Java和VisualBasic等。与CORBA不同,DCOM只能基于MicrosoftWindows平台,是Win2
dows2Windows的分布式解决方案。DCOM组件之间的交互
注册处进行注册,客户通过访问服务注册来获得服务的信息,然后获得服务。
与当前传统的组件技术不同,Web服务不使用特定于对象模型的协议(比如DCOM,RMI或IIOP,这些协议要求在客户机和服务器上同时具有特定的基础结构,既需要在可控制的环境中使用)。在Web环境中,客户机和服务器千变万化,它们使用不同的操作系统和不同的技术,因此把组件的实现紧密地绑定在特定的组件技术上是不切实际的。Web服务是使用HTTP,SOAP和XML等普遍存在的标准协议和数据格式来通信的,因此所有支持这些协议和数据格式的系统都能支持Web服务。
Web服务以消息的形式来提供服务,它使用基于XML
见图2。
的消息来作为数据通信的基本方法。这使Web服务完全与
图2 DCOM组件
语言、平台和对象模型无关。Web服务可以使用任何语言和对象模型在任意的平台上实现,任意的应用程序都可以使用
・283・
Web服务。只要描述Web服务功能的接口和消息序列以及
协议保持不变,Web服务和客户应用程序可以任意改变而不会相互影响。运行时,客户应用程序发出服务调用请求,客户端代理程序把该请求转化为符合WebService调用所要求的格式,通过SOAP协议向服务发出调用,服务接到请求后进行处理,把结果通过SOAP协议返回给客户。从而客户完成一次服务调用。因为Web服务要在异构的Web环境中使用,在这个环境中存在着多种不同的操作系统、对象模型和编程语言,所以Web服务必须具有以下特点:
1.松散耦合:客户程序仅使用自描述的、基于文本的消息与Web服务进行通信;
2.方便的通信:连接到Internet上的任意系统或设备都可以与Web服务进行通信;
3.通用的数据格式:Web服务使用广泛支持的XML标准来描述其数据格式,所有支持这个标准的系统都可以识别Web服务的消息。
6 Jini组件实现方法及几种方法比较
Jini[5,6]组件包括服务、客户和查找服务(Lookupserv2ices)。在客户开始接受服务之前,必须要经过3个过程:发现(Discovery)、加入(Join)和查找(Lookup),这3个过程同时也
是通过3个同名的协议完成的:发现协议(Discovery)、加入(Join)协议和查找(Lookup)协议。客户和服务都可以通过发现过程来定位查找服务的位置,加入过程使得服务可以把自己注册到查找服务上去。的服务。
发现(Discovery)、加入()述如下:当一个Jini,(multi2cast)。网络中的,当它监听到这个消息后,,并进行分析,以便决定是否与发送者相联系。如果它决定和发送者联系,就会通过一个TCP与发送者建立连接,并通过RMI(RemoteMethodInvocation)向发送者回传一个服务登记对象(serviceregister),发送者通过调用服务登记对象中的register()方法,作为参数上传一个
serviceitem对象,这就完成了发现和加入。Serviceitem对象
是自愈合的,这一点是通过Jini的租用机制实现的。租用机制使得服务经过一定的时间,自动地从联邦中移除,而无需管理员维护。服务提供者要和查找服务协商对查找服务的租用期,并且维护一个租用使它保持有效,否则查找服务就会取消服务注册。而客户也要和服务提供者协商服务租用期。当网络发生变化时,Jini使得管理员无需做改变软件中的URL、更新资源文件、为客户机安装服务代理等工作,而这些在传统的分布式计算体系中是很正常的。比如CORBA,.NET,J2EE等都需要静态的安装(需要人工安装且不能动态的更新)客户桩(stub)和服务器端骨架(skeleton),而Jini通过代码移动解决了这个问题,这也是Jini最强有力的一个特点。Jini采用如下方法解决分布式计算中存在的常见问题:1)利用Java来克服编程模型和编程语言的问题;2)提供了一个新的基础设施。
Jini还提供了一种分布式事件机制,这是对JavaBeans事件模型的扩展,由此服务请求者可以在服务提供者处注册其所需服务。服务一旦可用,服务请求者还能获得服务通知,因此不再需要任何轮询。部分失败是通过租用机制加以处理的。租用为服务的使用引入了一个时间的概念。在Jini中,接。在Jini环境中,,,。这样就可以支持建,。此外,由服务请求者与服务提供者协,还可以控制某个服务提供者的服务请求者。1是Jini对相关问题的处理方法,表2是几种分布式计算体系结构比较研究。
表1 Jini的问题处理方法
问题
Jini
网络延迟部分失败并发性
服务提供者和服务请求者之间的耦合
编程模型
通过Jini远程接口区别本地对象/组件和远程对象/组件
使用租用机制和发现协议加以处理
通过事务管理器接口加以处理
由于代理对象将按需下载到客户端,因此没有更多的紧耦合。服务提供者与服务请求者之间的关系是动态的,服务期的长短可以依据服务请求者和服务提供者的协商而定。
编程语言
采用Java语言,不支持指针,区别本地对象和远程对象
基础设施相关
提供一个分布式事件机制,服务请求者可以在某个服务提供者处注册其所需的服务,并在服务可用时得到通知。
与协议无关,可以包容任何协议:JRMP,IIOP,OR2PC,SOAP是一个对象容器,其中包括一个serviceobject对象,作为Jini服务代理(Proxy),它负责和服务器交互,它实现了一个或者若干个客户与服务交互的接口。客户同样通过发现协议(Discovery)获得一个服务登记对象(serviceregister),然后调用服务登记对象的Lookup()方法(不要把它和Lookup服务混淆,前者是服务登记对象的一个方法,后者是整个查找服务),作为参数上传一个servicetemplate对象,用来作为查询准则。这个对象含有一个引用指向一组Classobjects对象,这些对象指示查找服务,客户所需要的Java类型的serviceobject对象。lookup()方法返回符合客户需要的serviceob2ject对象。每个serviceobject对象都会实现(implement)一个或者若干个客户与服务交互的接口(interface)。客户通过引用(reference)来使用serviceobject对象,通过这个对象来获得服务。
与一般的分布式系统努力掩盖网络存在的做法不同,Jini努力去适应网络存在这个事实。比如网络可靠性的问题,Jini
地址空间
客房获得所需服务的通知机制服务请求协议
表2 几种分布式计算体系结构的问题处理方法比较
问题
CORBA
DCOM
RMI
网络延迟部分失败并发性
编程模型
没有显式区别本地没有显式区别本地显式区别本地对象对象和远程对象对象和远程对象和远程对象无法处理无法处理无法处理并发是一个可选服
可以得到并发服务没有处理并发
务
・284・
服务提供存在紧耦合,客户桩者与客户(stub)需要由客户的耦合应用进行编译通知客户
获得所需没有可用的分布式服务的机事务通知机制制
存在紧耦合,客户桩(stub)需要由客户应用进行编译或者导入
没有可用的分布式事务通知机制
无紧耦合,客户桩(stub)可以在运行时下载到客户
交互来实现系统动态、松耦合集成,极大地降低了复杂性与成本。但目前为止没有文献对实现它的方法进行明确的论述,造成人们在实现它时总是无从下手。本文在深入分析了
SOA实现方法机理的基础上,提出各自的优点和不足之处;
使用Java事件通知
模型
并将主要方法作横向比较研究。Jini是一种基于Java的分布式系统,具有许多其它分布式模型没有的优点,是如今使用最多的分布式计算编程模型。但在如今多种模型并存的现实情况下,Jini不可能完全代替CORBA,DCOM,RMI,基于UDDI的WebService等分布式计算体系,所以应该努力解决这些分布式计算体系之间共存并且相互操作的问题,这样不仅能够充分利用不同的分布式计算体系的优点,还可以巧妙地避免彼此的缺点。而且从应用的层次上来看,用户并不希望被绑定在一家公司的产品上,而希望有更多的选择余地,所以,下一步的研究应着重于解决这些分布式系统之间互操作的方法,它不仅有理论上的意义,还具有现实的意义。
没有显式区别本地
区别本地
对象和远程对象,需
和远程地
要在本地建立远程
址空间
对象的对象引用
没有显式区别本地对象和远程对象,需要在本地建立远程对象接口的专用指针
区别本地和远程对象。使用3种技术来处理远程交互:1)建立对远程对象的引用;2)非远程对象可以串行化并以传值的方式传递;3)简单数据类型也可以利用传值的方式传递
编程语言及基础设施相关
何种编程语言应用组件之间的交互
多种编程语言所有远程对象使用CORBA接口定义语言(CORBA2IDL)
多种编程语言所有远程对象使用
Java
所有远程对象使用
COM接口定义语言Java远程接口发布,(COM2IDL)进行发并实现Java远程接
参考文献
[1]
WuJie.DistributedSystem,等译.北京机械工业
请求协议
进行发布
依赖于通用ORB协议(GIOP)通用In2ternet跨ORB协议(IIOP)
具有平台无关性
布
口
依赖于Java远程方
依赖于对象远程过
法协议(JavaRe2
程通信协议(OR2
motemethodProto2
PC)
col,JRMP)MicrosoftWindows
出版社,2001:5215
[2]]
李兵,陈鸣..解放军理:4:39243
,.基于DCOM的分布式计算机控制系统,2001(6):7210
,杨宗凯,乐春晖.基于WebService的一种分布式体系结构.计算机应用研究,2002(6):1052107
KumaranS.Jini技术指南.林琪,欧阳宇,等译[M].北京机械工
操作系统
系列
应用的网络方面
ORB负责处理数据
ORPC的调用和格式转换
具有平台无关性,但需要安装Java机(VM)
/,JVM2JVM之间进行,利用Java串行化技术通信
]
[5]
业出版社,2003:10220
[6]
EckelB.ThinkinginJava[M].2ndedition,Revision12,2000:50265
结束语 SOA,通过服务的
(上接第266页)
[7]
CiupaL,LeitnerA,OriolM,etal.Objectdistanceanditsappli2cationtoadaptiverandomtestingofobject2orientedprograms∥Proc.ofthe1stInternationalworkshoponRandomTesting(RT’06).ACMPress,2006:55263
信念网络[12]等来学习测试用例。因此,未来工作主要是多种
分类学习模型的应用以及进一步的实例研究。
参考文献
[1][2][3]
HamletR.Randomtesting.EncyclopediaofSoftwareEnginee2ring.JohnWileyandSons,1994
RumbaughJ,JacobsonI,BoochG.TheUnifiedModelingLan2guageUserGuide.Boston:Addison2Wesley,2001
WangL,YuanJ,YuX,etal.GeneratingTestCasesfromUMLActivityDiagramBasedonGray2BoxMethod∥Proc.ofAPSEC’04.IEEEComputerSociety,NewJersey,2004:2842291[4]
ChenT,PoonP,TangS,etal.IdentificationofCategoriesandChoicesinActivityDiagrams∥Proc.ofthe5thInternationalConferenceonQualitySoftware(QSIC’05).IEEEComputer[5]
Society,2005:55263
ChenM,QiuX,XuW,etal.UMLActivityDiagram2basedAu2tomaticTestCaseGenerationforJavaPrograms.TheComputerJournal,2007,doi:10.1093/comjnl/bxm057[6]
ChenTY,HuangDH,ZhouZQ.Adaptiverandomtestingthroughiterativepartitioning∥Proc.ofthe11thInternationalConferenceonReliableSoftwareTechnologies,LNCS4006.Ber2linHeidelberg:Springer2Verlag,2006:1552166
[8]
GrochtmannM,WegenerJ,GrimmK.Testcasedesignusingclassificationtreesandtheclassification2treeeditorCTE∥Proc.ofthe8thInternationalSoftwareQualityWeek(QW’95).Soft2wareResearchInstitute,SanFrancisco,CA,1995
[9]SinghH,ConradM,SadeghipourS.TestCaseDesignBasedon
ZandtheClassification2TreeMethod∥Proc.ofthe1stInterna2tionalConferenceonFormalEngineeringMethods(ICFEM’97).IEEEComputerSociety,1997:81290
[10]KruppA,MuellerW.ClassificationTreesforRandomTestsand
FunctionalCoverage∥Proc.oftheConferenceonDesign,Auto2mationandTestinEurope,EDAA.2006:103121032
[11]McMinnP.Search2basedSoftwareTestDataGeneration:ASur2
vey.SoftwareTesting,VerificationandReliability,2004,14(2):1052156
[12]HanJ,KamberM.DataMining:ConceptsandTechniques.Mor2
ganKaufmannPublishers,2001:2792296
[13]KolmanB,BusbyR,RossS.DiscreteMathematicalStructures.
FourthEdition.PrenticeHall,Inc.,2001
[14]BlahaM,RumbaughJ.Object2orientedModelingandDesign
withUML.SecondEdition.PearsonEducation,Inc.,2005
・285・