00.RMI(遠端方法調用)


JBoss EJB3是基於JBoss Remoting的 
而JBoss Remoting的首頁裡面就指出, 它是的傳輸協議支持很多: 
  • Socket (SSL Socket) 
  • RMI (SSL RMI) //二奶身份 
  • HTTP(S) 
  • Bisocket (SSL Bisocket) 
  • Servlet (SSL Servlet)
各種協議的性能比較,應該是JBoss Socket作為缺省協議的理由。 


ejb可以基於rmi,不是必須基於rmi 

遠程調用,說白了都一樣,就是序列化,網絡傳輸,反序列化。 
不管是com/com+,soap,webservice,rmi,.net remoting. 

同種runtime的,可以native的二進制序列化,序列化的效率高。 
文本的序列化(xml/json/自定義格式)的方式,可以跨平台和語言,一般基於中間類型。序列化的效率低,數據量也偏大。 

網絡傳輸可以使socket/http/或是自定義協議的。 
明顯socket數據冗餘最小,效率最高。rmi其實是socket上的自定義協議。 
http明顯要走http的報文,文本的方式最合適,實現最簡單,開發和部署方便。 




軟體套件 java.rmi 的描述


提供 RMI 套件。RMI 指的是遠端方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java 虛擬機器上的物件調用另一個 Java 虛擬機器中的物件上的方法。可以用此方法調用的任何物件必須實作該遠端介面。調用這樣一個物件時,其參數為 "marshalled" 並將其從本地虛擬機器發送到遠端虛擬機器(該遠端虛擬機器的參數為 "unmarshalled")上。
該方法終止時,將編組來自遠端機的結果並將結果發送到調用方的虛擬機器。如果方法調用導致拋出異常,則該異常將指示給調用方。
從以下版本開始:JDK1.1


public interface Remote


Remote 介面用於標識其方法可以從非本地虛擬機器上調用的介面。任何遠端對象都必須直接或間接實作此介面。只有在“遠端介面”(擴展java.rmi.Remote 的介面)中指定的這些方法才可遠端使用。
實作類別可以實作任意數量的遠端介面,並且可以擴展其他遠端實作類別。RMI 提供一些遠端物件實作可以擴展的有用類別,這些類別便於遠端物件創建。這些類別是 java.rmi.server.UnicastRemoteObject 和 java.rmi.activation.Activatable。
有關 RMI 的完整的詳細資訊,請參閱描述 RMI API 和系統的 RMI 規範。
從以下版本開始:JDK1.1
Comments