gpt4 book ai didi

java - 访问 Java Corba 名称服务

转载 作者:行者123 更新时间:2023-11-30 07:20:01 29 4
gpt4 key购买 nike

有什么方法可以从正在运行的 Java (1.5) 程序访问 corba 名称服务。我想查看哪些其他进程已注册到给定进程。

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

附加信息:程序以-ORBInitialPort 1234

开始

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

真诚的基督徒

最佳答案

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

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

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.
}

参见 here有关如何访问 CORBA 对象的教程和 here关于如何使用命名服务。

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

servertool是一个命令行工具,无需编写 Java 代码即可列出已注册的 CORBA 对象。您需要指定感兴趣的名称服务在哪个主机上运行。如果服务在给定的主机和端口上运行,servertool 将不会提示。如果找不到,它应该提示!

最重要的是,您的 CORBA 对象必须通过调用向获得的名称服务注册

nameService.bind(yourName, yourCORBAObject);

如果名称服务是远程的,这将发送包含您的 orb 的 URL 和对您的对象的引用的网络消息。如果你没有注册你的对象,当然引用将在那里不可用,服务器工具将显示一个空列表,就像你提示的那样。

关于java - 访问 Java Corba 名称服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279987/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com