没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
RMI 技术讲解
、 什么是 ?
我们知道远程过程调用()可以用于一个进程调用另一个
进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。的
则在的基础上向前又迈进了一步,即提供分布式对象间的通讯。
()为远程方法调用,是允许运行在一个 虚拟机的
对象调用运行在另一个 虚拟机上的对象的方法。
这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不
同计算机中。
、 的用途
的用途是为分布式 应用程序之间的远程通信提供服务,提供分布式服务。
目前主要应用时封装在各个 项目框架中,例如 ,( 和 均封
装了 技术)
在 中实现 (具体代码见最后一页)
① 在服务器端定义服务的接口,定义特定的类实现这些接口;
② 在服务器端使用 !"#$ 类来注册服务;
③ 在客户端使用 !"#$%&% 来实现远程服
务的代理功能;
④ 在客户端定义访问与服务器端服务接口相同的类
'、 的局限?
目前使用 远程消息交换协议 ( )进行通
信。 是专为 的远程对象制定的协议,由于 是专为 对象制定的,因此,
对于用非 语言开发的应用系统的支持不足。不能与用非 语言书写的对象进行
通信(意思是只支持客户端和服务器端都是 程序的代码的远程调用)。
(、 的使用局限
由于客户机和服务器都是使用 编写的,二者平台兼容性的要求仅仅是双方都运行
在版本兼容的 虚拟机上。
)、 应用程序的基本模型
6、 RMI 调用远程方法的参数和返回值
当调用远程对象上的方法时,客户机除了可以将原始类型的数据作为参数一外,还可
服务器端程序
远程对象
远程对象
以将对象作为参数来传递,与之相对应的是返回值,可以返回原始类型或对象,这些
都是通过 Java 的对象序列化(serialization)技术来实现的。(换而言之:参数或
者返回值如果是对象的话必须实现 *+ 接口)
7、 RMI 体系结构
虚拟连接
传送层
桩,框架(+,#)层:客户端的桩和服务器端的框架;
远程引用(!)层:处理远程引用行为
传送层( ):连接的建立和管理,以及远程对象的跟踪
-、 类和接口(完成一个简单 需要用到的类)。
接口
.+.
#['skelitn]
远程引用层
传送层
. /+.0抽象类1
( 抽 象
类)
2+ ( 抽 象
类)
3 /+.
4
0! 类1
%
客户机 服务器
./$
一、Remote 接口:是一个不定义方法的标记接口
+!56
在 中,远程接口声明了可以从远程 虚拟机中调用的方法集。远程接口不需满足下
列要求:
、 远程接口必须直接或间接扩展 接口,且必须声明为 +,除非客户
端于远程接口在同一包中
、 在远程接口中的方法在声明时,除了要抛出与应用程序有关的一场之外,还必须包括
$(或它的超类,/$ 或 $)异常
'、 在远程方法声明中,作为参数或返回值声明的远程对象必须声明为远程接口,而非该
接口的实现类。
二、RemoteObject 抽象类实现了 接口和序列化 *+ 接口,它和它的子类提
供 服务器函数
说一点:提供了创建远程对象并将其导出(也就是使他们能够被远程客户机所调用),所
需的方法有类 3 /+. 和 2+ 提供。子类可以识别远程对象引用的语义,
例如服务器是简单的远程对象还是科技获得远程对象
三、LocateRegistry final 类用于获得特定主机的引导远程对象注册服务器程序的引用(即
创建 +),或者创建能在特定端口接收调用的远程对象注册服务程序
服务器端:向其他客户机提供远程对象服务
7……;,,远程对象服务
% %78 % %01;,, % 是个接口,他继承了 ,此方
法返回本地主机在默认注册表端口9::上对远程对象Registry的引用。
(还有 %0;1 返 回 本 地主机在指定 上 对 远 程 对 象 % 的 引 用 <
%0; 1;返回指定host在默认注册表端口9::上对远程对象Registry
的引用< %0; ;1返回指定的host和port上对远程对象 %的
引用)
%+0= > 1<,,+0;;+.1绑定对此注册表中指定的
远程引用。:与该远程引用相关的名称+.:对远程对象(通常是一个 +)的引
用
还有一些 +()移除注册表中指定 的绑定。
+(;;+.)重新绑定,如果 已存在,但是 不一样则替换,
如果 一样则丢弃现有的绑定
#0;1返回注册表中绑定到指定的远程引用,返回
?@ 01返回在此注册表中绑定的名称的数组。该数组将包含一个此注册表中调用此
方法时绑定的名称快照。
客户机端:向服务器提供相应的服务请求。
Registry registry=LocateRegisty.getRegistry();
SomeService servcie=(SomeService)registry.lookup(“I serve”);
$
Servcie.requestService();
四、Naming 类
和 % 类类似。
其中客户端:4#01
格式如下AB,, ,AC远程对象引用
服务器端: % %78 % %01<
4+0= > 1<
五、RMISecurityManager 类
在 引用程序中,如果没有设置安全管理器,则只能从本地类路径加载 + 和类,
这可以确保应用程序不受由远程方法调用所下载的代码侵害。
在从远程主机下载代码之前必须执行以下代码来安装 %B
% %("%());
具体步骤:
、 服务器和客户端必须定义一个能够访问的接口,该接口声明能够远程调用的方法,创
建接口继承 接口(接口中声明需要调用的远程方法(需要抛出异常))
、 做一个实现类实现上面创建的接口
'、 写服务器端 程序,注册远程对象。
(、 些客户端,获得远程对象的注册表
)、 生成 + 和 #。
代码:
# <
.D<
+!!$ 5
+.EE01" $<
6
# <
.D<
. D<
.E<
+ $ 3 /+. !5
+01" $5
01<
6
+EE01" $5
,,F/E/2G +
".E01<
6
6
剩余15页未读,继续阅读
资源评论
悠闲饭团
- 粉丝: 150
- 资源: 3301
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功