分布式对象技术及其应用第五章_第1页
分布式对象技术及其应用第五章_第2页
分布式对象技术及其应用第五章_第3页
分布式对象技术及其应用第五章_第4页
分布式对象技术及其应用第五章_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分布式对象技术及其应用第五章第一页,共二十七页,编辑于2023年,星期日在分布式对象系统中,所谓服务器是指实现分布式对象功能的程序,它是由两部分组成的:一是分布式对象实现部分,这部分是CORBA服务器的核心部分,用于实现IDL定义的接口的功能;二是服务器进程部分,这部分主要用于实现分布式对象的生成与登录,以及接受来自客户端的调用请求等。CORBA服务器是根据IDL接口定义来实现的。在CORBA服务器的实现过程中,需要利用IDL的Java语言映射结果。本章主要介绍CORBA服务器的实现过程,所利用的IDL接口及其映射结果与4.1节给出的例子相同。

第二页,共二十七页,编辑于2023年,星期日5.1CORBA服务器的构造CORBA服务器是指实现分布式对象功能的程序。图5.1给出了CORBA服务器程序的基本构成。第三页,共二十七页,编辑于2023年,星期日CORBA服务器程序的基本构成:ORB的初始化BOA/POA的初始化接收请求开始

图5.1CORBA服务器的处理流程分布式对象的生成分布式对象的登录第四页,共二十七页,编辑于2023年,星期日一种服务器程序的实现框架:publicclassControlSerImpl{ publicstaticvoidmain(Stringargs[]){ //args的检查处理

try{ //ORB的初始化

org.omg.CORBA.ORBorb=org.omg.CORBA.ORB.init(args,null); //BOA的初始化

org.omg.CORBA.BOAboa=orb.BOA_init(); //分布式对象的生成

ControlImplcontrol=newControlImpl(“BANK”); //分布式对象的登录(登录到BOA中) boa.obj_is_ready(control); //接收请求

boa.impl_is_ready();//循环等待

} catch(org.CORBA.SystemExceptionsystem_exception) { //异常处理

} }}第五页,共二十七页,编辑于2023年,星期日5.2对象适配器的作用5.2.1对象适配器的作用 在客户端开发一章中已经提到过,ORB的初始化结束以后,就已经获得了ORB对象的引用,这样,就可以使用ORB的功能了。 在CORBA中,把ORB功能中的服务器所需要的功能都组织到被称为对象适配器OA(ObjectAdapter)的对象中来提供。这也就是说OA是ORB的一个组成部分,同时,由OA所提供的功能也仅在开发服务器程序时使用,而不用于开发客户端程序。第六页,共二十七页,编辑于2023年,星期日由CORBA所提供的服务器的功能主要有如下几种,这些功能在不同的系统中所体现的方式可能是不同的,有的是分别提供的,有的是一个功能中包含多项: (1)分布式对象引用的生成; (2)分布式对象的登录与删除; (3)服务器进程的登录与删除; (4)分布式对象的激活; (5)服务器进程的激活; (6)方法调用请求的发送(dispatch); (7)方法启动请求的认证信息的取出。第七页,共二十七页,编辑于2023年,星期日5.2.2BOA与POA

由POA来取代BOA主要是基于以下的原因: (1)BOA描述模糊,服务器端程序难于移植; (2)由BOA所提供的功能难以满足对CORBA系统的开发。第八页,共二十七页,编辑于2023年,星期日5.2.3伪对象 伪对象与普通的CORBA分布式对象的主要区别有如下几点: (1)不能将伪对象作为一般CORBA对象中操作的参数进行传递。 (2)在接口仓库中没有伪对象的定义信息。

第九页,共二十七页,编辑于2023年,星期日5.3BOA的功能由于BOA本身也是作为对象来实现的,因此,同ORB一样,为了利用其功能也必须要先获取其对象引用。为了获取BOA对象的引用,一般需要首先获取ORB对象的引用,然后通过调研ORB对象中的方法来获取BOA对象的引用。在获取了BOA的对象引用之后,就可以利用BOA的功能来实现服务器的功能了。由于不同的CORBA产品对BOA的定义也是由差异的,因此,下面给出的只是BOA的一种定义形式,从中可以了解由BOA所提供的功能。第十页,共二十七页,编辑于2023年,星期日Publicabstractclassorg.omg.CORBA.BOAextendsjava.lang.Object{ //取出方法启动请求的认证信息

publicabstractorg.omg.CORBA.principalget_principle(org.omg.CORBA.Objectobj); //分布式对象的登录

publicabstractvoidobj_is_ready(org.omg.CORBA.Objectobj); publicabstractvoidobj_is_ready(org.omg.CORBA.Objectobj,…); //分布式对象的删除

publicabstractvoiddeactivate_obj(org.omg.CORBA.Objectobj); //服务器进程的登录

publicabstractvoidimpl_is_ready(); publicabstractvoidimpl_is_ready(…);……}第十一页,共二十七页,编辑于2023年,星期日5.4分布式对象的实现所谓分布式对象的实现是指实现分布式对象功能的代码,对Java映射来讲,一般是用一个Java类来实现的。在分布式对象实现中必须要实现的功能主要包括如下几个:(1)由IDL接口定义的方法。(2)由org.omg.CORBA.Object接口所定义的分布式对象的语义。(3)保存分布式对象的ID以及连接(connection)管理等信息的方法。(4)将来自客户端的请求发送给相应的分布式方法的功能。第十二页,共二十七页,编辑于2023年,星期日5.4.1Skeleton继承方式 所谓Skeleton继承方式,就是通过直接继承Skeleton类来实现分布式对象实现。这种方式的特点是由对象适配器(OA)来调用Skeleton类中的dispatch方法,而dispatch方法通过参数来接收来自客户端的调用请求。第十三页,共二十七页,编辑于2023年,星期日5.4.2Skeleton类的构造 在CORBA服务器程序设计过程中,由于Skeleton类的作用使得很多复杂的细节都被隐藏掉了,程序设计人员可以集中精力来研究业务逻辑的实现问题,从表面上看,就如同实现本地对象一样来实现分布式对象。 在上一章介绍了Stub类的结构,在本节将介绍Skeleton类的构成。由于CORBA系统不同,所生成的Skeleton类也可能是有差异的。第十四页,共二十七页,编辑于2023年,星期日5.4.3Tie机制方式 通过继承Skeleton类来实现分布式对象的方法,有一个问题,这就是由于在Java语言中只允许单一继承,也就是只允许有一个父类。如果在使用Skeleton继承方式时,分布式对象实现本身也需要通过继承其他类来实现的话,这种方式就难以实现了。为了解决这一问题,可以利用Tie机制方式,但这种做法使得分布式对象实现的构造变得复杂了。所谓Tie机制方式,也就是委托处理方式,这种方式的特点是通过委托处理来实现分布式对象,这样即使需要继承其他的类来实现分布式对象也是可行的。第十五页,共二十七页,编辑于2023年,星期日

