如何获得CORBA IOR
我正在使用CORBA,我希望获得IOR文件,其中包含连接到CORBA服务所需的信息。有一些关于如何从我发布的链接中获取“ExternalNameService.ior”文件的信息,但我不确定该怎么做。基本上,我对我想做的事情有一个想法,那就是:如何获得CORBA IOR,corba,Corba,我正在使用CORBA,我希望获得IOR文件,其中包含连接到CORBA服务所需的信息。有一些关于如何从我发布的链接中获取“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)
你永远不应该这样做。CORBA的设计目的是向您隐藏网络细节。此外,IOR并不总是绑定到TCP/IP,因此甚至可能不包含主机或端口(尽管它们几乎总是这样)
我建议在进一步研究CORBA之前,多了解一些CORBA。是一个很好的介绍网站
IOR是服务器对象的“句柄”,意味着是不透明的数据块,您只需使用这些数据块调用它们所引用的远程资源。它们就像人们的电话号码——一种沟通的手段
如果某个文件中没有IOR字符串,则可以在某个运行的命名服务中找到IOR(它就像IOR的“白页”目录) 对于链接到的“probe”实现,您似乎不需要自己执行此操作—文档中指出,您只需要设置一个指向NameService或服务于该服务的URL的属性IOR@GreyBeardedGeek请阅读我的更新,如果你需要更多信息,请告诉我。谢谢你的帮助。老实说,我几乎很抱歉我跳到这里来了——我已经有好几年没有用CORBA做过任何事情了,显然我在这里有点力不从心。但是,很明显,您的命名服务器存在问题-我可以建议将“CORBA.OBJECT\u NOT\u EXIST”插入您最喜欢的搜索引擎吗?谢谢您的反馈。我会在提出解决方案时回信……以防有人感兴趣。您是否设法获得IOR?我指的是com.sun.corba.se.spi.ior.ior对象。另一个E///家伙(艾尔玛)。另外,通过RSG的Corba在AFAIK是不可能的。