JAVA RMI远程方法调用简单实例
来源:互联网 发布:php报名系统 编辑:程序博客网 时间:2024/05/16 14:40
RMI的概念:
RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote Procedure Call)应运而生,它使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然未能很好的支持,而且RPC未能做到面向对象调用的开发模式。针对RPC服务遗留的问题,RMI出现在世人面前,它被设计成一种面向对象的通讯方式,允许程序员使用远程对象来实现通信,并且支持多线程的服务,这是一次远程通讯的革命,为远程通信开辟新的里程碑。
RMI的开发步骤:
1.先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
2.开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
3.通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
4.最后客户端查找远程对象,并调用远程方法
简单实例:
1.先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
2.开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
3.通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
4.最后客户端查找远程对象,并调用远程方法
首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable
package com.demo.rmi.model;import java.io.Serializable;//注意对象必须继承Serializablepublic class PersonEntity implements Serializable {/** * */private static final long serialVersionUID = -8311540511634667613L;private int id;private String name;private int age;public void setId(int id) {this.id = id;}public int getId() {return id;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}}
创建远程接口PersonService,注意远程接口需要继承Remote
package com.demo.rmi.service;import java.rmi.Remote;import java.rmi.RemoteException;import java.util.List;import com.demo.rmi.model.*;//此为远程对象调用的接口,必须继承Remote类public interface PersonService extends Remote { public List<PersonEntity> GetList() throws RemoteException;}
建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject
package com.demo.rmi.serviceImpl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.util.LinkedList;import java.util.List;import com.demo.rmi.model.PersonEntity;import com.demo.rmi.service.*;//此为远程对象的实现类,须继承UnicastRemoteObjectpublic class PersonServiceImpl extends UnicastRemoteObject implements PersonService {/** * */private static final long serialVersionUID = 8709671494934206832L;public PersonServiceImpl() throws RemoteException {super();// TODO Auto-generated constructor stub}public List<PersonEntity> GetList() throws RemoteException {// TODO Auto-generated method stubSystem.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通讯端口与通讯路径
package com.demo.rmi.remotingservice;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;import com.demo.rmi.service.*;import com.demo.rmi.serviceImpl.*;public class Program{public static void main(String[] args) {try {PersonService personService=new PersonServiceImpl();//注册通讯端口LocateRegistry.createRegistry(5555);//注册通讯路径Naming.rebind("rmi://127.0.0.1:5555/PersonService", personService);System.out.println("Service Start!");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致
package com.demo.rmi.remotingclient;import java.rmi.Naming;import java.util.List;import com.demo.rmi.model.PersonEntity;import com.demo.rmi.service.*;public class Program {public static void main(String[] args){try{//调用远程对象,注意RMI路径与接口必须与服务器配置一致PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:5555/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();}}}
注意整个层级结构为:
将编译文件放在与src同级的out目录中。
C:\Users\DELL>d:
D:\>cd src
D:\src>javac -d ../out com/demo/rmi/model/*java
D:\src>javac -d ../out com/demo/rmi/service/*java
D:\src>javac -d ../out com/demo/rmi/serviceimpl/*java
D:\src>javac -d ../out com/demo/rmi/remotingservice/*java
通过javac命令编译文件,通过java -server 命令注册服务
参考文章:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html
- JAVA RMI远程方法调用简单实例
- JAVA RMI 远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- JAVA RMI(远程方法调用)简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- 学习笔记:JAVA RMI远程方法调用简单实例
- iOS UITextField控件
- centos、linux安装vpn
- C++中new和delete的用法
- 将Oracle分区表的定义导到文件中
- 创建一个非超级管理员用户,并增加 sudo 权限
- JAVA RMI远程方法调用简单实例
- 读取配置文件
- mysql相关 timestamp遇到的小问题
- Nginx在Linux和windows下的安装使用
- STL容器元素数据满足哪些条件
- git
- initWithFrame什么时候调用
- activity四种加载模式
- myeclipse项目中有个感叹号是什么原因