2014-11-25 104 views
0

如果我有可用的IOR,是否有可能从它形成corbaloc?如何从IOR获取corbaloc?

是否有任何工具可以自动执行此操作。

(我正在使用JacORB 3.5)

+1

据我所知这是不可能的,IOR包含更多的信息corbaloc不能包含。根据您如何启动服务器,您可以手动创建代码中的corbaloc。 – 2014-11-27 09:54:36

回答

0

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

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

我们使用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); 
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:[email protected]:8888/StandardImplName/Mnq$$/_Money_Accountant 
0

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

eg

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