读Core Java 第五章
读Core Java 第五章
一、分布式对象
1、简介
(1)客户与服务器的角色
(2)远程方法调用
(3)配置远程方法调用
(4)远程方法中的参数传递
(5)服务器对象**
(6)Java IDL与CORBA
(7)远程方法调用与SOAP
二、客户与服务器的角色
1、概述
(1)目标:客户端程序员以常规的方式进行方法调用,而无需操心数据在网络上传输或者解析响应之类的问题,但是问题在于,提供服务的对象可能不在同一个虚拟机内,甚至可能不是Java语言实现的对象
(2)解决:在客户端为服务器对象安装一个代理proxy,客户调用此代理,进行常规方法的调用,而客户端代理负责与服务器进行联系;在服务器端安装第二个代理对象,该服务器代理与客户端代理进行通信,并且它将用常规方式调用服务器对象上的方法
(3)图示
2、代理之间的通信技术
(1)RMI:Java的远程方法调用技术,支持Java的分布式对象之间的方法调用
(2)CORBA:通用对象请求代理架构,支持任何编程语言编写的对象之间的方法调用,使用Internet Inter-ORB协议(IIOP)支持对象间的通信
(3)SOAP:简单对象访问协议,独立于编程语言,不过SOAP使用基于XML的传输格式
三、远程方法调用
1、术语
(1)客户端对象:发起远程调用的程序对象
(2)客户/服务器的术语是对应于单次方法调用而言的
2、存根与参数编组
(1)代理对象:存根stub,存根位于客户端机器上,而非服务器上
(2)存根将远程方法所需的参数打包成一组字节,与硬件无关的编码方式
(3)在RMI协议中,数字总是以大尾数法字节顺序发送,对象则使用序列化机制进行编码
(4)对参数编码的过程称为参数编组parameter marshalling,将参数转换成适合在虚拟机之间进行传递的格式
(5)客户端的存根方法构造了一个信息块,由被使用的远程对象的标识符,被调用的方法的描述,编组后的参数
组成
(6)服务器端,一个接收对象为每个远程方法调用执行以下动作
反编组参数
定位要调用的对象
调用所需的方法
捕获返回值或该调用产生的异常,并对它编组
将返回值编组,打包送回客户端存根
(7)流程图示
3、接口
(1)客户端代码总是使用某个interface类型的对象变量来访问远程对象
(2)接口是抽象实体
(3)远程对象会自动进行垃圾回收,就如本地对象一样
(4)分布式垃圾回收器采用引用计数机制,无法探测出只存在循环引用的对象,这种循环圈必须由程序员显式地打破,否则这些远程对象就不会被回收
4、动态类加载
(1)当一个远程对象,作为远程方法地参数的参数或者返回值,传递给一个程序时,该程序必须拥有此远程对象的类文件
(2)例:方法返回Product类型的结果,客户程序需要Product.class才能通过编译
(3)远程会遇到安全问题,因此在RMI客户端应用程序需要使用安全管理器security manager,这种安全机制可以保护存根代码中的程序免受病毒攻击
四、配置远程方法调用
1、接口与实现
(1)远程对象的所有接口都必须继承Remote接口,位于java.rmi包中,接口中方法必须声明抛出RemoteException异常
(2)服务器类通常继承自RemoteServer类,位于java.rmi.server包中
(3)UnicastRemoteObject类继承RemoteServer抽象类,是实体类
(4)UnicastRemoteObject对象驻留在服务器上,当有人请求服务时,必须存活且能够通过TCP/IP协议访问到它
2、存根类的生成
(1)JDK5.0后,使用代理机制,所有的存根类都可自动生成
(2)JDK5.0之前,必须使用rmic工具亲自创建存根
(3)在运行rmic之前,必须使用javac编译源文件
(4)如果要为包中的一个类生成存根,必须给出rmic完整的包名
3、定位服务器对象
(1)第一个服务器对象总要通过某种方式进行定位,Sun的RMI类库提供了自举注册服务bootstrap registry service来定位第一个服务器对象
(2)服务器程序使用自举注册服务来注册对象,然后客户端就可以获取这些对象的存根,通过自举注册服务提供一个对象的引用和一个名字,就可以注册一个服务器对象
(3)RMI的URL以rml://开头,后面接服务器以及一个可选的端口号,后面是一个斜线,接着就是远程对象的名字
(4)基于安全原因,一个应用只有当它与注册表运行在同一个服务器时,才可以绑定、取消绑定,或者重绑定注册对象的引用
4、客户端
(1)使用RMI的客户端程序应该安装一个安全管理器,用以控制动态加载存根的行为
(2)RMISecurityManager安全管理器,只要需要从另一个地方加载代码就需要一个安全管理器
上一篇: Java学习第五章
下一篇: masm32使用nmake工具
推荐阅读
-
简单的用java实现读/写文本文件的示例
-
干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结
-
遇见“The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved..”怎么办
-
Java核心技术第五章——1.类、超类、子类(2)
-
.NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
-
Spark使用Java读Hive写入HBase
-
Java读kafka数据写入hbase(清澈)
-
java中处理日志读文件的java代码
-
Java使用poi对Excel进行读和写处理
-
core java interview point (4)