1. 定義一個遠程接口。 java
2. 實現遠程接口和服務器。 安全
3. 使用遠程接口開發一個客戶程序(一個應用程序或是App)。 服務器
4. 產生樁和構架。 分佈式
5. 啓動RMI註冊表。 spa
6. 運行服務器和客戶程序。 code
實例: server
1. 定義一個遠程接口Arith 對象
package rmi; public interface Arith extends java.rmi.Remote{ int []add(int a[],int b[])throws java.rmi.RemoteException; }2. 實現遠程接口和服務器
package rmi; import java.rmi.Naming; import java.rmi.RMISecurityManager; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class ArithImpl extends UnicastRemoteObject implements Arith{ private String objectName; protected ArithImpl(String s) throws RemoteException { super(); objectName=s; // TODO Auto-generated constructor stub } private static final long serialVersionUID = 1L; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub /* * 建立並安裝一個安全管理器。 * */ RMISecurityManager sm=new RMISecurityManager(); System.setSecurityManager(sm); try{ /* * 建立遠程對象實例 * */ ArithImpl ai=new ArithImpl("ArithServer"); /* * 用RMI向註冊表中註冊遠程對象,是經過名字註冊來綁定對象。 * 客戶根據名字找到對象。 */ Naming.rebind("//acer-pc/ArithServer", ai); }catch(Exception e){ e.printStackTrace(); } } public int[] add(int[] a, int[] b){ // TODO Auto-generated method stub int c[]=new int [10]; for(int i=0;i<10;i++){ c[i]=a[i]+b[i]; } return c; } }
3. 使用遠程接口開發一個客戶程序 接口
package rmi; import java.rmi.*; public class ArithApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a[]={1,2,3,4,5,6,7,8,9},b[]={9,8,7,6,5,4,3,2,1}; int result[]=new int[9]; try{ /* * 首先從服務器註冊表中查找到ArithServer的引用。 * */ Arith arith=(Arith)Naming.lookup("//acer-pc/ArithServer"); result=arith.add(a, b); }catch(Exception e){ e.printStackTrace(); } System.out.println("The sum="); for(int i=0;i<9;i++){ System.out.print(result+" "); } System.out.println(); } }
4. 產生樁和構架 開發
一旦編寫了代碼,就能夠產生樁和構架,他是在運行時動態肯定的,並根據須要動態裝載。用樁和構架,將客戶和服務器鏈接在一塊兒。
使用rmic編譯器,能夠很容易地產生RMI樁和構架。 % rmic <option> <classname> 例如:% rmic ArithImpl根據上述程序會產生兩個文件:ArithImpl_Skel.class 和ArithImpl_Stub.class.
5. 啓動註冊表
% rmiregistery & /*在Unix環境下使用,默認端口:1099*/
若是想在不一樣端口使用則用:% rmiregistery number &
6. 運行服務器和客戶程序。
% java ArithImpl & % java ArithApp