我正在研究CORBA以及IDL如何将接口映射到不同的语言。我读到你不能在IDL接口中编写构造函数和析构函数,因为对象不是在本地创建的。
我的问题是:
如果客户端在IDL接口中没有指定析构函数,客户端如何删除对象,服务器是否只负责删除对象? CORBA是否提供垃圾收集机制/规范,或者服务器端的语言是否负责这样做?如果只有服务器负责删除对象,那么如何确保删除对象? Ping客户端?
答案 0 :(得分:0)
我的一位教授的电子邮件回放:
完成CORBA对象的所有生命周期管理 由对象适配器。没有内置垃圾 CORBA中的集合(非持久对象除外) 在会话到期时自动停用并自动删除 或挂起,或时限已到期)。仆人对象 撤销注册方法deactivate_object()应该是显式的 调用OA(在服务器代码中)来进行OA 正确取消注册/取消分配对象 (在等待所有可能仍然存在之后 对该对象的运行调用已终止)。
为了模拟远程构造函数行为,(服务器端) 应该使用工厂对象(另一个CORBA对象)。
用于模拟远程析构函数行为,工厂 object可能提供一个显式的destroy方法(用户级别) 由客户端控制的内存管理)或实现 用户级垃圾收集的引用计数 (由服务器控制)。后者很棘手 因为与服务员注销的排序 呼叫OA(deactivate_object())必须正确。