2013-05-25 28 views
0

我正在學習CORBA以及IDL如何將接口映射到不同的語言。我讀過你不能在IDL接口中編寫構造函數和析構函數,因爲對象不是在本地創建的。Corba上的垃圾收集以及客戶如何刪除對象?

我的問題是:

客戶端如何刪除對象,如果他沒有在IDL接口指定一個析構函數,是服務器只負責刪除對象? CORBA是否提供垃圾收集機制/規範,或者是服務器端負責這樣做的語言?如果只有服務器負責刪除對象,那麼如何確保一個對象應該被刪除? Ping客戶端?

回答

0

從一位教授的電子郵件重播:

  • CORBA的全部生命週期管理的對象是通過對象適配器完成 。在CORBA中沒有內置垃圾收集器(除非非持久對象 在會話過期時被自動取消激活,或者在會話過期時掛起或掛起,或者時間限制已過期)。僕人對象 註銷方法deactivate_object()應明確 呼籲OA(在服務器代碼),使OA 註銷/妥善解除分配對象 (等待是該對象的所有可能仍然 運行的呼叫已經終止後) 。

  • 爲了模擬遠程構造函數行爲,應該使用工廠對象(另一個CORBA對象)(服務器端) 。

  • 爲了模擬遠程的析構函數行爲,工廠 對象可能提供一個明確的破壞方法(用戶級由客戶端控制的 存儲器管理)或實現在用戶級 用於垃圾收集 引用計數(由服務器控制) 。後者是棘手的 ,因爲調用OA(deactivate_object())的服務註銷 的順序必須正確。

+0

你的教授一般是正確的,但是這部分不是:「非持久性對象被停用,當會話過期或掛起,或當時間限制已經過期自動刪除」。 CORBA沒有會話的概念,所以這是不準確的。一些ORB確實在CORBA標準之上提供了類會話語義,但它始終是通過特定於供應商的非可移植擴展來實現的。 –

+0

@BrianKelly那麼在CORBA規範中沒有關於垃圾收集的東西?供應商實施它還是不行? –

+1

關於客戶端或會話驅動的垃圾收集肯定沒有,這是正確的。以下是一個供應商擴展的示例,其中增加了對它的支持:http://documentation.progress.com/output/Iona/orbix2000/2.0/session_cpp/html/ –