物件式分散式系統的命名,重點在於物件參考如何被支援。Java 的物件參考實質上是可攜的 proxy 實作,但那是語言相依的作法。本節先以 CORBA 為例,看命名如何以語言與平台無關的方式提供;再看 Globe 採用的一套完全不同的方案。
CORBA 物件參考#
用戶端持有物件參考,就能呼叫被參照物件的方法。必須區分兩個層次的參考:
- 行程層:行程(不論 client 或 server)只能使用語言特定的參考實作,多半是指向物件本地表示的指標。這種參考只在該行程的位址空間內有意義,不能直接傳給別的行程——必須先由 RTS 提供的操作封送成行程無關的表示,對方再解封送回來。兩個行程甚至可以用不同語言撰寫。
- RTS 層:底層 RTS 有自己語言無關的參考表示(甚至可以與交給行程交換用的封送版本不同)。重點是行程指涉物件時,其 RTS 能隱含取得足夠資訊、知道實際指的是哪個物件;這些資訊通常由介面規格產生的 client/server stub 傳遞。
早期 CORBA 讓各實作自行決定物件參考的表示方式,結果是:跨行程傳遞參考通常只在雙方使用同一套 CORBA 實作時才行得通——A 封送出來的參考,B 的 RTS 可能完全看不懂。
現今的 CORBA 系統一律支援同一種語言無關的參考表示:可互通物件參考(Interoperable Object Reference, IOR)。實作內部是否使用 IOR 不重要,但跨 CORBA 系統傳遞參考時必以 IOR 形式傳遞。IOR 含有識別物件所需的全部資訊,結構如下:
- 儲存庫識別碼(repository identifier):指派給介面的識別碼,可在介面儲存庫(interface repository)中存放與查找,用於執行期取得介面資訊,輔助型別檢查或動態組合呼叫。前提是 client 與 server 存取同一個介面儲存庫,或至少用同一識別碼識別介面。
- 帶標籤設定檔(tagged profile):IOR 最重要的部分。每個 profile 含有呼叫物件的完整資訊;若物件伺服器支援多種協定,每種協定的資訊可放在各自的 tagged profile 中。
CORBA 節點間通訊使用 Internet Inter-ORB Protocol(IIOP)——專為遠端方法呼叫設計的協定(ORB 即 Object Request Broker,CORBA 對其物件式執行期系統的稱呼)。IIOP profile 由 tagged profile 的 ProfileID 欄位識別,主體有五個欄位:
- IIOP version:本 profile 使用的 IIOP 版本。
- Host:物件所在主機的字串,可用完整 DNS 網域名稱(如
soling.cs.vu.nl)或 IP 位址字串(如130.37.24.11)。 - Port:物件伺服器監聽請求的埠號。
- Object key:伺服器特定資訊,用於把進入請求解多工(demultiplex)到正確物件;通常包含 CORBA object adapter 產生的物件識別碼,也會識別該 adapter 本身。
- Components(選用):正確呼叫物件所需的額外資訊,例如安全性資訊,或被參照伺服器(暫時)無法連上時的處置方式。

圖 10-11:IOR 的組織方式,以及其中針對 IIOP 的專屬資訊
Globe 物件參考#
Globe 走的是另一條路:每個分散式共享物件被指派一個全域唯一的物件識別碼(object identifier, OID)——一個 256 位元字串。Globe 的 OID 是真識別碼(true identifier):
- 一個 OID 至多指涉一個分散式共享物件。
- OID 永不重用於其他物件。
- 每個物件至多有一個 OID。
Globe 的 OID 只能用來比較物件參考:行程 A 與 B 各自向繫結的物件要 OID,兩者相同若且唯若 A、B 繫結的是同一個物件。OID 不能像 CORBA 參考那樣直接用來聯絡物件——必須先到定位服務(location service)查出該物件的聯絡位址(contact address),其角色相當於 CORBA 等系統中位置相依的物件參考。Globe 有自己的定位服務,但原則上任何定位服務皆可。
聯絡位址由兩部分組成:
- 位址識別碼:讓定位服務辨認該把插入/刪除操作轉給哪個葉節點(聯絡位址是位置相依的,必須從適當的葉節點開始處理)。
- 實際位址資訊:對定位服務完全不透明,就是一串位元組——可以是網路位址、封送後的介面指標、甚至一份完整封送的 proxy。
Globe 目前支援兩種位址:
- 堆疊位址(stacked address):表示一個分層協定組,每一層是一筆三欄位記錄:
- Protocol identifier:代表已知協定的常數(TCP、UDP、IP 等)。
- Protocol address:協定特定位址(TCP 埠號、IPv4 位址等)。
- Implementation handle(選用):指出該協定預設實作的所在,通常是一個 URL。

圖 10-12:堆疊式聯絡位址中一個協定層的表示方式
- 實例位址(instance address):兩個欄位——implementation handle 指向類別儲存庫(class repository)中的檔案,即本地物件實作的所在;繫結中的行程須載入該實作(流程類似 Java 的類別載入),建立本地物件後,把初始化字串傳入完成初始化。至此物件識別碼才算完全解析。

圖 10-13:實例聯絡位址的表示方式
CORBA 與 Globe 的參考差異是分散式物件系統常見的分野:CORBA 參考直接內含聯絡物件的確切資訊;Globe 參考則需要額外一次查找。Ice 系統也有同樣的區分——CORBA 式的叫直接參考(direct reference),Globe 式的叫間接參考(indirect reference)。