JacORB1.4 编程指南.ppt

上传人:laozhun 文档编号:2876430 上传时间:2023-02-28 格式:PPT 页数:48 大小:1.54MB
返回 下载 相关 举报
JacORB1.4 编程指南.ppt_第1页
第1页 / 共48页
JacORB1.4 编程指南.ppt_第2页
第2页 / 共48页
JacORB1.4 编程指南.ppt_第3页
第3页 / 共48页
JacORB1.4 编程指南.ppt_第4页
第4页 / 共48页
JacORB1.4 编程指南.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《JacORB1.4 编程指南.ppt》由会员分享,可在线阅读,更多相关《JacORB1.4 编程指南.ppt(48页珍藏版)》请在三一办公上搜索。

1、,JacORB1.4 编程指南,中文翻译:hlstudio(),cocia()(第 7 章),校稿:allen(),fat1(),2002.08,目录,12345678,前言.4安装 JacORB.52.1 获取 JacORB.52.2 安装 JacORB.52.2.1 Ant 和 build.xml.52.2.2 配置.5编程起步.93.1 JacORB 开发步骤.93.2 IDL 接口定义.93.3 生成 Java 类.103.4 实现接口.103.5 编写服务器.113.6 编写客户端.123.7 桥接方式.13JacORB 命名服务.154.1 运行命名服务.154.2 访问命名服务.

2、164.3 构造层次命名空间.164.4 命名管理器.16服务端:POA 及线程.185.1 POA.185.2 线程.18实现仓库.196.1 概述.196.2 使用 JacORB 的实现仓库.196.3 服务迁移.206.4 安全考虑.21Any Value 的动态管理.227.1 概述.227.2 接口.227.3 用法限制.227.4 创建一个 DynAny 对象.237.5 访问 DynAny 对象的值.247.6 传送 DynAny 对象的值.247.7 构造类型.257.7.1 DynEnum.257.7.2 DynStruct.257.7.3 DynUnion.257.7.4

3、DynSequence.257.7.5 DynArray.257.8 Any 和 DnyAny 对象之间的转换.267.9 更多例子.26接口仓库.278.1 接口仓库中的类型信息.272,8.2 接口仓库设计.278.3 使用接口仓库.28,910111213141516,JacORB 的小程序代理.309.1 使用小程序代理.309.1.1 使用步骤.309.1.2 程序属性.309.1.3 小程序代理和 Netscpe/IE,AppletViewer.319.1.4 示例.319.2 通过防火墙使用 JacORB.319.2.1 小程序代理.319.2.2 HTTP 隧道.329.2.3

4、 小程序代理和 HTTP 隧道.329.2.4 总结.32基于 SSL 的 IIOP.3310.1 重编译 JacORB 安全库.3310.2 配置 IAIK.3310.2.1 设置 IAIK 证书库.3310.2.2 一步一步生成证书.3510.3 配置 SSL 的属性.3510.3.1 客户端配置.3610.3.2 服务器端配置.36双向 GIOP.3711.1 设置双向 GIOP.3711.1.1 设置 ORB 初始属性.3711.1.2 创建双向策略.3711.2 验证双向 GIOP 已经使用.3711.3 TAO 协同性.38可移植拦截器-PI.39JacORB 实用程序.4013.

5、1 IDL.4013.2 ns.4013.3 nmg.4113.4 lsns.4113.5 dior.4113.6 pingo.4113.7 ir.4113.8 qir.4213.9 ks.42配置清单.4314.1 ORB 的配置.4314.2 POA 的配置.4414.3 实现仓库的配置.4514.4 安全的配置.45缺陷和反馈.47附录.483,4,1 前言,本文主要介绍 JacORB 的分布式应用开发。JacORB 是免费的 Java 对象请求代理系统,附带全部源代码,包含大部分 CORBA 对象服务的实现,以及大量的代码实例。本文不是CORBA 的一般性介绍,如果要看 CORBA 方

6、面的介绍,请查阅附录的参考书目BVD01及HV99。本文所描述的 JacORB 版本为 1.4Beta1,同时介绍一些安装和使用 JacORB 的技巧。,5,2 安装 JacORB,本章的主要内容是获取和安装 JacORB,以及相关包的主要内容。,2.1 获取 JacORB,JacORB 可以在 JacORB 的主页 http:/www.jacorb.org 下载,也可以通过匿名方式访问 FTP 服务器 ftp.inf.fu-berlin.de 目录 pub/jacorb 来下载。,下载的文件是压缩包,unix 为 tar 格式,windows 下为 zip 格式。要安装 JacORB,先解压

