深入Java虚拟机--第四章 网络移动性

来源:互联网 发布:兼职淘宝扫二维码骗局 编辑:程序博客网 时间:2024/04/28 19:40
4.1 为什么需要网络移动性
单机环境--C/S环境--分布式环境(多处理器-分布式处理)
,解决分布式系统中系统管理的问题,通过对象移动能够使软件通过网络自动传送到各台计算机上。
4.2 一种新的软件模式
软件和数据都是由网络传输的,软件和数据的区别就不明显了。
程序不太需要拷贝安装和升级,而是一种自动更新的内容(软件和数据)服务。
4.3 Java体系结构对网络移动性的支持
平台无关性:使得网络上传送程序更加容易,因为不需要为每个不同的主机平台都准备个单独的版本,一个版本可以对付所有的计算机,
安全特性:促进了网络移动性的推广。不用担心
除此之外,主要集中在对网络上传送程序的时间进行管理。把一个单一的二进制文件分割成小的class文件(Java是动态连接(需要时装载),动态扩展(自定义装载),不用等所有的class文件都下载完毕,就可以运行程序),这样class文件可以按需下载,设计的比较紧凑,从而可以在网络上飞快的传送。
Java紧凑性:每条指令都只占一个字节:两个例外情况需要在操作码和操作数中填充1-3个字节。
        Java编译器不会做太多的局部优化,优化的大部分工作留给Java虚拟机。
Jar的应用使得一次可以传送多个class文件,省的多次握手。
其他:不采用按需下载,而是采用订阅模式(提前下载所需的class文件)等,

动态连接(需要时装载),动态扩展、Java紧凑性同样使得Java程序在网络上的传送时间减少。
4.4 applet:网络移动性代码的示例
体现Java的三个特性
4.5 Jini服务对象:网络移动对象的示例
通过对象序列化和远程方法调用(RMI),Jini是一系列协议和API的集合。
4.5.1 Jini是什么
在jini的“思维方式中”,网络是由“服务”组成的,客户端或者其他服务可以利用这些服务。服务可能是网络上的任何形式,它们准备好实现某种功能。硬件设备、软件服务器,或者是通信信道,甚至是用户自己都可以成为服务。比如说支持Jini的磁盘驱动器,可以提供“存储”服务,支持Jini的打印机可以提供打印服务。

