无需重新编译即可更改CORBA接口

时间:2008-08-31 14:44:18

标签: c++ corba idl tao

我想在现有服务器的CORBA接口中添加一个方法。这需要重新编译所有客户端吗?

我正在使用TAO。

5 个答案:

答案 0 :(得分:4)

不需要重新编译客户端(不管您使用的ORB如何,都不应该重新编译)。正如Adam指出的那样,查找是通过操作名称完成的(直接文本比较)。

我已经完成了您使用基于ACE / TAO的系统所描述的内容,并且没有遇到任何问题(服务器在ACE / TAO C ++中,客户端是ACE / TAO C ++,C#使用Borland的Janeva和OmniORBPy)。

答案 1 :(得分:3)

假设客户端和服务器通过IIOP进行通信,则不需要重新编译。 IIOP消息包含接口的名称,方法的名称和参数。如果这些都没有改变,那么一切都应该保持兼容。向界面添加另一种方法不会改变任何现有的东西。

另一方面,如果您的对象使用不同的协议,或者客户端正在与服务器进行处理并因此绕过IIOP,您可能需要确保所有内容都被重新编译。

答案 2 :(得分:1)

按名称查找操作(方法),因此您只需要重新编译使用新操作的客户端。

答案 3 :(得分:1)

必须重新编译使用共置的客户端(即在ORB中启用了共享的同一进程中运行)。远程客户端可能保持不变 - 如前所述,方法由符号名称匹配。

答案 4 :(得分:0)

这取决于新idl方法的用法。 如果Corba调用是静态的(SII),意味着您的客户端与存根链接,则如果要使用新添加的方法接口,则必须重新编译存根。

如果corba调用是动态的(DII),则客户端不需要存根。不需要重新编译。在这种情况下,您的客户端代码应该是:

     remoteObjRef->invoke("methodname", args); // send("methodname", args)

四年前我做了CORBA DII调用,它与TAO客户端和TAO / Jacorb / IONA corba服务一起工作。