我想为我现有的服务器的CORBA接口添加一个方法。这需要重新编译所有客户端吗?
我正在使用TAO。
我想为我现有的服务器的CORBA接口添加一个方法。这需要重新编译所有客户端吗?
我正在使用TAO。
不需要重新编译客户端(也不应该这样,不管您使用的是ORB)。正如Adam所指出的,查找是通过操作名称来完成的(一种直接的文本比较)。
我已经完成了您对我们基于ACE/TAO的系统的描述,并且没有遇到任何问题(服务器在ACE/TAO C++中,客户端在ACE/TaoC++中,C#使用Borland的Janeva和OmniORBPy)。
假设客户端和服务器通过IIOP进行通信,则不需要重新编译。IIOP消息包含接口的名称、方法的名称和参数。如果这些事情都没有改变,那么一切都应该保持兼容。在接口中添加另一个方法不会改变任何现有的东西。
另一方面,如果您的对象使用不同的协议,或者如果客户端与服务器一起处理,从而绕过IIOP,则可能需要确保所有内容都得到重新编译。
操作(方法)是按名称查找的,因此您只需要重新编译使用新操作的客户端。
使用主机代管的客户端(即在ORB中启用主机代管的同一进程中运行)必须重新编译。远程客户端可能保持不变——如前所述,方法通过符号名称进行匹配。
It depends on usage of new idl method. If Corba invocation is static(SII), meaning your client is linked with stub, you have to recompile a stub if you want to use your new added method interface.
如果corba调用是动态的(DII),则客户端不需要存根。不需要重新编译。在这种情况下,您的客户端代码应该如下所示:
remoteObjRef->invoke("methodname", args); // send("methodname", args)
四年前我做了CORBA DII调用,它与TAO客户端&;TAO/Jacob/IONA corba服务。