CORBA與SOAP都是完全獨立于語言的。CORBA的接口定于語言是IDL,SOAP是WSDL。
遠程方法調用
存根:
1. 被使用的遠程對象的標識符;
2. 被調用的方法的描述;
3. 編組后的參數。
服務端接受對象:
1. 反編組參數;
2. 定位要調用的對象;
3. 調用所需方法;
4. 捕獲返回值或該調用產生的異常,并對它編組;
5. 將返回值編組,打包送給客戶端存根。
遠程對象的所有接口都必須繼承Remote接口,java.rmi.remote。接口中的所有方法也必須拋出RemoteException異常。
基本的RMI類
服務器類通常繼承自java.rmi.server.RemoteServer類。RemoteServer是一個抽象類,僅僅定義了服務器對象與其遠程存根之間通信的基本機制。UnicastRemoteServer是一個實體類,繼承自RemoteServer。
服務器程序使用自舉注冊服務來注冊對象,然后客戶端可以獲取這些對象的存根。
// server
ProductImpl p1 = new ProductImpl("Blackwell Toaster");
Context namingContext = new InitialContext();//建立一個命名context來訪問RMI注冊表
namingContext.bind("rmi:toaster", p1);//將rmi:toaster與p1對象綁定。
// client
Product p = (Product) namingContext.lookup("rmi://yourserver.com/toaster");//返回url對應的遠程對象。
默認情況下,服務器是localhost,端口為1099。
可獲得所有URL中帶有rmi:的服務器對象的列表。
NamingEnumeration<NameClassPair> e = namingContext.list("rmi:");

只要實現Serializable接口的類都可以被復制。
遠程對象是作為存根通過網絡傳遞的,而非遠程對象是通過復制。