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

RMI 實現 Java 分布式計算:架構解析與代碼實戰

     編輯:Java 程式設計入門

RMI 核心機制

Java RMI(Remote Method Invocation)框架讓分布式服務與應用程式的建構變得透明化。基於 RMI 的應用由 Java 物件構成,彼此呼叫時無視對方物理位置——跨 JVM 呼叫與本地呼叫在語法上完全一致。物件間獲取引用可透過 RMI 註冊服務、方法參數傞返值傳遞。參數與返值利用 Java 序列化機制自動封送。

遠端物件與介面規範

任何參與遠端會話的物件必須直接或間接實作 java.rmi.Remote 介面。被此介面標記的物件意味著其方法可被任意 JVM 呼叫,稱為「遠端物件」。其方法宣告需遵循三大鐵律:

  1. 所有支援遠端呼叫的方法必須在 throws 子句中宣告 java.rmi.RemoteException。
  2. 非基本型態的參數與返值,必須直接或間接實作 java.io.Serializable 介面。
  3. 遠端物件必須提供拋出 RemoteException 的無參數建構子,確保可基於序列化狀態遠端建構。

此外,遠端物件必須「導出」以接收遠端呼叫,通常透過繼承 java.rmi.server.UnicastRemoteObject 或 java.rmi.activation.Activatable 實現自動導出。

經典範例:時間服務

遠端介面定義

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface TimeKeeper extends Remote {
    public String currentDate() throws RemoteException;
    public String currentTime() throws RemoteException;
}

String 實作 Serializable,故可作為遠端方法返值。

遠端物件實作

import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class TimeKeeperImpl implements TimeKeeper {
    public TimeKeeperImpl() throws RemoteException { }

    public String currentDate() throws RemoteException {
        Calendar cal = new GregorianCalendar();
        return (cal.get(Calendar.MONTH) + "/" +
                cal.get(Calendar.DAY_OF_MONTH) + "/" +
                cal.get(Calendar.YEAR));
    }

    public String currentTime() throws RemoteException {
        Calendar cal = new GregorianCalendar();
        return (cal.get(Calendar.HOUR_OF_DAY) + ":" +
                cal.get(Calendar.MINUTE) + ":" +
                cal.get(Calendar.SECOND));
    }
}

此範例展示了遠端介面與實作類別的標準結構,是建構分布式系統的基石。

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