一个简单的RMI会话实现

实现远程方法调用非常简单,只需要实现以下6个步骤。
(1)定义一个远程接口的接口,该接口的每一个方法必须声明它将产生一个RemoteException异常
(2)定义一个实现该接口的类
(3)使用RMIC程序生成远程实现所需的残根和框架
(4)创建安全策略
(5)使用rmiregistry注册表注册该远程对象并启动服务器对象
(6)创建一个客户程序和服务器进行RMI调用

1. 定义远程接口
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RemoteInterface extends Remote {
    public String find(String msg) throws RemoteException;
}

2. 实现远程接口的类
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Vector;

public class RMIServer extends UnicastRemoteObject implements
        RemoteInterface {

    Vector<String> data = new Vector<String>();

    /**
     * @param args
     */
    public RMIServer() throws RemoteException {
        super();

        initialize();
        try {
            if(System.getSecurityManager()==null){
                System.setSecurityManager(new RMISecurityManager());
            }
            System.out.println("Set security manager.");
            Naming.bind("//localhost/RMIServer", this);
            System.out.println("RMITServer bound in registry.");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    public void initialize() {
        data.add("a");
        data.add("b");
        data.add("c");
    }

    public String find(String msg) throws RemoteException {
        String result = "Not found.";
        for (int i = 0; i < data.size(); i++) {
            String person = data.elementAt(i);
            if(person.equals(msg)){
                result = "Found";
            }
        }
        return result;
    }

    public static void main(String[] args) {
        try {
            new RMIServer();
        }
        catch (Exception e){
            System.out.println("main()");
            e.printStackTrace();
        }
    }

}

3.运行rmic编译器
javac RMIServer.java
rmic RMIServer

4. 创建安全策略
在DOS窗口输入命令policytool并回车。单击【添加规则项目】->【添加权限】,在出现的窗口中的第一个下拉框选择【All permissions】,单击【确认】->【完成】
从File菜单中选择Save as,输入.java.policy,保存在登陆用户名的文件夹下。

5. 启动RMI注册表
rmiregistry
默认端口是1099,如果要使用新端口,可以rmiregistry <port> 。运行结果为:
Set Security Manager Success
RMIServer object bound in registry success

6. RMI客户端程序
import java.rmi.Naming;

public class RMIClient {
    public String question = "";

    /**
     * @param args
     */
    public RMIClient(String quest) {
        question = quest;
        try {
            RemoteInterface remoteObject = (RemoteInterface) Naming
                    .lookup("//localhost/RMIServerClass");
            System.out.println("remote object found. it is "
                    + remoteObject.toString());
            String reply = remoteObject.find(question);
            System.out.println("remote object return result is: " + reply);
        } catch (Exception e) {

        }
    }

    public static void main(String[] args) {
        if (args.length == 1) {
            new RMIClient(args[0]);
        } else {
            System.out.println("please input on param.");
        }
    }

}

7.编译并运行RMIClient
javac RMIClient
java RMIClient a
java RMIClient d



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值