使用RMI创建一个分布式应用程序六步骤:
1. 定义一个远程接口。
2. 实现远程接口和服务器。
3. 使用远程接口开发一个客户程序(一个应用程序或是App)。
4. 产生桩和构架。
5. 启动RMI注册表。
6. 运行服务器和客户程序。
实例:
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