首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Java Corba NameService

访问Java Corba NameService
EN

Stack Overflow用户
提问于 2013-01-11 22:17:00
回答 1查看 4.3K关注 0票数 2

有没有办法从正在运行的Java (1.5)程序访问corba名称服务。我想看看哪些其他进程注册到了一个给定的进程。

我确实知道,JRE中有三个工具。servertoolorbdtnameserv,但要么我没有正确使用它们,要么它们不是正确的工具。

附加信息:该程序是通过-ORBInitialPort 1234启动的

tnameserv相同,Execute orbd -ORBInitialPort 1234 ->返回一个错误,原因是已经在使用中(是的,很好,因为应用程序正在运行)。但是如果我使用servertool -ORBInitialPort 1234,就不会出现错误。但是如果我在命令提示符或其他命令中输入" list“,它将总是返回一个空列表。

诚心的基督徒

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-11 23:29:02

可以通过org.omg.CosNaming包中的类访问现有的、正在运行的CORBA命名服务。您需要获取NamingContextExt。它具有遍历所有现有绑定以及按名称解析对象的方法。

当您启动tnameserv工具时,它会为您打印IOR -这是CORBA URL。您可以从世界上任何ORB获取CORBA对象(包括名称服务),前提是它可以通过网络访问,并且您提供了IOR:

代码语言:javascript
复制
public static void main(String args[]) throws Exception {
   ORB orb = ORB.init(args, null);
   // pass the IOR as command line parameter for this program
   String ior = args[0];
   org.omg.CORBA.Object objRef = orb.string_to_object(ior);
   NamingContextExt nameService = NamingContextExtHelper.narrow(objRef);

   // Now you can work with your naming service. 
}

有关如何访问CORBA对象的教程,请参阅here;有关如何使用命名服务的教程,请参阅here

默认情况下,orb.resolve_initial_references("NameService") (如果未配置)返回正在运行的虚拟机上的本地服务,您需要查询外部服务。要使用此方法,您需要传递正确的配置属性(在我的示例中,第二个参数为null ),并将ORBInitRef.NameService属性设置为名称服务的地址,如here所述。许多(或大多数)生产环境都设置了此属性,以便此方法返回正确的远程名称服务。

servertool是一个命令行工具,它允许在不编写Java代码的情况下列出已注册的CORBA对象。您需要指定在哪台主机上运行感兴趣的名称服务。如果服务在给定的主机和端口上运行,则servertool不会报错。如果找不到,它应该会抱怨!

最重要的是,您的CORBA对象必须通过调用

代码语言:javascript
复制
nameService.bind(yourName, yourCORBAObject);

如果名称服务是远程的,这将发送包含您的orb的URL和对您的对象的引用的网络消息。如果你没有注册你的对象,当然引用将不可用,servertool会给你一个空的列表,就像你抱怨的那样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14279987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档