RMI的开发步骤
- 先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
- 开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
- 通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
- 最后客户端查找远程对象,并调用远程方法
简单实例
首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable
![Java <wbr>rmi开发实例 <wbr> <wbr>泽0715 <wbr>新浪博客](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
package
rmi.model;
import java.io.Serializable;
// 注意对象必须继承Serializable
public class PersonEntity
implements
Serializable {
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;
}
}
import
// 注意对象必须继承Serializable
public class
private int
private
private int
public void
this .id
}
public int
return
}
public void
this .name
}
public
return
}
public void
this .age
}
public int
return
}
}
创建远程接口PersonService,注意远程接口需要继承Remote
![Java <wbr>rmi开发实例 <wbr> <wbr>泽0715 <wbr>新浪博客](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject
![Java <wbr>rmi开发实例 <wbr> <wbr>泽0715 <wbr>新浪博客](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
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
public class PersonServiceImpl
extends
UnicastRemoteObject
implements
PersonService {
public PersonServiceImpl()
throws
RemoteException {
super ();
// TODO Auto-generated constructor stub
}
@Override
public List
<</span>PersonEntity> GetList() throws RemoteException {
// TODO Auto-generated method stub
System.out.println("Get Person Start!");
List<</span>PersonEntity> personList=new LinkedList<</span>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;
}
}
import
import
import
import
import
import
// 此为远程对象的实现类,须继承UnicastRemoteObject
public class
public
super ();
//
}
@Override
public
//
System.out.println("Get Person Start!");
List<</span>PersonEntity>
PersonEntity person1=new
person1.setAge(25);
person1.setId(0);
person1.setName("Leslie");
personList.add(person1);
PersonEntity person2=new
person2.setAge(25);
person2.setId(1);
person2.setName("Rose");
personList.add(person2);
return
}
}
建立服务器端,在服务器端注册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启动服务。
![Java <wbr>rmi开发实例 <wbr> <wbr>泽0715 <wbr>新浪博客](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
package
rmi.remotingservice;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import rmi.service.
*
;
import rmi.serviceImpl.
*
;
public class Program{
public static void 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();
}
}
}
import
import
import
import
public class
public static void
try
PersonService personService = new
// 注册通讯端口
LocateRegistry.createRegistry( 6600 );
// 注册通讯路径
Naming.rebind( " rmi://127.0.0.1:6600/PersonService " , personService);
System.out.println( " Service Start! " );
}
//
e.printStackTrace();
}
}
}
最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致
![Java <wbr>rmi开发实例 <wbr> <wbr>泽0715 <wbr>新浪博客](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
package
rmi.remotingclient;
import java.rmi.Naming;
import java.util.List;
import rmi.model.PersonEntity;
import rmi.service.
*
;
public class Program {
public static void main(String[] args){
try {
// 调用远程对象,注意RMI路径与接口必须与服务器配置一致
PersonService personService = (PersonService)Naming.lookup( " rmi://127.0.0.1:6600/PersonService " );
List <</span>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();
}
}
}
import
import
import
import
public class
public static void
try {
// 调用远程对象,注意RMI路径与接口必须与服务器配置一致
PersonService personService = (PersonService)Naming.lookup( " rmi://127.0.0.1:6600/PersonService " );
List <</span>PersonEntity>
for(PersonEntity person:personList){
System.out.println("ID:"+person.getId()+"
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}