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
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;
}
}
创建远程接口PersonService,注意远程接口需要继承Remote
package
rmi.service;
import
java.rmi.Remote;
import
java.rmi.RemoteException;
import
java.util.List;
import
rmi.model.
*
;
//
此为远程对象调用的接口,必须继承Remote类
public
interface
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
public
class
PersonServiceImpl
extends
UnicastRemoteObject
implements
PersonService {
public
PersonServiceImpl()
throws
RemoteException {