English 中文(简体)
在不重新编译的情况下更改CORBA接口
原标题:
  • 时间:2008-08-31 14:44:18
  •  标签:

我想为我现有的服务器的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服务。





相关问题
热门标签