7、缩,会生成一个新的目录 JacORB1_4_beta1。然后将,JacORB1_4_beta1/lib/jacorb.jar加入入入入入(classpath)入入入入入入入入入入JacORB,JacORB1_4_beta1/class 加入类路径,并且将JacORB1_4_beta1/bin 加到 Path,在 JacORB1_4_beta1/bin 下有一些实用程序。,2.2 安装 JacORB,2.2.1 Ant 和 build.xml,JacORB 可以在所有的 Java 虚拟机上运行。重新编译 JacORB(以及 JacORB 附带的例子)需要安装 Ant,Ant 是基于 XML 的制

8、作管理工具。你可以到,http:/jakarta.apache.org/ant下下下入下下下Ant入下下下build.xml下下下下下下下下下入,入入入入JacORB,入新新新新新新新(JacORB1_4_beta1)入新入ant新新新新入新新新ant新新新前,新前新新ant clean前前前前前入入产生的中间文件。,最好使用 JDK1.2 以上的版本的虚拟机来运行 JacORB,因为图形工具如使命名管理器(NameManger)、实现仓库管理器(ImRManger)、接口仓库浏览器(IRBrowser),以及 SSL 的支持都需要 JDK1.2 以下版本的虚拟机。在使用 SSL 时,你还需要

9、第三方的 SSL 协议实现,JacORB 目前支持以下的实现:,1.IAIKs下的的,的的新IAIKJCE 2.5或或或下下入,前或SSL下或iSaSiLk3.0入。的的入新前。下。入,2.Sun 的 JSSE 参考实现,包含在 JDK1.4 中;也可单独从 JDC 中下载。,2.2.2 配置,JacORB 有很多可以设为 Java 属性的配置项。在解释这些基本配置项之前,先让我们看看配置方法。其他一些具体的配置项,如和实现仓库及交易服务相关的选项,在相关的章节讲述。,总体说来,有三种方式可以配置 JacORB。,第一种方式是文件方式。JacORB 寻找和加载名为.jacorb_propert

10、ies 或 jacorb.properties 文件,系统将在下列位置搜索配置文件:1.类路径中。,2.运行 JacORB 用户的用户主目录,通过运行 System.getProerty(user.home)获得。如果需要知道用户主目录在哪,可以写一小段 Java 程序去测试一下。3.当前目录中。,4.JDK 安装的 lib 目录。JDK 的主目录通过运行 System.getProperty(java.home)获得。,系统也按上述顺序搜索,一旦找到一个配置文件,系统将停止搜索,并加载该配置文件。第二种方式是对象方式。对于和应用相关的配置项,可以在应用初始化时给 ORB.init 传递一个

11、java.util.Property 对象。这种方式会覆盖使用文件方式设置的配置项。下面的代码片段演示了如何向 ORB.init 传递一个 Property 对象(程序中 args 是命令行参数变量):java.util.Properties props=new java.util.Properties();props.setProperty(jacorb.implname,StandardNS);/use put()under Java 1.1org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args,props);第三种方式是参数方式。可以通过设置

12、Java 虚拟机的系统属性来设置配置项,这些属性必须在调用 ORB.init()之前设置,并且此方式会覆盖前两种方式设置的配置项。系统属性可用System.setProperty,也可以用命令行参数方式-D=,这是 Java 程序的命令行参数,也可用于 jaco 脚本。需要注意的是这些参数必须放在类名参数之前,放在类名参数之后的都将被 Java 虚拟机解释为该类的参数,并只被传递到该类的 main 方法中。如果你想通过命令行设置多个参数,你可以用一个特定的属性 custom.props,此属性值为配置文件。在配置文件中你可以加上任意多的配置项。这里的配置项也会覆盖第一种和第二种方式设置的配置项

13、。例如:通常使用标准的 TCP/IP 连接,但可能有时候想使用 SSL。如果只使用一个配置文件,那么要变更连接方式时就得修改配置文件。如果不想每次都修改配置文件,也可以将不同的参数通过命令行参数传递,但这会导致很长的命令。但如果使用特定的属性去指定文件,就可以把所有其他的配置项都放在该文件中,而只使用一个命令行参数,如:$jaco-Dcustom.props=ssl_props_MyServer我们现在看一看最基本的配置项,下面是一个示例的配置文件:#JacORB 配置项#,#初始化的参考配置,#,#IORs存储的URL(在orb.resolve_initial_service()中使用)#O

