如何从IOR获得corbaloc?

时间:2014-11-25 09:44:52

标签: corba

如果我有IOR,是否可以从中形成corbaloc?

是否有任何工具可以自动完成。

(我正在使用JacORB 3.5)

3 个答案:

答案 0 :(得分:0)

IOR是您可以访问主机的方式。在CORBA中,我们使用IOR而不是可读的host:port。我认为CORBA JDK有一个IORInterpreter或IORReader,但Jacorb没有它。

  

为什么JacORB不在其中使用主机名?

     

我们使用IP号而不是人类可读主机名的原因是jdk没有提供一种方法(除非我自己/使用外部库实现DNS协议)以获得完全限定的主机名(例如z1.inf.fu-berlin.de而不仅仅是z1)。但是只使用不合格的主机名会导致IOR在域外无用。

     

来自:JacORB的常见问题

如果您仍想要连接主机:端口,可以使用:

  //Server
  java.util.Properties props = new java.util.Properties();
  props.setProperty("OAIAddr","myMachine");
  props.setProperty("OAPort","3555");
  org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props)

  //Client
  org.omg.CORBA.Object obj = orb.string_to_object("corbaloc:iiop:myMachine:3555/MyServant");
  MyServant goodDay = MyServantHelper.narrow( obj );

答案 1 :(得分:0)

如果您获得IOR字符串,则可以将其转换为corbaloc格式。一个例子如下:

输入:IOR字符串:

IOR:000000000000001949444C3A4D6F6E65792F4163636F756E74616E743A312E300000000000000001000000000000007C000102000000000D3139322E3136382E35362E31000022B8000000285374616E64617264496D706C4E616D652F4D6E7124242F5F4D6F6E65795F4163636F756E74616E74000000020000000000000008000000004A414300000000010000001C00000000000100010000000105010001000101090000000105010001  

然后你可以使用一个工具(例如UCS Tools,或者你可以使用jacorb提供的dior.bat工具来解析这个字符串,结果如下所示:

Parse IOR Output:
------IOR components-----
TypeId  :   IDL:Money/Accountant:1.0
TAG_INTERNET_IOP Profiles:
    Profile Id:     0
    IIOP Version:       1.2
    Host:           192.168.56.1
    Port:           8888
    Object key (URL):   StandardImplName/Mnq$$/_Money_Accountant
    Object key (hex):   0x53 74 61 6E 64 61 72 64 49 6D 70 6C 4E 61 6D 65 2F 4D 6E 71 24 24 2F 5F 4D 6F 6E 65 79 5F 41 63 63 6F 75 6E 74 61 6E 74 
    -- Found 2 Tagged Components--
    #0: TAG_ORB_TYPE
        Type: 1245790976 (JacORB)
    #1: TAG_CODE_SETS
        ForChar native code set Id: ISO8859_1
        Char Conversion Code Sets: UTF8
        ForWChar native code set Id: UTF16
        WChar Conversion Code Sets: UTF8  

然后,您可以获得corbaloc的必要信息(例如,IIOP版本,主机,端口,对象密钥)。
然后,您可以生成最终的corbaloc格式:

corbaloc:iiop:1.2@192.168.56.1:8888/StandardImplName/Mnq$$/_Money_Accountant

答案 2 :(得分:0)

您可以使用JacORB内部API org.jacorb.orb.util.Corbaloc :: generateCorbaloc(org.omg.CORBA.ORB,org.omg.CORBA.Object)

e.g。

corbaLoc = "corbaloc:" + CorbaLoc.generateCorbaloc(orb,xxx._this_object());