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