RMI
RMI(Remote Method Invocation,遠程方法呼叫)是用Java在JDK1.2中實作的,它大大增強了Java開發分布式應用的能力。Java作為一種風靡一時的網路開發語言,其巨大的威力就體現在它強大的開發分布式網路應用的能力上,而RMI就是開發百分之百純Java的網路分布式應用系統的核心解決方案之一。其實它可以被看作是RPC的Java版本。但是傳統RPC并不能很好地應用于分布式物件系統。而Java RMI 則支持存盤于不同地址空間的程式級物件之間彼此進行通信,實作遠程物件之間的無縫遠程呼叫。
RMI目前(Java Remote Messaging Protocol)進行通信。JRMP是專為Java的遠程物件制定的協議。因此,Java RMI具有Java的"Write Once,Run Anywhere"的優點,是分布式應用系統的百分之百純Java解決方案。用Java RMI開發的應用系統可以部署在任何支持JRE(Java Run Environment Java,運行環境)的平臺上。但由于JRMP是專為Java物件制定的,因此,RMI對于用非Java語言開發的應用系統的支持不足。不能與用非Java語言書寫的物件進行通信。
Java遠程方法呼叫(Java RMI)是Java API對遠程程序呼叫(RPC)提供的面向物件的等價形式,支持直接傳輸序列化的Java物件和分布式垃圾回收。遠程方法呼叫可以看做是激活遠程正在運行的物件上的方法的步驟。RMI對呼叫者是位置透明的,因為呼叫者感覺方法是執行在本地運行的物件上的。看下RMI的一些注意事項。
RMI體系結構的基本原則
RMI體系結構是基于一個非常重要的行為定義和行為實作相分離的原則。RMI允許定義行為的代碼和實作行為的代碼相分離,并且運行在不同的JVM上。
RMI體系結構
存根和骨架層(Stub and Skeleton layer):這一層對程式員是透明的,它主要負責攔截客戶端發出的方法呼叫請求,然后把請求重定向給遠程的RMI服務。
遠程參考層(Remote Reference Layer):RMI體系結構的第二層用來決議客戶端對服務端遠程物件的參考。這一層決議并管理客戶端對服務端遠程物件的參考。連接是點到點的。
傳輸層(Transport layer):這一層負責連接參與服務的兩個JVM。這一層是建立在網路上機器間的TCP/IP連接之上的。它提供了基本的連接服務,還有一些防火墻穿透策略。
**RMI中的遠程介面(Remote Interface)**用來標識哪些方法是可以被非本地虛擬機呼叫的介面。遠程物件必須要直接或者是間接實作遠程介面。實作了遠程介面的類應該宣告被實作的遠程介面,給每一個遠程物件定義建構式,給所有遠程介面的方法提供實作。
RMI的系結(Binding)
系結是為了查詢找遠程物件而給遠程物件關聯或者是注冊以后會用到的名稱的程序。遠程物件可以使用Naming類的bind()或者rebind()方法跟名稱相關聯。
讓RMI程式能正確運行的步驟
編譯所有的源檔案
使用rmic生成stub
啟動rmiregistry
啟動RMI服務器
運行客戶端程式
RMI的stub扮演的角色
遠程物件的stub扮演了遠程物件的代表或者代理的角色。呼叫者在本地stub上呼叫方法,它負責在遠程物件上執行方法。當stub的方法被呼叫的時候,會經歷以下幾個步驟:
初始化到包含了遠程物件的JVM的連接。
序列化引數到遠程的JVM。
等待方法呼叫和執行的結果。
反序列化回傳的值或者是方法沒有執行成功情況下的例外。
把值回傳給呼叫者。
DGC叫做分布式垃圾回收。RMI使用DGC來做自動垃圾回收。因為RMI包含了跨虛擬機的遠程物件的參考,垃圾回收是很困難的。DGC使用參考計數演算法來給遠程物件提供自動記憶體管理。
RMI中使用RMI安全管理器(RMISecurityManager)的目的
RMISecurityManager使用下載好的代碼提供可被RMI應用程式使用的安全管理器。如果沒有設定安全管理器,RMI的類加載器就不會從遠程下載任何的類。
uj5u.com熱心網友回復:
論壇是討論問題的地方, 這種知識建議發到個人博客吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/133757.html
標籤:新技術前沿
上一篇:求助,這個密碼是什么,
下一篇:在 sc 表上創建兩個觸發器 sc_ai 和 sc_au,當插入資料后或更新資料后,如果有人選修的課程多于 2 門,就中斷操作并自動事務回滾。求大佬講解~~
