CORBA Programming with TAO - 6.Naming Service(使用命名服务)
摘要:
命名服务(Naming Service)是CORBA定义的诸多服务中比较常用的一个, Naming Service提供的助记符解析服务使得应用程序可以借助助记符,而不是一大串IOR来访问到相应的Servant。
一、简介
直接将IOR串在程序间传递的做法往往比较不方便,特别是,对于非持久servant来说,每次重启Server程序时,这个IOR都会发生变化,在使用上比较不便,而且,当我们需要访问的servant不是一个,而是多个时,使用IOR就更加不便了。为此,CORBA定义了Naming Service服务,命名服务(Naming Service,不过大家叫的更多的是命名服务)是CORBA最基本的服务之一。Server程序将servant注册到Naming Service中,Client程序就可以借助助记符,而不是一大串IOR来访问到相应的Servant了。
TAO对标准的名字服务进行了扩展,使得可以利用multicast来得到名字服务。此外,TAO还提供了NT_Naming_Service,可以将名字服务注册为NT服务进行管理。
二、启动Naming Service
名字服务的文件名为:Naming_Service.exe,它的启动参数有:
% Naming_Service [-ORBNameServicePort nsport]
[-o ior_output_file]
[-p pid_file_name]
[-s context_size]
[-t time]
[-f persitence_file_name]
[-b base_address]
[-m (1=enable multicast responses,0=disable(default)]
-ORBNameServicePort nsport:指定名字服务监听multicast包的端口号。只有在使用了'-m 1'时才有效.
-o ior_output_file: 指定文件名,用来保存名字服务的根上下文的IOR.
-p pid_file_name: 指定文件名,用来保存名字服务程序的进程id
-s context_size: 当创建上下文时, 指定新上下文使用的哈希表的大小,默认1024
-t time: 名字服务监听的时间,单位:秒。默认: 无限
-f persistence_file_name: 指定文件名,用来存放名字服务中被绑定的对象引用。
-m (1=enable multicast responses, 0=disable(default): 是否使用多播功能。
运行名字服务时,可以使用-ORBEndpoint参数来指定其运行的端点(有关-ORBEndpoint的详细内容参见文档: $TAO_ROOT\docs\ORBEndpoint.html):
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -ORBEndpoint iiop://localhost:2809 -m 0
(名字服务在本机的2809端口监听请求,不使用多播方式)
若要使用多播方式启动Naming_Service时,只需执行
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 1
三、参数配置
启动完成后,Naming Service就默默在那里工作了,但是,你的servant和client如何访问它呢?
要在Server和Client程序中访问NameService有两种方法:
1、配置InitRef信息:
可以在启动程序时通过-ORBInitRef来指定,如:
-ORBInitRef NameService=IOR:00ff...
或使用corbaname,如:
-ORBInitRef NameService=corbaname::localhost:2809
指定NameService在本机的默认端口上监听。
也可采用corbaloc来指定NameService的运行信息,如:
-ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809/NameService
在这里,corbaloc/corbaname被用于以更具有可读性的方式来定位servant,关于corbaname、corbaloc的更为详细的信息见参考6。
配置好InitRef后,程序中就可以通过:
orb->resolve_initial_references("NameService");
访问到NameService了。
2、访问Naming Service的另一种方式则是传递Naming Service的IOR串,然后通过:
orb->string_to_object(...);
从IOR串连接到相应的Naming Service,因为NameService只不过是一个特殊的servant。
四、实例
下面新建一个工程eg2_svr,添加到当前Solution,在该工程中添加一个名为eg2_svr.cpp的文件(由于代码较多,文件内容略,详见附件),使该工程依赖于前面的idl工程。由于这是一个Server程序,并且还要用到命名服务,需要链接以下两个链接库:
TAO_CosNamingd.lib
TAO_PortableServerd.lib
编译该工程。
新建一个eg2_cli工程,添加到当前Solution,在该工程中添加一个名为eg2_cli.cpp的文件(由于代码较多,文件内容略,详见附件),使该工程依赖于前面的idl工程,并在工程链接选项中添加TAO_CosNamingd.lib,以使用命名服务,编译该工程。
在Server程序中,我们在创建好servant object后,将其bind到了Naming Service中;在Client程序中,通过resolve助记符,我们从Naming Service那里取得了servant的IOR信息,进而便可与相应的servant进行连接。
在这里Naming Service一定程度上扮演了一个DNS的角色,DNS完成了地址到IP的转换,而Naming Service完成的则是助记符到IOR的转换。
下面是几组正确的启动Naming Servie和eg2_svr/eg2_cli的方法:
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 1
eg2_svr
eg2_cli
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_svr -ORBInitRef NameService=iioploc://localhost:2809/NameService
eg2_cli -ORBInitRef NameService=iioploc://localhost:2809/NameService
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_cli -ORBInitRef NameService=corbaname:iiop:1.2@localhost:2809
eg2_svr -ORBInitRef NameService=corbaname::localhost
%TAO_ROOT%/orbsvcs/Naming_Service/Naming_Service -m 0 -ORBEndpoint iiop://localhost:2809
eg2_cli -ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809
eg2_svr -ORBInitRef NameService=corbaloc::localhost
(注:iiop协议标记可以省略,另IANA已将2809端口分配给corbaloc,当服务程序在该端口上监听时可以省略端口号。)
五、其它
%TAO_ROOT%/utils目录下有两个工具:NameViewer/nslist,可用于查看当前Naming_Service中注册的NamingContext的信息,其中NameViewer是一个基于MFC的可视化的工具,如果你使用的是VC2005 Express将无法编译该工程。
此外,该目录下还有一个工具catior可用于查看IOR的详细信息,你可以指定一个存有IOR信息的文件作为输入参数(catior -f file_name)或者在Naming_Service运行过程中,指定一个有效的NamingContext作为参数,如:
catior -n test.my_context/Echo.Object
参考:
相关推荐
CORBA Programming with TAO,整理自“大卫的思维空间”,内容简洁,快速入门。格式制作为CHM,方便阅读。
《CORBA Programming with TAO》是一篇专门为CORBA编程初学者准备的文章,它详细介绍了如何使用TAO(The ACE ORB)这一实现CORBA标准的开源ORB(对象请求代理)。TAO是ACE(Adaptive Communication Environment)...
8. **JEP 320: Remove the Java EE and CORBA Modules**:移除了不再维护的Java EE和CORBA模块,使JDK更加精简。 9. **其他改进**:还包括性能优化、错误修复、新的API添加等。 Red Hat是一个知名的Linux发行版和...
《Glassfish-CORBA-Source-3.1.0-b021与Fedora数据传输对象解析》 Glassfish-CORBA-Source-3.1.0-b021.zip是一个压缩包,其中包含了Glassfish服务器的一个特定版本的CORBA(Common Object Request Broker ...
8. **JEP 320:移除Java EE和Corba模块**:为了简化JDK,不再包含Java EE和Corba相关的模块,但这并不意味着Java不再支持企业级开发,而是鼓励使用更现代的微服务架构。 9. **JEP 321:HTTP/2和TLS的HTTP/2客户端**...
axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...
JacORB支持CORBA的最新版本,包括IIOP(Internet Inter-ORB Protocol)以及多种高级特性,如动态代理、事件服务、NFS(Naming and Directory Service)等。 ** CORBA 技术详解 ** CORBA 是一种分布式计算模型,它...
./configure --prefix=/path/to/install --with-tao --with-log-support ``` 2. 编译: 使用`make`命令开始编译过程,这可能会花费一些时间: ```bash make -j 4 ``` `-j 4`参数表示使用4个线程并行编译,...
标题 "Ice-3.5.1-el6-x86_64-rpm.tar.gz" 提供的是一个软件分发包的名称,其中包含了 Ice 的3.5.1版本,适用于64位的EL6(Enterprise Linux 6)操作系统。这个压缩包采用tar.gz格式,这是一种在Linux和Unix系统中...
axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...
6. **删除Java EE和Corba模块(JEP 320)**: 这些模块不再包含在JDK中,减少了JDK的大小和依赖性,有助于轻量化部署。 7. **强引用的弱化(JEP 334)**: 引入了`PhantomReference`类的改进,使得垃圾收集器能够更好...
axis2-corba-1.7.4.jar axis2-fastinfoset-1.7.4.jar axis2-java2wsdl-1.7.4.jar axis2-jaxbri-1.7.4.jar axis2-jaxws-1.7.4.jar axis2-jibx-1.7.4.jar axis2-json-1.7.4.jar axis2-kernel-1.7.4.jar axis2-metadata...
5. **ORB服务**:一系列可选的服务,如命名服务、事件服务、交易服务等,为CORBA应用程序提供额外的功能。 **基于Java的CORBA实验** 在这个实例中,我们可能会遇到以下关键步骤: 1. **创建IDL接口**:首先,你...
9. **JEP 318:缩短GPL Class-Path Exception**:Oracle JDK的GPL Class-Path Exception的期限被缩短,意味着使用Oracle JDK的开源项目可能需要考虑许可证兼容性问题。 10. **JEP 319:改进Javadoc**:Javadoc工具...
- 移除了Java EE和Corba模块,简化了平台。 - 引入了HTTP客户端API(java.net.http),方便开发人员进行网络通信。 - 新增了动态类型语言支持,如lambda表达式和方法引用来提高代码的简洁性。 - 改进了字符串...
6. **删除Java EE和Corba模块(JEP 320)**:移除了不再维护的Java EE和Corba相关模块,简化了JDK的体积和维护负担。 7. **其他改进**:包括对JVM的优化,如增强G1垃圾收集器的性能,以及对Java内存模型和并发API的...
《Advanced CORBA Programming with C++》是一本专为高级CORBA编程者设计的书籍,由Addison-Wesley出版社出版。这本书深入探讨了CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)的高级...
Ant能帮助转换这些IDL文件为Java代码,使用`org.omg.CORBA_2_3.idl`任务。 - **IDLC Task**:Ant提供了`idlc`任务,可以调用 OMG 的 IDL 编译器将 IDL 文件编译成 Java 源代码。 3. **使用Ant进行构建** - **环境...
在实际开发中,RIDL通常与CORBA的其他组件一起使用,例如Naming Service(命名服务)和Trading Service(交易服务),来管理和发现远程对象。RIDL提供的这种跨平台和跨语言的能力使得开发者能够在各种环境中轻松地...
官方版本,亲测可用