4.5.2 Jini如何工作
Jini提供了一个运行时基础结构,以允许服务提供者为客户机提供服务,也使得客户机可以找到并访问服务(怎么有点类似SOA)。运行时基础结构在网络上的三个部分中存在:网络上的查找服务、服务提供者和客户机。查找服务是基于Jini的系统的核心组织机构。新的服务在网络上出现,它们自会在查找服务中注册;同理,你要用的时候也会去找。现在的手机平台的应用有点这个味道啊。
运行时基础结构采用一种网络级协议-称为“搜索”,以及两种对象级协议-“加入”和查找“
搜索过程: 当某个服务提供者,比如支持Jini的磁盘驱动器,可以提供“存储”服务插入到网络的时候,搜索过程自动开始,他广播一条关于自己存在的通知,具体的方法是向一个公开的端口发送组播包。在存在通知中,它会通报自己的IP+端口,以便查找服务能够与它取得联系。
查找服务在公开的端口上监听存在通知包。一旦接到,它会检查通知的详情,从包中包含的信息中,查找服务就可以做出判断,是否应该和通知的发出者取得联系。如果确认,二者之间建立TCP连接,查找服务可以用RMI来发送一个叫做服务注册器的对象,通过网络传送到通知包的源头,服务注册器是用来和查找服务建立更进一步的沟通而设计的。发出存在通知的对象通过这个服务注册对象就可以对查找服务发出join加入和lookup查找操作。
加入过程 服务注册器对象是搜索的结果,服务提供者一旦获得它之后,就可以进行加入操作了--在查找服务中注册自己。服务调用服务注册器对象的register()方法来完成注册,调用的时候传递一个服务条目(service item)作为参数,在这个服务条目中包含一些描述这个服务的对象,register()方法吧服务条目的一份拷贝传递回查找服务,查找服务负责保存所有的服务条目,这一步完成后,就完成注册(加入)。
服务条目包含几个对象,其中包含一种服务对象,客户机可以用它来和服务交互。服务条目也可以包含任意数目的属性,可以是任何对象类型。可能包含图标对象,或者为服务提供图形界面的对象,或者是给出更加详细服务信息的对象。
服务对象通常会实现一个或多个接口,客户机可以藉此来和服务交互,eg。查找对象本事也是一个Jini服务,它的服务对象就是服务注册器。服务提供者在加入服务的时候调用的register()方法就是在ServiceRegister接口中申明的,所有的服务注册器对象都会实现它。客人户籍好热服务提供者和查找服务通话时通过调用服务注册器的方法,这些方法都是在ServiceRegister接口中声明的。类似的,磁盘驱动器可以提供一个服务对象,它实现了一些常见的存储服务接口。客户机可以通过存储服务接口来和磁盘驱动器交互。
查找过程 一旦服务通过加入过程在查找服务中注册后,客户机通过查询查找服务就可以使用它了,要想建立一个能够协同运作完成某项任务的分布式系统,客户机必须能够查找到每个服务,来寻求它们的帮助。客户机通过查找过程来完成找到服务的过程。
客户机通过调用服务注册器上的lookup()方法进行查找。(客户机也是通过和前面描述的搜索过程一样的过程,从查找服务中获得一个服务注册器的。)客户机个lookup方法传递一个叫做服务模板的参数,这是一个表述搜索条件的对象,服务模板可以包含指向Class对象数组的引用,这些Class对象表明了客户机需要的服务对象的Java类型。服务模板也可以包含一个服务编号ID,他可以唯一地表示一个服务;还有属性,必须和服务提供者在服务条目中列出的属性完全相同。服务摸吧的任何字段都可以包含通配符wildcard.比如说服务编号ID如果包含通配符,就可以匹配任何服务编号ID。lookup()方法把这个服务模板送到查找服务,查找服务进行查询,返回零个或多个满足条件的服务对象。客户机可以从lookup方法返回值中取得这些匹配的服务对象的引用。
一般来说,客户机通过Java类型(通常是接口)来查找服务,比如说,假若客户机需要使用打印机,它会编写一个服务模板,其中一个Class对象表示公开的打印服务接口。所有的打印服务都应该实现这个接口。查找过程就会返回所有实现这个接口的服务对象或对象组。通过更改服务模板的属性,可以减少这样基于类型搜索返回结构的数目。客户机可以通过公开的打印服务接口中声明的方法来使用打印服务。
4.5.3 服务对象的优点
简单来说,Jini使用的网络移动的对象(特别是网络移动的服务对象)提高了分布式系统会编程的抽象级别,有效地包网络编程转变成面向对象编程。
Jini体系通过吧面向对象编程引入网络,带来了面向对象的一个优点:接口和实现分离。比如,服务对象允许客户机用好几种方法来获得服务,客户从插叙服务系在,在本地运行的服务对象可以代表整个服务。或者说,服务对象可以作为远程服务器的一个代理。当客户机调用服务对象的方法的时候,它把请求通过网络传送回服务器,那才是真正工作的地方。本地服务对象和远程服务器也可能共同分担工作。,
Jini体系的一个重要推论就是,在服务对象代理和远程服务器之间使用的网络协议,客户机时无需关心的。从图中可以看出,网络协议是实现服务的一部分,协议完全是服务开发者的私人事务,客户机可以通过这种私有协议来和服务器交互,因为服务把它自己的服务对象送到客户机的地址空间中--服务对象在服务和客户机的网络上来回传送。注入客户机的服务对象可以用任何协议和后端的服务通信,RMI、CORBA、DCOM或者是自己zai socket和流上建立的协议,甚至是其他的任何方法。客户端完全不需要关心网络协议,因为它只需要和服务对象实现的公开接口打交道。服务对象负责任何需要进行的网络交流。
同一个服务接口的不同实现可以使用完全不同的方法和完全不同的网络协议。服务可能使用特制的硬件来满足客户机的要求,或者使用软件实现所有的功能。服务不同的实现方法也可以针对不同的环境优化。另外,服务采用的方法可能随时间而变化。客户机可以确信服务对象了解服务是如何实现的。因为客户机就是通过查找服务从服务那儿取得这个服务对象的。对于客户机来说,不管服务是如何实现的,任何服务看起来都是公开的接口。
因此,Jini shi试图提升分布式系统编程的抽象级别,从网络协议级别提升到对象接口级别,在越来越多嵌入式设备的加入,分布式系统可能来自不同的供应商。Jini让供应商不需要依附于一种底层网络协议(这种协议让他们的设备互联)。相反,供应商只需要在互联设备的高层Java接口层上达成一致就可以了。讨论的级别从网络协议层提升到对象的接口层。可以让供应商更加集中于高层的概念而非拘泥在基层细节中。Jini讨论的高层问题可以使类似产品的供应商达成一个一致协议,来描述他们的服务是如何和客户机交互。
除此之外,Jini体系允许软件开发者在开发分布式系统时享受接口与实现分离的便利。
1 良好的设计的对象接口使软件开发者在大规模的分布式系统项目中更加有效协同开发,对象接口对面向对象程序的各个部分之间签订了合同,同样,对象接口也可以用来名曲大项目中团队成员之间的相互合作关系,他们每人负责一块程序。接口和实现分离的另一个好处就是,程序猿可以用它来减少变化带来的冲击,因为耦合度降低了。设计良好的对象之间结合的唯一途径就是他们的接口,是闲着在对象内部做的改变不会影响到其他对象中的代码。
通过分布式系统编程提升抽象层次和提供清晰的分离接口和实现,Jini带来了面向对象的好处,这都是Java对网络移动对象的支持,对象在网络上移动是,通过Java的底层结构,对象序列化,RMI来实现的,并通过Jini服务对象展示出来,这些技术给网络带来了巨大的好处。

4.6 网络移动性:Java设计的中心

0 0
原创粉丝点击