0

我正在研究 CORBA 以及 IDL 如何将接口映射到不同的语言。我读到您不能在 IDL 接口中编写构造函数和析构函数,因为对象不是在本地创建的。

我的问题是:

如果客户端没有在IDL接口中指定析构函数,如何删除对象,服务器只负责删除对象吗?CORBA 是否提供垃圾收集机制/规范,或者服务器端的语言是否负责这样做?如果只有服务器负责删除对象,如何确定应该删除对象?ping 客户端?

4

1 回答 1

0

我的一位教授的电子邮件重播:

  • CORBA 对象的所有生命周期管理都由对象适配器完成。CORBA 中没有内置的垃圾收集(除了非持久对象在会话到期或挂起或时间限制到期时自动停用和删除)。应在 OA(在服务器代码中)显式调用服务对象注销方法 deactivate_object() 以使 OA 正确注销/解除分配对象(在等待所有可能仍在对该对象运行的调用都已终止之后)。

  • 为了模拟远程构造函数的行为,应该使用(服务器端)工厂对象(另一个 CORBA 对象)。

  • 为了模拟远程析构行为,工厂对象可能提供显式销毁方法(由客户端控制的用户级内存管理)或在用户级(由服务器控制)实现垃圾收集的引用计数。后者很棘手,因为对 OA (deactivate_object()) 的仆人注销调用的排序必须正确。

于 2013-05-26T13:36:48.537 回答