RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
通俗来说即远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
RMI(远程方法调用)原理示意图
方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
要完成以上步骤需要有以下几个步骤:
1、 生成一个远程接口
2、 实现远程对象(服务器端程序)
3、 生成占位程序和骨干网(服务器端程序)
4、 编写服务器程序
5、 编写客户程序
6、 注册远程对象
7、 启动远程对象
【例】简单rmi入门例子
package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 第1步:必须定义接口,要求如下:每个方法必须抛出异常
*/
public interface HelloInterface extends Remote
{
public String sayHello() throws RemoteException;
}
package rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
* 第2步:接口实现类,也就是真正的服务端
* 要求:继承UnicaseRemoteObject是最简单的方法
*
*
*/
public class HelloImpl extends UnicastRemoteObject implements HelloInterface {
// 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常
public HelloImpl() throws RemoteException
{
super();
}
public String sayHello() throws RemoteException
{
return "hllo";
}
}
package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
/**
* 第三步:注册服务
*
*
*/
public class RMIServer {
public static void main(String[] args) throws RemoteException,
MalformedURLException {
// 不必再执行rmiregistry了
LocateRegistry.createRegistry(1099);
HelloInterface hello = new HelloImpl();
// 注册服务
Naming.rebind("//localhost/hello", hello);
}
}
package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
/**
* 第四步:远程调用
*
*
*/
public class RMIClient {
public static void main(String[] args) throws MalformedURLException,
RemoteException, NotBoundException {
HelloInterface hello = (HelloInterface) Naming
.lookup("//localhost/hello");
System.out.println(hello.sayHello());
}
}
- 大小: 35.7 KB
分享到:
相关推荐
自己收集了一些跑得通的教程,并自己整理给出了,入门例子。包括:最原生的使用javac和rmic的例子;还有进一步的,使用IDM,用代码代理原生rmic编译的例子;还有RMI和Spring整合的例子。 另外附有:例子说明 和 一些...
最简单的RMI入门好例子,看看远程调用的效果吧,直接在eclipse下导入就可以运行。
java Spring+RMI入门程序源代码
这是本人刚学习RMI时整理出来的一份RMI入门级的资料,其中有几个简单的RMI应用的例子,公布出来供初学RMI的朋友参考学习,提高初学者对RMI学习的速度...
编程语言JavaRMI入门教程.pdf
RMI入门经典~~~~~~~~~~~~~~~~~~~~~·
简约而不简单的描述了RMI技术,希望对大家有所帮助。
描述java rmi的实用方式,有实用简单的入门介绍,很容易理解!!!
没有使用过RMI的学者来说这是一个很好的资源,很清晰很明确的讲述了RMI的工作原理和基本实例,很好的入门教材
通过这个例子可以大概了解RMI的很多机制
博文链接:https://qs-21th.iteye.com/blog/148796
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。
NULL 博文链接:https://wulinhaoxia5.iteye.com/blog/1526803
NULL 博文链接:https://tywo45.iteye.com/blog/910715
NULL 博文链接:https://cie386-163-com.iteye.com/blog/888762
java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目
亲测可用,可作为java rmi入门程序,一看即懂。