RMI的概念
RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote Procedure Call)应运而生,它使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然未能很好的支持,而且RPC未能做到面向对象调用的开发模 式。针对RPC服务遗留的问题,RMI出现在世人面前,它被设计成一种面向对象的通讯方式,允许程序员使用远程对象来实现通信,并且支持多线程的服务,这 是一次远程通讯的革命,为远程通信开辟新的里程碑。
RMI的开发步骤
- 先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
- 开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
- 通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
- 最后客户端查找远程对象,并调用远程方法
简单实例
首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable
代码 package rmi.model; import java.io.Serializable; //注意对象必须继承Serializable publicclass PersonEntity implements Serializable { privateint id; private String name; privateint age; publicvoid setId(int id) { this.id = id; } publicint getId() { return id; } publicvoid setName(String name) { this.name = name; } public String getName() { return name; } publicvoid setAge(int age) { this.age = age; } publicint getAge() { return age; } }
创建远程接口PersonService,注意远程接口需要继承Remote
代码 package rmi.service; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.List; import rmi.model.*; //此为远程对象调用的接口,必须继承Remote类 publicinterface PersonService extends Remote { public List<PersonEntity> GetList() throws RemoteException; }
建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject
代码 package rmi.serviceImpl; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.LinkedList; import java.util.List; import rmi.model.PersonEntity; import rmi.service.*; //此为远程对象的实现类,须继承UnicastRemoteObject publicclass PersonServiceImpl extends UnicastRemoteObject implements PersonService { public PersonServiceImpl() throws RemoteException { super(); // TODO Auto-generated constructor stub } @Override public List<PersonEntity> GetList() throws RemoteException { // TODO Auto-generated method stub System.out.println("Get Person Start!"); List<PersonEntity> personList=new LinkedList<PersonEntity>(); PersonEntity person1=new PersonEntity(); person1.setAge(25); person1.setId(0); person1.setName("Leslie"); personList.add(person1); PersonEntity person2=new PersonEntity(); person2.setAge(25); person2.setId(1); person2.setName("Rose"); personList.add(person2); return personList; } }
建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。以下面代码为例,如果阁下将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI \RemotingService\src>javac rmi/remotingservice/Program.java获取Program.class(如何阁下使用的MyEclipse等开发工具,可跳 过此步,直接在*/bin文件夹中直接调用已经生成的Program.class),然后输入D:\\RMI\RemotingService \src>java rmi/remotingservice/Program启动服务。
代码 package rmi.remotingservice; import java.rmi.Naming; import java.rmi.registry.LocateRegistry; import rmi.service.*; import rmi.serviceImpl.*; publicclass Program{ publicstaticvoid main(String[] args) { try { PersonService personService=new PersonServiceImpl(); //注册通讯端口 LocateRegistry.createRegistry(6600); //注册通讯路径 Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService); System.out.println("Service Start!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致
代码 package rmi.remotingclient; import java.rmi.Naming; import java.util.List; import rmi.model.PersonEntity; import rmi.service.*; publicclass Program { publicstaticvoid main(String[] args){ try{ //调用远程对象,注意RMI路径与接口必须与服务器配置一致 PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService"); List<PersonEntity> personList=personService.GetList(); for(PersonEntity person:personList){ System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName()); } }catch(Exception ex){ ex.printStackTrace(); } } }
转帖:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html
相关推荐
RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用
rmi 远程方法调用 客户端
Java RMI远程方法调用详解-例子代码,例子详解在:http://blog.csdn.net/guyuealian/article/details/51992182
NULL 博文链接:https://xiongjiajia.iteye.com/blog/1292142
java rmi 远程方法调用 服务端
Java RMI远程方法调用,简单明了,欢迎大家下载
ssd8 exercise4 计算机网络 RMI 远程方法调用 (老师给的参考答案)
JavaRMI远程方法调用的服务端与客户端实现
RMI远程方法调用讲解教程,大家一起学习一下。很不错的资料
JAVARMI远程方法调用简单实例.docx
rmi 成功实例。两个工程的远程调用。RMIServer是服务器端,RMIClient是客户端。创建两个工程,先开启服务器端。如是在两台机子上实验,请把客户端的请求ip改到你要连接的服务器的ip。
Java RMI远程方法调用的小Demo。详细:http://blog.csdn.net/u014375869/article/details/39344963
这个是基于C#的 RMI远程方法调用 这个是基于C#的 RMI远程方法调用这个是基于C#的 RMI远程方法调用
spring RMI 远程接口调用 包含服务端客户端程序,可完整运行
不用rmic 生成stub skelen 之间运行期生成框架和存根 没写policy安全策略文件
java jdk1.8; eclipse 开发环境;实现A机器的程序,可以管理(增加、删除、改等)B机器上的某个文件夹或者目录;掌握远程过程调用原理,基于...客户端利用RMI实现远程调用服务。同时,在在两台机器之间验证结果正确。
Java RMI 远程方法调用的一个小例子
RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象方法,从而使编程人员可以方便地在网络环境...