RMI 實作
RMI 實作包含三個抽象層。
這些抽象層如下:
- Stub 和 Skeleton 層,它會截取用戶端對介面參照變數所進行的方法呼叫,並將這些呼叫重新導向至遠端 RMI 服務。
- 遠端參照 層瞭解如何解譯及管理從用戶端到遠端服務物件的參照。
- 底層是 傳輸 層,以網路中機器之間的 TCP/IP 連線為基礎。 它提供基本連線功能,以及一些防火牆滲透策略。

在 TCP/IP 層頂端, RMI 使用稱為 Java™ 遠端方法通訊協定 (JRMP) 的佈線層次通訊協定,其運作方式如下:
- 需要遠端行為的物件應該延伸 RemoteObject 類別,通常是透過 UnicastRemoteObject 子類別。
- UnicastRemoteObject 子類別會匯出遠端物件,使其可用於服務送入的 RMI 呼叫。
- 匯出遠端物件會建立新的伺服器 Socket ,其會連結至埠號。
- 也會建立一個執行緒來接聽該 Socket 上的連線。 伺服器已向登錄登錄。
- 用戶端會從登錄取得連接伺服器的詳細資料。
- 使用來自登錄的資訊 (包括伺服器接聽 Socket 的主機名稱及埠詳細資料) ,用戶端會連接至伺服器。
- 當用戶端對伺服器發出遠端方法呼叫時,它會建立 TCPConnection 物件,在指定的埠上開啟伺服器的 Socket ,並使用 StreamRemoteCall 類別透過此連線來傳送 RMI 標頭資訊和配置引數。
- 在伺服器端:
- 當用戶端連接至伺服器 Socket 時,會指派新的執行緒來處理送入呼叫。 原始執行緒可以繼續接聽原始 Socket ,以便可以從其他用戶端進行其他呼叫。
- 伺服器會讀取標頭資訊,並建立自己的 RemoteCall 物件來處理從 Socket 解除配置 RMI 引數。
- Transport 類別的 serviceCall() 方法透過分派送入呼叫來提供服務
- dispatch() 方法會對物件呼叫適當的方法,並將結果向下推回佈線。
- 如果伺服器物件擲出異常狀況,伺服器會捕捉它,並將它配置成佈線關閉,而不是回覆值。
- 回到用戶端:
- RMI 的回覆值會解除配置,並從 Stub 傳回用戶端程式碼本身。
- 如果從伺服器擲出異常狀況,則會解除配置並從 Stub 擲出。