14、RBInitRef在ORB启动时创建.In the#cases of the services themselves,this may lead to exceptions being#displayed(because the services arent up yet).These exceptions#are handled properly and cause no harm!#ORBInitRef.NameService=corbaloc:160.45.110.41:38693/StandardNS/NameServer POA/_root#ORBInitRef.NameServic

15、e=file:/c:/NS_RefORBInitRef.NameService=http:/www.x.y.z/user/NS_Ref#ORBInitRef.TradingService=http:/www.x.y.z/user/TraderRef#JacORB-specific URLsjacorb.ImplementationRepositoryURL=http:/www.x.y.z/user/ImR_Refjacorb.ProxyServerURL=http:/www.x.y.z/user/Appligator_Ref#6,#调试模式,#,#use(java)jacorb.util.CA

16、D to generate an appropriate#verbosity level#0=off#1=important messages and exceptions#2=informational messages and exceptions#=3=debug-level output(may confuse the unaware user:-)jacorb.verbosity=1#where does output go?Terminal is default#jacorb.logfile=LOGFILEPATH#WARNING:The following properties

17、should#only be edited by the expert user.They#can be left untouched for most cases!#,#基本ORB配置,#,#number of retries if connection cannot directly be establishedjacorb.retries=5#how many msecs.do we wait between retriesjacorb.retry_interval=500#size of network buffers for outgoing messagesjacorb.outbu

18、f_size=2048#client-side timeout,set no non-zero to stop blocking#after so many msecs.#jacorb.connection.client_timeout=0#max time a server keeps a connection open if nothing happens#jacorb.connection.server_timeout=10000#jacorb.reference_caching=off.#,#POA配置,#,#displays a GUI monitoring tool for ser

19、versjacorb.poa.monitoring=off#thread pool configuration for request processingjacorb.poa.thread_pool_max=20jacorb.poa.thread_pool_min=5#if set,request processing threads in thePOA#will run at this priority.If not set or invalid,#MAX_PRIORITY will be used.#jacorb.poa.thread_priority=#size of the requ

20、est queue,clients will receive Corba.TRANSIENT#exceptions if load exceeds this limitjacorb.poa.queue_max=100.配置项包括网络缓冲区的大小、JacORB 在不能建立连接时的重试次数、在重试前等待的时间间隔。ORBInitRef.NameService 的值是 JacORB 命名服务的 URL。这个 URL 被 ORB 用来定位存储服务对象引用的文件(请参见第 4 章)。verbosity 配置项指定 JacORB 在运行时可以忽略多少诊断输出。除非将 logfile 配置7,8,项设定为一

21、个文件,否则系统将向终端输出日志。将 verbosity 置为 0 意味着不输出任何诊断信息,2 为详细诊断信息输出。1 则忽略某些信息,例如忽略连接打开、接受和关闭的信息。如果想可选的输出一些诊断信息,可以使用 jacorb.util.CAD 工具生成一个自定义的输出级别。,配置项 jacorb.poa.monitoring 指明 POA 是否打开一个图形界面显示自身的动态信息,例如有多长的请求队列,有多大的线程池。同时,这个工具也可以用来修改 POA 的状态,从活动到保持,详细说明可以参见第 5 章。,现在就可以在 demo 目录下任一子目录来测试安装。在此目录下有很多 JacORB 的例

22、子。,9,3 编程起步,在开始讲述例子之前,我们先看一下在 JacORB 中开发 CORBA 应用的基本步骤。我们也按照这个基本步骤来讲述例子。例子请参见 demo/grid 目录,在此目录有一个 build.xml,用以使用 ant 来制作,这样不用每回都手工运行每一开发步骤,当然还是应该搞清楚开发的原理。,本文只是 JacORB 编程的简短介绍,不会涉及 CORBA IDL 的所有细节,建议看看 demo 下的其他例子,这些例子是按照 CORBA IDL 的方式进行组织的。,3.1 JacORB 开发步骤,JacORB 的应用开发一般分为以下五步:1.写 IDL 接口定义,2.编译 IDL

23、 接口定义生成 Java 类3.实现步骤 2 中生成的接口,4.写服务器启动类,并注册到 ORB5.写客户端去获取服务对象引用,3.2 IDL 接口定义,本例实现了一个简单的服务,其接口在 server.idl 中定义。本例所有的源代码都可以在jacORB1_4_beta1/demo/grid 目录下找到。下面是 server.idl 文件的内容:,/server.idl,/二维网格的接口定义:,module demo,module grid,interface MyServer,typedef fixed fixedT;,readonly attribute short height;/网络

