HeadFirst Java
本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。
第一章 Java入门
第二章 面向对象
第三章 变量
第四章 方法操作实例变量
第五章 程序实战
第六章 Java函数库
第七章 继承与多态
第八章 深入多态
第九章 构造器与垃圾收集器
第十章 数字与静态
第十一章 异常处理
第十二章 GUI(内部类)
第十三章 Swing
第十四章 保存对象
第十五章 网络与线程
第十六章 数据结构
第十七章 程序发布
第十八章 分布式计算
前言
上一章,介绍了组织、包装、部署java程序。具体学习了可执行的jar。通过jar工具将java程序打包JAR文件交给用户使用。还学习了Java Web Start,JWS,简言之,通过Web发布的可执行JAR。
所有类在同一计算机的同一JVM上的堆空间执行是最便捷的情形。但如安全情境下,只允许服务器程序存取数据库,而客户端程序则在用户计算机上执行。这需要RMI技术,实现Java的远程程序调用。同时,会简要学习Servlet、EJB、Jini技术,了解其如何运用RMI,最后我们创建一个服务端浏览器。
Remote Method Invocation
同一机器上JVM只会知道自有堆的引用,方法调用时,两个对象都是在同一个堆上。
JVM无法知道其他机器上JVM信息,不同机器上,程序的运行,JVM的调用不同,但功能是一样的
调用不同机器上对象的方法
在第十五章,我们知道可以通过Socket链接,从一台机器取得另一台机器的数据,那如果要调用另一个机器上JVM堆上对象的方法呢?
可以自定义通信协议,通过Socket将结果传回
但如果能直接获取引用就方便多了,不妨设计某种机制,使用Socekt的I/O表达意图(调用另一台机器对象的方法),实现远程调用对象,但又如同本机的方法调用——RMI。
RMI的设计
helper 的任务
中间桥梁的作用
Cilent helper 连接 Server,传送调用信息(方法名、参数)
Server helper 通过Socket 连接 Cilent helper,解析信息。Service对象调用方法后,其helper将返回值传回
Cilent看似调用远程对象,实际调用本地处理 Socket和串流细节的 代理 helper。
调用方法的过程
Java RMI
Java中,RMI已提供helper,使用RMI,无需编写网络的I/O程序,客户端调用远程方法,如同本机方法的调用。
与一般调用区别,本质仍是通过网络发出调用,那就存在抛出异常的风险(涉及Socket与串流)
helper会将调用转成远程,信息的传递与采用的协议有关:JRMP或IIOP
创建远程服务
简要概括为5个步骤,具体介绍在此图之后。
创建远程接口
实现远程接口
Remote是客户端调用的对象,是真正执行方法的类
前三步是设计具体的远程服务(Service),这里第四步执行前,其实必须先执行RMI registry,即后面的步骤4
步骤之所以在后面,只是代码设计的逻辑顺序,但实际执行,向rmi注册stub对象,就是先执行rmi registry。
后续步骤
rmic的具体过程可另外搜索了解
完整实现代码如下
实现Remote后,客户端如何取得对应的stub对象
RMI registry
客户端需要stub对象 与 Skelton 对象 交换信息,解传回的序列化数据。
思考:客户端如何取得stub的类呢?
stub类文件直接给用户
dynamic class downloading:为stub对象加上URL标记,使用HTTP的GET获取类文件,这需要Web服务器提供类文件。
小结