org.omg.CORBA.OBJECT_NOT_EXIST 尝试获取根命名上下文“NameService”时
Posted
技术标签:
【中文标题】org.omg.CORBA.OBJECT_NOT_EXIST 尝试获取根命名上下文“NameService”时【英文标题】:org.omg.CORBA.OBJECT_NOT_EXIST when trying to get the root naming context "NameService" 【发布时间】:2012-07-20 14:40:57 【问题描述】:我正在尝试创建一个使用 CORBA 进行交互的 java 客户端/服务器应用程序。我关注了this example,并能够使用“Java IDL 对象请求代理守护进程,orbd”让它工作。但是,当我将服务器更改为指向我们的本地omniNames 安装而不是orbd 时,我收到此错误:
C:\Hello>java HelloServer -ORBInitialPort 7000 -ORBInitialHost 192.168.1.5
ERROR: org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: OMG minor code: 1 completed: No
org.omg.CORBA.OBJECT_NOT_EXIST: vmcid: OMG minor code: 1 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:897)
at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_0.getSystemException(ReplyMessage_1_0.java:94)
at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:572)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:452)
at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:339)
at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:129)
at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.invoke(BootstrapResolverImpl.java:89)
at com.sun.corba.se.impl.resolver.BootstrapResolverImpl.resolve(BootstrapResolverImpl.java:107)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
at com.sun.corba.se.impl.resolver.CompositeResolverImpl.resolve(CompositeResolverImpl.java:22)
at com.sun.corba.se.impl.orb.ORBImpl.resolve_initial_references(ORBImpl.java:1151)
at HelloServer.main(HelloServer.java:51)
HelloServer Exiting ...
导致错误的行:
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
就 omniNames 服务器而言,我知道它已正确安装和配置,因为我们有无数其他应用程序已经在使用它 (c++)。我查看了这些其他应用程序的源代码,它们似乎在做同样的事情:
tmpRef = moOrb->resolve_initial_references("NameService");
我知道这不是网络错误,因为如果我使用了错误的端口,就会出现无连接错误。我已经走投无路了,有什么想法吗?
【问题讨论】:
【参考方案1】:问题最终出现在我的 java 服务器和我的 CORBA 服务器之间。我使用omniNames 作为CORBA 服务器(omniOrbs 的一部分)。显然 java 有一个非标准的引导程序,默认情况下与omniNames 不兼容。要启用对 java 引导程序的支持,omniNames 可以使用以下参数启动:
'-ORBsupportBootstrapAgent 1'
添加后一切正常。 More can be read here.
【讨论】:
如何以及在何处添加此参数? @chlara 我相信该参数是在您的 java 应用程序的命令行上设置的。但是,我自 2012 年以来就没有使用过它,所以我不确定今天的情况以上是关于org.omg.CORBA.OBJECT_NOT_EXIST 尝试获取根命名上下文“NameService”时的主要内容,如果未能解决你的问题,请参考以下文章