24、的高度readonly attribute short width;/网络的宽度/设置n*m的网络,void set(in short n,in short m,in fixedT value);,/返回n*m的网络元素,fixedT get(in short n,in short m);exception MyException,string why;,;,short opWithException()raises(MyException);,;,10,3.3 生成 Java 类,使用如下命令编译此接口文件:,$idl-d./.server.idl,此命令将生成多个 Java 源文件,Jav

25、a 源文件的生成依照 OMG 标准的 IDL-Java 语言映射定义。如果你对语言映射定义感兴趣,例如 IDL 的语言结构如何映射为 Java 的语言结构,可以到 www.omg.org 上查找相关文档。JacORB 的 IDL 编译使用 CORBA2.3 定义的语言映射,详细说明可参考附录的参考书目BVD01。如何使用 idl 接口定义,可参考 demo 目录下的例子。,IDL 编译器产生 Java 接口 MyServer、MyServerOptions,及桩和骨架文件_MyServerStub、MyServerPOA、MyServerPOATie。我们将在后面详细这几个类。,注意 IDL

26、编译器将会产生一个和 IDL 接口文件中定义模块相对应的目录结构。如果我们不指定-d./.,将在当前目录下创建 demo/grid 子目录。,如何存放生成的 Java 源文件各有所好,有人喜欢所所有的文件都放在一个地方(可以使用-d选项),有人喜欢一个目录存放生成的的源文件,另外一个目录存放 Java 编译产生的 class 文件。,3.4 实现接口,现在我们来实现接口定义中描述的功能。这个 Java 类命名为 gridImpl,除了要实现接口定义中描述的所有功能外,gridImpl 还应该是在前面生成的类 MyServerPOA 的子类。MyServerPOA 中包含接受远程调用和将结果返回

27、给客户的端的相关代码。,你也许注意到当 gridImpl 要继承另外一个类时,这种方式就有局限性。因为 Java 只允许继承一个父类,在后面将讲到用桥接方式解决这个问题。,这是 gridImpl 的源代码,在代码中使用 java.math.BigDecimal 来保存接口定义中的 fixedT 类型。,package demo.grid;/*,*A very simple implementation of a 2-D grid*/,import demo.grid.MyServerPackage.MyException;public class gridImpl extends MyServ

28、erPOA,protected short height=31;protected short width=14;,protected java.math.BigDecimal mygrid;public gridImpl(),mygrid=new java.math.BigDecimalheightwidth;for(short h=0;h height;h+),for(short w=0;w width;w+),mygridhw=new java.math.BigDecimal(0.21);,public java.math.BigDecimal get(short n,short m),

29、if(n=height)&(m=width),return mygridnm;,11,else,return new java.math.BigDecimal(0.01);,public short height(),return height;,public void set(short n,short m,java.math.BigDecimal value),if(n=height)&(m=width),mygridnm=value;,public short width(),return width;,public short opWithException(),throws demo

