CORBA 客户端-服务端的处理流程(Java示例).doc_第1页
CORBA 客户端-服务端的处理流程(Java示例).doc_第2页
CORBA 客户端-服务端的处理流程(Java示例).doc_第3页
CORBA 客户端-服务端的处理流程(Java示例).doc_第4页
CORBA 客户端-服务端的处理流程(Java示例).doc_第5页
全文预览已结束

下载本文档

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

文档简介

CORBA 客户端/服务端的处理流程(Java示例)一、客户端的处理流程ORB的初始化 -分布式对象引用的获取 -分布式对象的引用 |1、ORB(Object Request Broker,对象请求代理)是基于CORBA的分布式对象系统的核心,在代理对象(Stub)和分布式对象实现的背后,由ORB提供了实现分布式对象系统所需要的各种服务。由ORB提供的服务包括如下四种: 1)ORB接口。主要包括 ORB的初始化(获取ORB)、获取CORBA服务对象、动态调用请求的生成、分布式对象引用的变换等。 2)DII(动态启动接口)。将客户端生成的对象调用请求传送给ORB时需要利用DII。 3)DSI(动态骨架接口)。DSI是与DII对应的服务器端的接口,分布式对象实现利用该接口从ORB中获取来自客户端的请求。 4)OA(对象适配器)。它是用于在服务器进程中管理分布式对象而提供的接口。OA提供的主要的功能包括分布式对象引用的生成,以及将分布式对象实现登录到ORB中等。 在客户端中,ORB的初始化有以下两个目的 1)为分布式对象初始化环境 2)为了利用ORB接口而获取其对象的引用2、分布式对象引用的获取 一般来说,CORBA系统不同,获取分布式对象引用的方法也不同,目前大概有如下几种方法: 1)利用文件的方法获取对象。过程是:服务器将所生成的分布式对象引用进行字符串化处理后保存在文件中,并以某种方式将其发送到客户端能够获取的设备上。客户端从该文件中获取字符串的分布式对象引用,并将其恢复原状。 分布式对象引用的字符串化: ORB orb = ORB.init(); String orbstr = orb.object_to_string(Object)con_ref); /将orbstr 以文件形式发送给客户端 字符串化引用的复原: BankControl ank_ref; ank_ref = Bank.ControlHelper.narrow(orb.string_to_object(orbstr); . 2)利用Binding 服务的方法获取对象引用。Binging 服务,包括:定位(locating)、连接(binding)。定位服务通常利用服务器端的IP 地址和端口进行定位。为了对连接进行管理以及进行调用请求的传递,在这一出理过程的最后阶段要生成与此接口对应的Stub类的对象,即代理对象。这一处理过程一般是利用IDL接口定义经映射之后所生成的Helper类中的narrow() 方法完成。 3)利用命名服务的方法获取对象引用。现在的ORB产品供应商都提供CORBA命名服务。如果从可移植性和互操作性等反面考虑,CORBA命名都是最优秀的。 4)利用factory对象的方法获取对象引用。3、分布式对象的引用。CORBA客户利用代理对象来调用分布式对象中的方法。在Java环境下,代理对象是作为Java类来实现的,即Stub类。在客户端与分布式对象进行连接操作时,是通过利用所生成的Stub类的对象来进行的。由于这一对像起到代理作用,固称之为代理对象。示例代码:/创建一个ORB实例,并初始ORBORB orb = ORB.init(args, null);/获取根名称上下文org.omg.CORBA.Object objRef = orb.resolve_initial_references(NameService);NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);/从命名上下文中获取接口实现对象String name = Hello;helloImpl = HelloHelper.narrow(ncRef.resolve_str(name);/调用接口对象的方法System.out.println(helloImpl.sayHello();/关闭分布式对象helloImpl.shutdown();二、服务器端的处理流程ORB的初始化 -BOA/POA的初始化 -分布式对象的生成 -分布式对象的登录 -接收请求开始 |1、ORB功能中的服务器所需要的功能都组织到OA(对象适配器)中来。OA所提供的功能仅在服务器端使用,这些功能包括: 1)分布式对象引用的生成 2)分布式对象的登录与删除 3)服务器进程的登录与删除 4)分布式对象的激活 5)服务器进程的激活 6)方法调用请求的发送(dispatch) 7)方法启动请求的认证信息的抽取2、BOA(Basic Object Adapter,基本对象适配器),提供了由对象适配器所必须提供的最基本的功能。在CORBA 2.2版本中,BOA被删除掉,取而代之的是POA(Portable Object Adapter,可移植的对象适配器)。3、分布式对象实现是指实现分布式对象功能的代码,对Java映射来说,一般用一个类来实现。分布式对象实现中必须实现的功能: 1)由IDL接口所定义的方法。 2)由org.omg.CORBA.Object接口所定义的分布式对象的语义。这就跟Java中的普通对象要实现java.lang.Object一样。 3)保存分布式对象的ID以及连接管理等信息的方法。 4)将来自客户端的请求发送给相应的分布式方法的功能。 分布式对象的实现方法有两种:一种是利用Skeleton类,即静态实现方法;另一种是利用DSI,即动态实现方法。4、分布式对象的登录。分布式对象生成后并不能直接执行任务,因为对于ORB来说,它还不认识这个对象。为了是ORB能管理分布式对象,就需要将“已经生成新对象并处于接受请求的状态”这一信息通知ORB,这一通知的处理过程就叫分布式对象的登录。5、接收请求示例代码:/创建一个ORB实例,并初始化ORbORB orb = ORB.init(args, null);/得到一个RootPOA的引用,并激活POAManagerPOA rootpoa = POAHelper.narrow(orb.resolve_initial_references(RootPOA);rootpoa.the_POAManager().activate();/创建一个HelloImpl分布式对象,并注册到ORB上HelloImpl helloImpl = new HelloImpl();helloImpl.setORB(orb);/分布式对象的登录org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);Hello href = HelloHelper.narrow(ref);/得到一个根名称的上下文org.omg.CORBA.Object objRef = orb.resolve_initial_references(NameService);NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);/在命名上下文中绑定这个对象String na

温馨提示

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

评论

0/150

提交评论