如何获得CORBA IOR

时间:2013-05-29 18:44:09

标签: corba

我正在使用CORBA network management spec,我想获取IOR文件,其中包含连接到CORBA服务所需的信息。有一些关于如何从我发布的链接获取“ExternalNameService.ior”文件的信息,但我不知道该怎么做。基本上我知道我想要做的是:

  1. 获得IOR。
  2. 对其进行解码,以便获取CORBA服务的IP和端口。
  3. 编译IDL并使用它们连接到远程资源。
  4. 我坚持的部分是获得IOR。有什么想法吗?

    修改

    我正在尝试提供我自己的探测器实现...不使用IBM的。文章简单显示了命名服务的名称,由于某种原因我无法连接...这是我最大的问题。如果我尝试连接到本地名称服务,则以下代码可用,但对于爱立信服务则失败。我提供了正确的ORBInitialPortORBInitialHost作为命令行参数。

      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)
    

1 个答案:

答案 0 :(得分:2)

你永远不应该做#2。 CORBA旨在隐藏您的网络详细信息。此外,IOR并不总是绑定到TCP / IP,因此可能甚至不包含主机或端口(尽管它们几乎总是这样做)。

我建议在进一步学习之前先了解一下CORBA。 This是一个很好的介绍网站。

IOR是服务器对象的“句柄”,它们是用于调用它们引用的远程资源的不透明数据块。它们就像人们的电话号码 - 一种促进沟通的手段。

如果某个文件中没有IOR字符串,您可能会在某个地方运行的命名服务中找到IOR(就像IOR的“白页”目录一样)。