30、.grid.MyServerPackage.MyException,throw new demo.grid.MyServerPackage.MyException(This is only,a test exception,3.5 编写服务器,这一步要写一个类来调用 gridImpl 类,并将其注册到 POA,这样远程对象才能通过MyServer 接口来访问它。以下是这个类的源代码:,package demo.grid;import java.io.*;,import org.omg.CosNaming.*;public class Server,/public static void mai

31、n(String args),org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args,null);try,org.omg.PortableServer.POA poa=,org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references(RootPOA);,poa.the_POAManager().activate();,org.omg.CORBA.Object o=poa.servant_to_reference(new,gridImpl();,if(args.length=

32、1),/write the object reference to args0PrintWriter ps=new PrintWriter(,new FileOutputStream(new File(args0);,ps.println(orb.object_to_string(o);ps.close();,else,/register with the naming serviceNamingContextExt nc=,NamingContextExtHelper.narrow(,orb.resolve_initial_references(NameService);nc.bind(nc

33、.to_name(grid.example),o);,12,catch(Exception e),e.printStackTrace();,orb.run();,在初始化ORB之后,要获取一个POA的引用。ORB可以通过RootPOA来获取一个初始引用,此引用只是一个CORBA.Object,需要使用POAHelper来实例化为POA的引用。下一步是激活该对象,因为引用刚创建时是“保持”状态,在这种状态下,不能处理任何请求。通过调用POA的POAManager对象的activate()方法将POA激活。现在就可以通过POA将一个Java对象转化成一个CORBA对象。为了使新创建的CORBA对象

34、能被客户端访问,我们要提供该对象的引用。这一过程通过目录服务-命名服务器-来完成。命名服务 器的引用通过调用,orb.resolve_initial_references(NameService),然后用,org.omg.CosNaming.NamingContextExtHelper,的narrow()方法实例化为正确的命名服务器对象。最后,调用命名服务器的bind()方法将CORBA对象引用进行发布。对象的名称作为bind()的参数传入,当然,不能只传递一个字符串,而是应传入代表名称的,CosNaming.NameComponents对对入新前对入,对对对。对对下对对下新的的的,新前的的的

35、,的名名名下的名对对入,3.6 编写客户端,下最,最对对前最对最。下入最最。的的最最下最,package demo.grid;,import org.omg.CosNaming.*;public class Client,public static void main(String args),try,MyServer grid;,org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args,null);,if(args.length=1),/args0 is an IOR-stringgrid=,MyServerHelper.narrow(orb.str

36、ing_to_object(args0);,else,NamingContextExt nc=,NamingContextExtHelper.narrow(,orb.resolve_initial_references(NameService);,grid=MyServerHelper.narrow(,nc.resolve(nc.to_name(grid.example);,short x=grid.height();,System.out.println(Height=+x);short y=grid.width();,System.out.println(Width=+y);x-=1;y-

37、=1;,13,System.out.println(Old value at(+x+,+y+):+grid.get(x,y);,System.out.println(Setting(+x+,+y+)to 470.11);grid.set(x,y,new java.math.BigDecimal(470.11);,System.out.println(New value at(+x+,+y+):+grid.get(x,y);try,grid.opWithException();,catch(jacorb.demo.grid.MyServerPackage.MyException ex),Syst

38、em.out.println(MyException,reason:+ex.why);,catch(Exception e),e.printStackTrace();,在初始化ORB之后,客户端通过命名服务器获取一个grid服务的引用。如上所述,通过调用orb.resolve initial references(NameService)获取命名服务,使用resolve()方法在命名服务器上查找grid的引用。返回的结果是org.omg.CORBA.Object对象,需要实例化为MyServer。,在将所有的Java类都成功编译以后,现在可以在不同的Java虚拟机中启动服务器和客户端。当然,应

39、该是命名服务最先启动,如果命名服务还没有启动,使用以下命令来启动:,$ns/home/me/public_html/NS_Ref,/home/me/public_html/NS_Ref是一个本地的可写文件,服务器和客户端都可以通过URL的方式访问。这样,可以不使用端口号,而服务器和客户端都可以获取命名服务的引用,从而实现互相访问。,启动服务器:,$jaco demo.grid.Server,接着,运行客户端:,$jaco demo.grid.Client,运行客户端产生以下输出:,Height=31Width=14,Old value at(30,13):0.21Setting(30,13)t

40、o 470.11,New value at(30,13):470.11,MyException,reason:This is only a test exception,no harm done:-)done.,3.7 桥接方式,如果在实现接口已经继承了另外一个类,而不能继承MyServerPOA时,可以使用桥接方式。简言之,这种方式将继承改为指派,不是继承MyServerPOA,则是实现MyServerOperations接接入,package demo.grid;,import demo.grid.MyServerPackage.MyException;,public class grid

41、OperationsImpl implements MyServerOperations,14,.,的的服服。前下的服的的最,package demo.grid;import java.io.*;,import org.omg.CosNaming.*;public class TieServer,public static void main(String args),org.omg.CORBA.ORB orb=,org.omg.CORBA.ORB.init(args,null);,try,org.omg.PortableServer.POA poa=,org.omg.PortableServ

42、er.POAHelper.narrow(orb.resolve_initial_references(RootPOA);,/use the operations implementation and wrap it in/a tie object,org.omg.CORBA.Object o=poa.servant_to_reference(,new MyServerPOATie(new gridOperationsImpl();,poa.the_POAManager().activate();if(args.length=1),/write the object reference to a

43、rgs0PrintWriter ps=new PrintWriter(,new FileOutputStream(new File(args0);ps.println(orb.object_to_string(o);ps.close();,else,NamingContextExt nc=,NamingContextExtHelper.narrow(,orb.resolve_initial_references(NameService);NameComponent name=new NameComponent1;name0=new NameComponent(grid,whatever);nc

44、.bind(name,o);,catch(Exception e),e.printStackTrace();,orb.run();,4,JacORB 命名服务,新的的的。命命下的服命命对对,。入最命,。命,命命服命命命的命入入入新前。的的的命命找找找找的的下对对,。找新前,。找找找找的的下对对新找入的名命的的下找命下找找对。前户下户户下入JacORB的的对OMG下实实新的的的(INS),找找,的实找命下对对实。,实实的实命找对对实。下功功入,找找功功最。新功功功功的新的实命实功功新功功新名功入JacORB新的的的功功功功组组最对下下的的最最,组对下下对组新前。的的最最下入命接接入新。JDK1.

45、2前前下下在,新,在在JDK下功在命新的的的和找下入下实在对,和和和新bug,下和,将将JacORB,功将将下实入下对,下入下。将下入,下命。NamingContextExt来代替NamingContext接口,否则,总会碰到空指针或其他异常。在JDK1.1 中没有这些问题。4.1 运行命名服务JacORB命名服务是一个程序,需要在访问前启动。使用如下命令启动:$ns 也可以通过java程序直接启动:$jaco jacorb.naming.NameServer 在上例中$ns/home/me/public_html/NS_Ref命名服务将位置信息和日志信息写入/home/me/public_h

46、tml/NS_Ref文件中。客户端使用这个文件来定位命名服务。但是,在默认情况下,客户端并不是通过本地或共享文件的方式来读取该文件,而是使用URL通过http协议来访问。这也表明命名服务日志文件可能通过HTTP方式进行访问,如果知道位于域中哪一个Web服务器中。这种实现方式的优点在于客户端不必知道命名服务的端口号,而是通过URL的方式来访问。如果想限制命名服务在域中的可见性,或者无法访问一个Web服务器,那么可以使用文件URL的方式来代替HTTP的URL方式,例如,可以使用如下方式file:/home/brose/public_html/NS_Ref来替代http:/www.inf.fu-be

47、rlin.de/brose/NS_Ref使用URL的方式也方便没有网络连接的机器,请注意HTTP协议并不总能被使用,当客户端已经定位命名服务以后,后续的请求将使用标准的CORBA方法调用,也就是使用IIOP协议(基于TCP/IP)。命名服务将自身的内部状态,例如在命名空间中绑定的名称,存储在当前目录的文件中。目录也可以用参数jacorb.naming.db_dir来指定。当命名服务正常终止时,内部状态都将被保存,但使用Kill或Control-C时会造成数据丢失。如果状态文件存在且不为空,命名服务就能从该文件中恢复状态。第二个参数是以毫秒计算的超时值。如果这个参数被设置,则命名服务在到运行指定

48、时间后,将保存状态并正常关闭。这种方式在命名服务注册到实现仓库时很有用,这样,命名服务可以按需启动。配置根命名空间配置一个命名空间(例如命名服务)作为ORB根命名空间,只需要将启动文件指定到配置文件.jacorbproperties即可。也可以将启动文件设为配置项ORBInitRef.NameService的值。在根命名空间配置好以后,对象NamingContextExt下下下最。下,。orb.resolve_initial_references(NameService),新的的的,或,的的,或,入15,16,4.2 访问命名服务,新JacORB入实实通通下CORBA命通的服。新的的的最/获取

49、命名服务的引用,ORB orb=ORB.init(args,null);,org.omg.CORBA.Object o=orb.resolve_initial_references(NameService)NamingContextExt nc=NamingContextExtHelper.narrow(o);,/查找对象,server s=,serverHelper.narrow(nc.resolve(nc.to_name(server.service);,在查找对象之前,需要获取命名服务的引用。获取引用的标准方式是调用,orb.resolve_initial_references(Name

50、Service),。下,的服最。,对对下新的的的,对对的实下对下NameComponents数组功新数数,下数功数数数数的名入实实下,的服,新前数构下数对下数组,构命的的下的下server,入构下service,构,。构命对下新的构功入组构,新前最。接接NamingContextExt的方法to_name()将字符串server.service转化结构名称。然后,可以在名称命名空间中调用resolve()方法来查找对象,并传递一个结构名称作为参数。,4.3 构造层次命名空间,就象文件系统的目录结构一样,命名空间也可以包含其他的命名空间,从而构成层次结构,而不是平面结构。对象的结构名称的各部分就

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号