首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java RMI 入門精要:從基礎範例到分散式運算實戰

     編輯:Java 相關知識

RMI:J2EE 分散式通訊的基石

遠端方法呼叫(RMI)是 Java 平台建構分散式運算的核心基礎。EJB 架構於 RMI 之上,而 Web Service 則是另一種日益流行的選擇。掌握 RMI 不僅能理解 J2EE 底層機制,更能以輕量方式解決科學運算、SETI 式分散式計算等場景需求。

極簡 RMI 完整範例

1. 定義遠端介面

public interface IServer extends Remote {
    void doSomeThing() throws RemoteException;
}

關鍵:繼承 Remote、方法拋出 RemoteException。

2. 實作伺服端物件

public class ServerImp extends UnicastRemoteObject implements IServer {
    public ServerImp() throws RemoteException { super(); }
    public void doSomeThing() throws RemoteException {
        System.out.println("遠端方法在伺服端執行");
    }
    public static void main(String[] args) {
        ServerImp server = new ServerImp();
        Naming.rebind("//localhost/MyServer", server); // 註冊至 RMI Registry
    }
}

繼承 UnicastRemoteObject 獲得遠端參考能力,main() 中透過 Naming.rebind() 發布服務。

3. 撰寫客戶端程式

public class Client {
    public static void main(String[] args) {
        IServer server = (IServer) Naming.lookup("//localhost/MyServer");
        server.doSomeThing(); // 透過介面呼叫遠端方法
    }
}

客戶端僅依賴介面,透過 lookup 取得遠端參考(Stub)。

4. 執行四步驟

  1. 啟動 RMI Registry:rmiregistry
  2. 產生 Stub:rmic ServerImp
  3. 啟動伺服端:java rmistudy.ServerImp
  4. 啟動客戶端:java rmistudy.Client

步驟 1: 啟動 RMI Registry 步驟 2: rmic 產生 Stub 步驟 3: 啟動伺服端 步驟 4: 啟動客戶端 伺服端收到呼叫輸出 RMI 呼叫流程圖

參數傳遞兩大語意

值傳遞:實作 Serializable

物件完整序列化傳至遠端,遠端呼叫其方法在「伺服端」執行。適用於資料傳輸物件(DTO)。

public interface ISerializableWorker extends Serializable { void work(); }
String doSomeThing(ISerializableWorker wk) { wk.work(); return "結果"; }

遠端參考傳遞:繼承 UnicastRemoteObject

僅傳遞 Stub 參考,遠端呼叫其方法在「客戶端」執行。適用於回呼、事件通知。

public interface IRefWorker extends Remote { void work() throws RemoteException; }
public class RefWorkerImp extends UnicastRemoteObject implements IRefWorker { ... }
void doSomeThing(IRefWorker wk) { wk.work(); } // 在客戶端執行

安全管理與授權策略

分散式環境必須配置 SecurityManager 與政策檔:

// Policy.txt
grant { permission java.security.AllPermission "", ""; };
// 伺服端 main() 加入
System.setSecurityManager(new RMISecurityManager());

啟動參數:java -Djava.security.policy=Policy.txt rmistudy.ServerImp

帶安全策略啟動伺服端 客戶端執行 伺服端回應

總結與應用展望

RMI 雖屬 J2EE 基礎設施,但獨立價值顯著:輕量分散式計算平台、科學運算叢集、跨實驗室資源整合。中國大型機資源相對稀缺,參考 SETI@home 模式,利用 RMI 建構桌面電腦分散式運算網絡,是極具性價比的選擇。分階段掌握 J2EE 各層技術(RMI、JMS、Web Service、EJB),按需選擇而非盡追大而全,是務實架構師的智慧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved