1 介绍
1.1 背景
分布式系统要求在不同地址空间中运行的计算能够进行通信,可能在不同主机上。对于基本的通信机制,JavaTM编程语言支持套接字(sockets),这对于一般通信是灵活且足够的。然而,套接字要求客户端和服务器参与应用级协议来编码和解码消息进行交换,这样的协议设计繁琐且容易出错。
套接字的替代方案是远程过程调用(RPC),它将通信接口抽象到过程调用的级别。程序员不直接使用套接字,而是在调用本地过程时产生了调用远程目标的幻觉。RPC系统使用外部数据表示(如XDR)对参数和返回值进行编码。
然而,RPC在分布式对象系统中无法很好地转化,这些系统需要在不同地址空间中的程序级对象之间进行通信。为了匹配对象调用的语义,分布式对象系统需要远程方法调用或RMI。在这种系统中,本地代理(存根)对象管理对远程对象的调用。
本规范中描述的Java平台的远程方法调用系统专门设计用于在Java应用环境中运行。Java编程语言的RMI系统假定Java虚拟机(JVM)的同质环境,因此系统可以尽可能利用Java平台的对象模型。
1.2 系统目标
支持Java编程语言中的分布式对象的目标包括:
- 支持在不同虚拟机中的对象上进行无缝远程调用
- 支持服务器向小程序的回调
- 将分布对象模型自然地集成到Java编程语言中,同时保留大部分Java编程语言的对象语义
- 使分布对象模型与本地Java平台的对象模型之间的差异显而易见
- 尽可能简化编写可靠的分布式应用程序
- 保留Java平台运行时环境提供的类型安全性
- 支持远程对象的各种引用语义;例如活动(非持久)引用和持久引用
- 保持Java平台提供的安全管理器和类加载器提供的安全环境
所有这些目标的基础是RMI模型既简单(易于使用)又自然(与语言很好地契合)的一般要求。
本规范的前两章描述了Java编程语言的分布对象模型和系统概述。其余章节描述了Java SE平台的RMI客户端和服务器可见API。