java - 访问 Java Corba 名称服务

标签 java corba nameservice

有没有办法从正在运行的 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是一个命令行工具,允许列出已注册的 CORBA 对象,而无需编写 Java 代码。您需要指定感兴趣的名称服务在哪个主机上运行。如果服务在给定的主机和端口上运行,servertool 不会提示。如果找不到,它应该提示!

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

nameService.bind(yourName, yourCORBAObject);

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

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

相关文章:

java - OSGI中openorb和jdk冲突

Hadoop HA Namenode远程访问

Linux 自定义 NSS 模块, `_nss_SERVICE_getspnam_r` 被调用但 `_nss_SERVICE_getpwnam_r` 未被调用

java - 如何使管道与 Runtime.exec() 一起工作?

java - 使用 Spring Framework 持久化到 MySQL,Hibernate 和 JPA 失败,没有真正持久化到数据库

java - unix 中忽略非 ascii csv 分隔符

c++ - 从 CORBA::Char* 到 CORBA::Char 的无效转换

java - 使用 JACORB maven 编译器生成自定义 IDL

java - 检查对象是否仍绑定(bind)到 NameService (tnameserv)

java - 字符串的正则表达式包含不在特定集合中的字符