如何获得 CORBA IOR
Posted
技术标签:
【中文标题】如何获得 CORBA IOR【英文标题】:How to obtain a CORBA IOR 【发布时间】:2013-05-29 18:44:08 【问题描述】:我正在使用 CORBA network management spec 工作,我想获取包含连接到 CORBA 服务所需信息的 IOR 文件。有一些关于如何从我发布的链接中获取“ExternalNameService.ior”文件的信息,但我不知道该怎么做。基本上我知道我想做的是:
-
获取 IOR。
对其进行解码,以便我获得 CORBA 服务的 IP 和端口。
编译 IDL 并使用它们连接到远程资源。
我坚持的部分是获取 IOR。有什么想法吗?
编辑
我正在尝试提供我自己的探针实现...不使用 IBM 的。文章简单显示了命名服务的名称,由于某种原因我无法连接......这是我最大的问题。如果我尝试连接到本地名称服务,则以下代码有效,但对于爱立信则失败。我提供了正确的 ORBInitialPort
和 ORBInitialHost
作为命令行参数。
ORB orb = ORB.init(args, null);
String corbalocURL = "ExternalNameService";
// get the root naming context
org.omg.CORBA.Object objRef = orb.resolve_initial_references(corbalocURL);
// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
System.out.println(objRef);
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
System.out.println(ncRef);
这些是我遇到的错误:
ERROR : org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: 0x0 minor code: 0 completed: No
org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: 0x0 minor code: 0 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:374)
at java.lang.Class.newInstance(Class.java:327)
at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:914)
at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_0.getSystemException(ReplyMessage_1_0.java:111)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:590)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:459)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:355)
at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:147)
at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:114)
at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.list(BootstrapResolverImpl.java:151)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.list(CompositeResolverImpl.java:55)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.list(CompositeResolverImpl.java:55)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.list(CompositeResolverImpl.java:55)
at com.sun.corba.se.impl.orb.ORBImpl.list_initial_services(ORBImpl.java:1143)
at HelloClient.main(HelloClient.java:22)
【问题讨论】:
你成功拿到 IOR 了吗?我的意思是 com.sun.corba.se.spi.ior.IOR 对象。另一个 E/// 家伙(ealnmar)。 AFAIK 也无法通过 RSG 进行 Corba。 【参考方案1】:你不应该做#2。 CORBA 旨在向您隐藏网络详细信息。此外,IOR 并不总是绑定到 TCP/IP,因此甚至可能不包含主机或端口(尽管它们几乎总是如此)。
我建议在进一步了解 CORBA 之前再多学习一点。 This 是一个很好的介绍网站。
IOR 是服务器对象的“句柄”,是不透明的数据块,仅用于调用它们所引用的远程资源。它们就像人们的电话号码 - 一种实现交流的手段。
如果您在某处的文件中没有 IOR 字符串,您可能能够在某处运行的命名服务中找到 IOR(它就像 IOR 的“白页”目录)。
【讨论】:
看起来您不需要自己为链接到的“探针”实现执行此操作 - 文档指出您只需要设置一个指向 NameService 的属性或为 IOR 提供服务的 URL @GreyBeardedGeek 请阅读我的更新,如果您需要更多信息,请告诉我......感谢您的帮助 好吧,老实说,我几乎很抱歉我跳到这里 - 自从我对 CORBA 做任何事情以来已经有好几年了,而且我显然已经超出了我的深度。但是,您的命名服务器显然存在问题 - 我可以建议将“CORBA.OBJECT_NOT_EXIST”插入您最喜欢的搜索引擎吗? 感谢您的反馈。当我想出解决方案时,我会回信...以防有人感兴趣以上是关于如何获得 CORBA IOR的主要内容,如果未能解决你的问题,请参考以下文章
CORBA.MARSHAL:无法从底层网桥读取值:初始和转发的 IOR 不可访问 vmcid