美文网首页
RMI学习案例

RMI学习案例

作者: 花花是男神 | 来源:发表于2018-06-01 14:13 被阅读0次

本人初学RMI,参照网上的实例教程实现了一个实例,在此记录一下:
RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。JavaDoc描述:Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都必须直接或间接实现此接口。只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用。
注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。
同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根”,而服务器端本身已存在的远程对象则称之为“骨架”。其实此时的存根是客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。

新建一个服务端rmiServerTest项目


这里写图片描述

IHello.java继承Remote接口类

public interface IHello extends Remote {


public String sayHello(String name) throws RemoteException;



} 

必须要继承Remote接口,并抛出RemoteException异常


IHelloImp继承UnicastRmoteObject类,实现IHello接口


public class IHelloImp extends UnicastRemoteObject implements IHello {


private static final long serialVersionUID = 8954703199831085541L;

//必须实现的构造方法
protected IHelloImp() throws RemoteException {
    super();
}

@Override
public String sayHello(String name) throws RemoteException {
    return "你好 " + name + " !";
}



} 

必须继承UnicastRemoteObject,并实现Remote接口,必须实现以上的构造方法,并抛出RemoteException异常。


IHello类测试类

public class IHelloTest { 
public static void main(String[] args) {


    try {
        //初始化远程调用对象
        IHelloImp iHelloImp = new IHelloImp();
        LocateRegistry.createRegistry(8888);
        //将IHelloImp绑定到远程服务
        Naming.bind("rmi://localhost:8888/IHello", iHelloImp);
        System.out.println(">>>>>INFO:远程IHello对象绑定成功!");

    } catch (MalformedURLException e) {
        System.out.println("发生URL畸形异常!");
        e.printStackTrace();
    } catch (RemoteException e) {
        System.out.println("创建远程对象发生异常!");
        e.printStackTrace();
    } catch (AlreadyBoundException e) {
        System.out.println("发生重复绑定对象异常!");
        e.printStackTrace();
    }
}



}

注:我这里是将服务端的IHello.java到处为.jar,引入到客户端项目工程中
新建一个Client项目,Client.java测试类

public class RmiClient { 
public static void main(String[] args) { 
try { 
IHello helloImp = (IHello) Naming 
.lookup(“rmi://10.88.48.221:8888/IHello”); 
System.out.println(helloImp.sayHello(“hch”)); 
} catch (MalformedURLException e) { 
e.printStackTrace(); 
} catch (RemoteException e) { 
e.printStackTrace(); 
} catch (NotBoundException e) { 
e.printStackTrace(); 
} 
} 
}

http://lavasoft.blog.51cto.com/62575/91679/
http://haolloyin.blog.51cto.com/1177454/332426/

相关文章

  • RMI学习案例

    本人初学RMI,参照网上的实例教程实现了一个实例,在此记录一下:RMI(即Remote Method Invoke...

  • Java开发学习之RMI体系结构有哪几层?

    Java开发基础学习中,关于Java的RMI体系了解多少呢?咱们今天就来简单了解下Java学习中RMI体系结构都有...

  • RMI的学习

    为什么会有RMI 一个系统中可能会有多个功能模块,不同的功能模块可能分布在不同的机器上面.不同的功能模块中可能存在...

  • RMI注意事项

    RMI服务接口 提供服务的RMI服务接口必须实现Remote接口 RMI服务启动 RMI服务端口 RMI需要两个端...

  • 【程序员笔记】RMI使用笔记

    本文章共分为三部分 RMI简介 RMI原理 RMI使用 RMI实战 下面详细介绍 一 RMI简介 远程方法调用(R...

  • Java之RMI和JNDI

    由于最近的log4j和fastjson频频曝出JNDI漏洞危机,觉得有必要学习jndi和rmi 1 RMI 1.1...

  • Java RMI服务搭建

    什么是RMI? RMI:远程方法调用(Remote Method Invocation)。 如何建立RMI服务? ...

  • 分布式通信框架 - rmi

    1)什么是rmi 2)简单的实现rmi 3)rmi原理 4)手写rmi框架 进群:697699179可以获取Jav...

  • RMI、LDAP、CORBA与JNDI攻击

    1. RMI 1.1 JAVA RMI 1.1.1 基本概念 RMI(Remote Method Invocati...

  • 关于RPC

    1.RMI RMI(Remote Method Invocation,远程方法调用),RMI使用Java语言接口定...

网友评论

      本文标题:RMI学习案例

      本文链接:https://www.haomeiwen.com/subject/asxksftx.html