自 Java 1.1 起,RMI 讓不同 JVM (含不同主機) 上的 Java 應用互相呼叫:一個 JVM 可呼叫另一 JVM 上遠端物件的方法。RMI 是 EJB、Jini 等進階技術基礎。Java 2 加強安全性、動態代碼下載等。本文以最簡單範例說明核心原理,強調實際開發與運行環境結合。
建立 f:\server 目錄放置原始碼。
package jdeveloper.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
package jdeveloper.rmi;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException { super(); }
public String sayHello() { return "Hello World!"; }
public static void main(String args[]) {
if (System.getSecurityManager() == null)
System.setSecurityManager(new RMISecurityManager());
try {
Hello obj = new HelloImpl();
Naming.rebind("HelloServer", obj);
System.out.println("HelloServer bound in registry");
} catch (Exception e) {
System.out.println("HelloImpl err: " + e.getMessage());
e.printStackTrace();
}
}
}
cd f:\server
javac -d . Hello.java
javac -d . HelloImpl.java
rmic -d . jdeveloper.rmi.HelloImpl
jar cvf hello.jar jdeveloper/rmi/Hello.class // 分發給 Client 端
Stub 為動態下載。可放於 HTTP 伺服器目錄 (如 https://hjc/rmi) 或單機測試本地目錄 (f:\server\classes)。文中將對兩種方式給出 policy 與 bat 檔運行步驟。
HelloClient.java (原文未完整,此處結束)