Java RMI入门

使用使用JavaRMI服务?一共只需要五步!
  1. 创建一个Remtote接口,
    • 继承java.rmi.Remotejava.rmi.Remote是一个没有任何方法的接口,它只是定义的一个规则,我们自己实现的接口必须继承它。
    • 在自定义的接口中的所有方法必须抛出RemoteException异常。
    • 在自定义接口中的所有方法的返回值参数必须是基本数据类型或者继承了Serializable接口。在Java RMI使用过程中,参数需要在client打包(序列化),传送到server,在server将参数解包(反序列化),然后运行程序得出返回值。server再将返回值打包(序列化),然后传送给client,client将返回值解包(反序列化),得到最终结果。如果参数返回值无法正确序列化与反序列化,执行结果将会出错。
public interface MyRemote extends Remote {
    String sayHello() throws RemoteException;
}
  1. 实现MyRemote接口
    • 实现自定义的Remote接口,里面的方法是client需要调用的。
    • 继承UnicastRemoteObject,这一步的目的是让我们实现的类能像一个remote service一样工作
    • 注意:实现的类必须有个抛出RemoteException的构造方法。
    • 注册RMI服务,这个可以通过Naming.rebind()来完成。
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
    protected MyRemoteImpl() throws RemoteException {
    }

    public static void main(String[] args) {
        try {
            MyRemoteImpl service = new MyRemoteImpl();
            Naming.rebind("designpattern.proxy.rmi.MyRemote", service);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String sayHello() throws RemoteException {
        return "Server say: Hi!";
    }
}
  1. 生成StubsSkeletons
    • java有自带的工具可以生成,我们需要在MyRemoteImpl,class类文件的包目录下运行:
      rmic packagename.MyRemoteImpl,就可以看见该目录下生成了对应的StubsSkeletons文件。具体来说,如果你的类文件所在目录为:src/rmi/MyRemoteImpl,class,那么你就改在src目录下运行rmic rmi.MyRemoteImpl
  2. 运行rmiregistry
    • 包含类文件所在目录与项目同名的目录下运行rmiregistry。这一步的目录一定不能搞错,不然会报ClassNotFoundException。具体来说,如果你的类文件所在目录为:src/rmi/MyRemoteImpl,class,那么你就改在src目录下运行rmiregistry
  3. 运行service, client
public class MyRemoteClient {

    public static void main(String[] args) {
        new MyRemoteClient().go();
    }

    public void go() {
        try {
            MyRemote remote = (MyRemote) Naming.lookup("rmi://127.0.0.1/designpattern.proxy.rmi.MyRemote");
            String s = remote.sayHello();
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值