Tie类本身相当于前述的Skeleton继承方式中的分布式对象实现类,Tie类本身是通过继承Skeleton类实现的,而Tie类中的具体处理过程则是利用Delegate类来完成的。 在Tie机制方式中,为了实现一个分布式对象需要定义两个对象:一个是Tie对象,另一个是提供分布式对象中的方法实现的delegate对象,即委托对象,这两个对象是通过委托方式结合在一起的。第十六页,共二十七页,编辑于2023年,星期日1、Tie类的构造2、委托对象3、Tie机制方式的使用第十七页,共二十七页,编辑于2023年,星期日5.5分布式对象的生成 所谓分布式对象的生成是指生成分布式对象实现的实例。在Java中,通常是利用new操作实现的。 由于分布式对象实现的类是通过一系列继承的关系来实现的,因此在生成分布式对象实现的实例时,将要执行各自类的构造函数。 在生成分布式对象时,一般来讲,要进行如下一些操作:(1)对分布式对象服务部分的初始化。 (2)对分布式对象语义部分的初始化。 (3)与分布式对象的ID有关的信息设置。第十八页,共二十七页,编辑于2023年,星期日5.6分布式对象的登录到目前为止,分布式对象已经生成并可以执行了。但是,现在还不能接收来自ORB的请求。对于ORB来讲,它还不认识这个对象。为了使ORB能够管理分布式对象,就需要将“已经生成新对象并处于接收请求的状态”这一信息通知ORB,这一通知的处理过程被称为分布式对象的登录。第十九页,共二十七页,编辑于2023年,星期日5.7接收请求的开始分布式对象登录到BOA以后,就可以开始接收来自客户端的请求了,CORBA服务器的处理也就开始了。一般来讲,此时,就进入了等待请求的循环之中了。如果这种循环因某种原因结束,也就是服务器进程结束的时候。在有的CORBA中,调用了impl_is_ready()方法后,就向BOA发出了“服务器的初始化已完成,可以进行启动方法的请求处理了”的通知,这时也就进入了接收请求的循环之中。因此,调用了impl_is_ready()方法以后,对请求的处理实际上也就开始了。第二十页,共二十七页,编辑于2023年,星期日到此为止,CORBA服务器的处理也就结束了。到目前为止,CORBA服务器的设计都是基于BOA来完成的,由于BOA的特点,使得不同系统在实现过程上存在较大差异,在BOA的获取、分布式对象的登录以及接受请求开始等函数调用方面都是有差异的。为了解决这一问题,在CORBA2.2以后的版本中提供了POA。本章的后续部分将介绍POA的基本内容。第二十一页,共二十七页,编辑于2023年,星期日5.8POA基础POA为实现CORBA服务器提供了非常广阔的选择余地,如果理解了POA的功能,同时,选择了与应用程序特性相吻合的实现策略的话,就能够设计出可扩充性非常好的服务器程序.第二十二页,共二十七页,编辑于2023年,星期日5.8.1POA中的CORBA对象与Servant的关系

POA的主要功能是管理CORBA对象与Servant(服务对象)的生存周期,并将来自客户端的调用请求分发给相应的Servant.这里的Servant是指实现CORBA对象的Java的等程序设计语言中的对象. POA与BOA的最大区别就在于将CORBA对象与Servant对象进行完全分离,这种分离提高了服务器应用的可扩展性.第二十三页,共二十七页,编辑于2023年,星期日5.8.2POA与策略 应用程序开发者所采用的CORBA对象与Servant的映射方法、对象ID的分配方法、是使用持续对象还是使用瞬时对象等实现方法都是由POA策略来设定的。 如果在程序中不设置POA策略的话,就是使用根POA,即rootPOA.第二十四页,共二十七页,编辑于2023年,星期日5.8.3POA与生成 为了生成POA,首先需要生成策略对象(policyobject)数组(或称序列)以保存相应的策略。这里,策略对象是通过调用在POA接口中为各个策略定义的”create_策略名”操作来生成的。策略对象数组生成完了之后,以该数组为参数调用其父POA(比如根POA)的create_POA()操作来生成所需的POA。

第二十五页,共二十七页,编辑于2023年,星期日5.8.4POA策略简介 1.POA策略一览表 2.Thr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论