一、概述

  Sun公司开发的Jini系统是一种创新技术,听说它的人很多但较少被人理解。Jini系统可利用Java扩展网络计算的范围,并有可能成为最佳解决方案。

  Jini是Sun公司的研究与开发项目,它能极大扩展Java技术的能力。Jini技术可使范围广泛的多种硬件和软件即可与网络相连的任何实体--能够自主联网。 Jini可以使人们极其简单地使用网络设备和网络服务,就象今天我们使用电话一样--通过网络拨号即插即用。Jini的目标是最大限度地简化与网络的交互性。 Jini利用了Java技术的优势。Jini包含了少量类库格式的Java代码和某些惯例,可在网络上创建一个Java虚拟机的"王国",就象我们人类创造一个社区一样。在这个王国里的人、设备、数据和应用程序等网络公民均被动态地连接起来,从而能够共享信息和执行任务。

  Jini 在1999年初正式发布后,立刻得到业界的广泛支持。Jini的出现为Java网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。它把网络上的各类设备(包括消费类电子设备如移动电话、PDA、DTV、HPC、NC、游戏机、电冰箱、智能卡等等)和各种软件组合成一个单一、动态的分布式系统,使网络更易于操纵、易于管理,具有更高的可配置性。Jini将使网络具有自发性,它的出现大大扩展了"计算"和"计算机"的含义,极大地简化了网络操作。Java和Jini不仅可以不依赖于Windows为代表的操作系统,而且引导着信息产业的潮流,使Sun公司能在未来的、非PC类电子产品的数字化市场中强占制高点。

  二、Jini有关概念及特点

  1、Jini的五个基本概念

  概念的简明是Jini的目标之一。Jini支持的自发创建群体及自修复等能力,都是基于五个基本的概念,理解了这些概念,也就明白了Jini的使用。

  这些概念是:发现(Discovery); 查找(Lookup);租借(Leasing);远程事件(Remote Event);事务(Transaction),它们以一组软件库和规范的形式实现,可被Jini群体中的参与程序使用。

  发现是用于寻找网络中群体并加入它们的过程,是Jini完成自发创建群体功能的部分。

  查找是控制提供某个特定服务所需要的程序如何把自己提供给使用服务的参与者的方式。查找在每个Jini群体中的作用相当于目录服务,它提供用于寻找一个群体中已知服务的功能。但查找的功能实际上要比名字服务器复杂得多,名字服务器只是把字符串映像到对象上,而Jini的查找软件可理解Java的类型层次,因此查找操作可在对象类型的基础上进行,而且在搜寻过程中甚至还可以考虑到类的继承关系。

  租借是Jini中最重要的概念之一,原因只是由于它被广泛地使用。租借技术使Jini具有自修复能力,它保证了一个群体在某些关键服务失败的情况下,一段时间之后可以恢复。租借还保证了长时间运行的服务(如查找服务)不会"积累"其群体的信息,若没有租借,长时间运行的服务会无限制地增长。

  远程事件是Jini服务彼此通报状态的变化所采用的范型。因为查找本身是一类服务,所以在一个群体可用的服务发生变化时,它可以利用远程事件方式通知相关的参与者。Jini的远程事件模型与JavaBeans的事件模型相似,但不完全相同。

  事务是Jini使包含多个服务的计算到达一个"安全"状态的机制。这里的意思是,调用者可以得到保证,计算要么全部完成,要么都没有进行,无论哪种情况,系统都到达一个确知的状态。Jini的事务模型可以消除分布式系统中部分失败所带来的危害,从而解决并行性问题,极大改善了服务的健壮性,使服务对网络故障有更大弹性。

  2、Jini与名字服务器、JavaBeans、EJB、RMI、分布式操作系统关系

  1) Jini不是名字服务器

  Jini并不是一个简单的名字服务器。尽管Jini的一些行为,如跟踪一个群体中的服务,看起来像是名字服务器,而且Jini使用的Jini查找工具,功能也类似于(不完全相同)名字服务器,但Jini并不仅仅如此。它是一个用于创建分布式系统的模型,可支持服务在一个群体中自发地出现或消失,而且在系统出错时具有自修复能力。

  2) Jini不是JavaBeans

  JavaBeans提供了一种方法,使得软件构件(称为Bean)可以彼此找到,可以使用其他Beans提供的服务,相互内省等等。但JavaBeans的设计核心与Jini完全不同, Beans需要在单地址空间中使用, Bean之间使用的通信机制是基于直接方法调用,而不是远程协议。Beans的模型在灵活性和动态性方面都远不如Jini。当一个新的Bean出现在系统中时,应用中已有的Bean不能立即感知到它并使用它,系统的设计者必须明确地把这个Bean链入应用中并建立与其他Bean的连接。JavaBeans主要是用于设计时而不是运行时,在单地址空间中使用;Jini是用于运行时,跨地址空间工作(这并不是说Jini和JavaBeans不兼容,相反,Jini可以在很多方面优化JavaBeans)。

  3) Jini不是企业JavaBeans

  类似地, Jini也不是企业JavaBean(EJB)。从表面上看, EJB具有一些Jini的特征,它提供了网络上的服务的概念。企业Bean可以存在于不同的地址空间,并且一般也是如此。但是EJB设计的核心是集中于企业级系统,依靠Java软件来构成企业应用的后端事务逻辑。EJB主要用于支持简便地构造事务逻辑,优化企业网络中已有的事务、消息及数据库服务,因此EJB被大量地用于配置企业软构件之间相对静态路径。只要系统的逻辑不发生变化,也就不需要重新组织Bean之间的连接。同样,
EJB是在设计时决定如何连接,而相反Jini是动态的,它在运行时发现服务并在运行时连通它们。

  4) Jini不是RMI

  Jini与Java RMI不同。Jini很大程度上使用了RMI,尤其是在Jini可移动代码的功能上,可以说Jini就是建立在RMI基础上的一组服务和规范。尽管如此, Jini的服务还具有自发连网和自修复能力,虽然也可以(工作量很大)把这些功能加入到通常的RMI应用,但是它们不是RMI本身所具有的,通常的RMI应用也不具有这些优点。

  5) Jini不是分布式操作系统

  最后一点,Jini不是分布式操作系统。从有些方面看,它要比分布式操作系统大,因为有些部分必须运行在至少提供JVM的平台上,而从另外的角度看,它又小得多, Jini所提供的工具以及所使用的概念十分有限。真正的分布式操作系统提供了传统操作系统的所有服务(文件读写、CPU调度、用户登录等),只不过是在一组互连的机器上实现这一功能。Jini允许十分简单的设备加入到Jini群体,而不是要求设备必须运行一个完全的分布式操作系统。

  3、Jini使用场合

  1)适于使用Jini的情况:从技术或市场的角度来看一下,在哪些情形下使用Jini比较合适,可以归结为以下几种情况:

  如果有了Jini服务(或计划中的),设备或软件服务会通过使用这些服务变得更加有用,此时使用Jini比较合适。例如假设你出售扫描仪,你发现一些小的Jini软件服务可提供图像到E-mail或图像到传真的网关,扫描仪可方便地使用这些服务增强自身功能,使它看起来可以直接扫描e-mail消息或传真。通过使用Jini,你从创建这些服务的开发者那里获益,或者从根本上说,你使那些开发者成为了你自己的开发者。

  如果设备可使已有的其他Jini服务(或计划中的)增值,选用Jini比较合适。例如,假设你在市场上出售打印机,同时你看到有数字相机进入了市场,选用Jini就可以使打印机设备方便地成为数字像片的输出设备。

  如果设备已有了嵌入式Java 或一般是连接到通用计算机上,那么加入Jini应该是不必犹豫的。一旦设备支持Java或连到计算机,支持Jini所需的其他工作就很少了,但潜在的好处十分巨大。

  如果软件服务运行在可运行Java虚拟机的通用计算机上,那么可以方便地为服务创建一个Jini外壳使之在Jini中可用。这是Jini的一大好处:可以方便地编写小的粘合逻辑(glue logic),使整个软件服务(甚至非Java的服务)对于其他的Jini设备和服务都是可访问的。

  如果软件服务可以方便地被分解为固定的多个部分,那么把各部分表示成一个Jini服务是比较合理的。例如,企业级的文档管理系统可能具有文档存储仓库、文档服务引擎、查询引擎等多个组成部分,通过为各个部分创建单独的Jini服务,可以获得很多好处。首先,可以按需要把各部分方便地转移到其他机器。其次,系统具有了冗余特性,在需要某个服务的备份时,只要再复制运行一份即可。第三,由于体系结构开放,使扩展变得十分容易。

  如果要创建一个通常要连到其他设备的设备,那么Jini可能是用于控制这些连接的可用技术。例如,一组音响设备的各组成部分通常要用数据线进行连接,如果使用Jini是前置放大器知道哪些设备是必需的、输入的各级是如何连接的,并能正确地配置各种控制,岂不是很好?

  最后,如果设备具有编程能力的好处,Jini也是比较好的方案。因为Jini支持程序下载,可编程的设备在Jini中就可得到及时更新。更妙的是,它们可自动控制其Jini群体中的其他设备,例如对于一个集中的MIDI控制面板,当有鼓设备被加入时,面板中可自动增加一个控制鼓设备的用户界面。

  随着越来越多的设备和计算机支持Java,越来越多的设备和软件系统彼此相连, Jini将成为管理这些连通性的更符合逻辑的方案。而且,如果设备已支持Java或已连到通用计算机系统,添加Jini只是小事一桩,这将大大鼓舞要采用Jini的用户。

  2)不适于使用Jini的情况

  因为Jini的设计可覆盖十分广泛的部署方案,包括从服务器到电灯开关的多种设备,因此很少有Jini不适用的硬件环境,但也有一些因素会导致为设备添加Jini在价格上不合算。

  首先,如果设备确实是独立的,即没有连线连接设备,或者设备在网络上但根本不会有其他实体会使用它,则Jini不太适用。但现在越来越少的设备是真正独立的了,这样的设备令人无法忍受。

  如果设备附近没有具有JVM的设备,而且此设备十分便宜不能嵌入JVM,则Jini不是可选的方案。在设备参与到Jini的过程中,必须有Java的存在。

  4、Jini的特点

  Jini的作用就是能简化与网络的交互性。

  从消费者的角度看,消费者把可插接的设备和软件插入网络,就像今天插接一部电话一样简单。

  从传统服务供应商的角度看,Jini简化了Services Delivery (服务提供)的管理。设备不但能向网络推出增值服务,而且还能提供设备的属性和功能。现在,服务供应商可以针对每台设备设计服务。当然,Jini还将有可能打开一扇通向新的网络化服务的大门。

  从产品制造商的角度看,Jini打开了全新的市场。因为Jini简化了设备向网络提供增值服务的能力。所以,产品就不仅仅作为商品而投入竞争,而是作为增值服务的产品参与竞争。

  从Java程序员的角度看,Jini简化了编写分布式应用程序的工作,因而,任何Java程序员都能利用基于Jini的新设备编写应用程序和服务。因此,企业不再需要聘用有限的专家资源编写分布式应用程序,任何Java程序员都能为基于Jini的网络开发服务。

  三、Jini技术

  Jini是一种分布式结构体系,它由三部分组成:基础结构、分布式编程和提供在Jini上运行的网络服务。

  1、动态的分布式系统

  Jini系统是以Java技术为中心的分布式系统,它可以使各种数字设备无需配置、安装或人工干预地在一个临时的设备集合(称之为联邦)中共同工作。联邦中的任何设备无论大小都可以自行管理,组成一个服务网络,联邦中的每一成员都给联邦中的其它成员提供资源和服务,同时又从其它成员中获取自己所需的资源和服务。Jini结构提供一套机制使得电子设备和应用程序能够随时加入或退出联邦,形成一个动态的分布式系统。

Sun开发的JINI技术在网络中的应用-LMLPHP

图1

  Jini系统提供了在分布式系统中进行服务的建立、查找、通讯和使用机制。Jini结构的设计充分利用了Java程序代码可以在机器之间移动的能力,各个服务之间通过提供服务协议(service protocol)进行通讯(服务协议是用Java语言写的一套接口)。Jini系统必须运行在Java虚拟机上,如上图1所示。

  每一个Jini设备都应该有自己的存储器和计算功能,没有存储器和计算功能的设备也能够联入Jini系统,但是必须由其它Jini设备作为代理(proxy)来控制,该代理可以是软件也可以是硬件。

  2、基础结构即插即用

  Jini系统的任意服务可以随时加入和退出联邦,而且加入联邦时不需要进行安装和配置,达到了即插即用的效果。无论是在编程接口级还是在用户接口级,服务都构成了Jini系统交互的基础。

  Jini系统的核心是三条协议:lookup ,discovery,join。它们构成了Jini技术的基础结构(infrastructure)。

  查找服务(Lookup service) 是Jini系统的中心机制,任何服务都是由查找服务发现并确定,系统用户与系统的联系也是通过查找服务实现的。查找服务相当于网络中所有服务的公告牌,它把指明某服务所提供性能的接口与实现该服务的对象集对应起来。查找服务中的对象也可以包含其它查找服务,从而构成层次式的查找服务。查找服务用于用户在网络中查找和调用服务,而服务是由它的接口类型(用Java编程语言编写)或其它属性描述的。

  某设备或应用程序插入网络时,它所提供的服务首先发现网络并被网络所接纳,这一过程需要通过发现协议(discovery)和加入协议(join):该服务首先通过发现服务在网络中找到一合适的查找服务,然后通过join协议加入查找服务。

  如图2所示,某一服务提供者需要加入Jini系统中(服务提供者提供的服务可以是硬件也可以是软件),它首先要寻找网络中的查找服务,于是它在局域网中广播,请求加入到查找服务中,附近的查找服务将识别该服务。这个过程称之为发现(discovery)。需要注意的是在服务提供者中包含有用于通讯的服务对象(service object)和描述该服务特点的服务属性(service attributes)。服务对象中包含Java接口,其中包括用户和应用程序所要调用来执行服务的方法,以及其它描述信息等。

Sun开发的JINI技术在网络中的应用-LMLPHP

图2 发现过程

  于是,服务提供者与查找服务进行通讯,服务提供者把自己的服务对象和服务属性注册到查找服务中,也就是把服务对象和服务属性发送到查找服务中。这个过程采用的是加入协议(Join),如图3所示。

Sun开发的JINI技术在网络中的应用-LMLPHP

图3 加入过程

  如图4所示,当Jini系统中的客户需要服务时,它根据服务的类型或属性向查找服务查询合适的服务,然后查找服务把查询的结果返回给客户,当客户决定使用某一服务时,查找服务将把所需服务的服务对象的拷贝发送给客户。

Sun开发的JINI技术在网络中的应用-LMLPHP

图4 查找过程

  如图5所示,客户通过该服务对象与服务提供者进行直接联系,调用服务。服务对象与服务提供者之间的私有协议,对用户隐藏了实现的细节。

Sun开发的JINI技术在网络中的应用-LMLPHP

图5 服务过程

  

  在没有查找服务的情况下,客户可以使用一种替代的技术,称为点查找(Peer lookup)。这种情况下,客户可以发出与查找服务所用的同样的鉴别包,请求服务提供者进行注册。服务提供者将把客户当作查找服务来进行注册。然后客户可以从所有的注册请求中选择它所需要的服务,而抛弃不需要的服务。这种情况实质上是客户临时充当查找服务。

  3、分布式的编程模式

  Jini系统的编程模式也是分布式的,包括租用(leasing)、分布式的事务处理(distributed transactions)和分布式的事件处理(distributed events)三种重要机制。

  租用机制使客户对服务的访问是基于租约的,租约保证了一段时间内的授权访问。租约必须在服务的使用者和服务提供者之间进行协商,这也是服务协议的一部分。租约在到期之前不续约的话,资源将被释放。租约可以是唯一的,也可以不是唯一的,非唯一租约允许多用户共享资源。

  一系列的操作都包装在一个事务中,而不管这些操作是在一个单一服务内还是跨越多个服务。Jini的事务接口提供了一服务协议用于协调两阶段提交(two-pahse commit)。事务由使用这些接口的服务实现。

  Jini结构支持分布式事件,一个对象可以允许其它对象注册对此对象感兴趣的事件,并且在该事件发生时得到通知。这使得基于事件的分布式程序能以有多种可靠性和扩展性保证的方式编写。

  基础结构是编程模式的基础,同时也利用了编程模式的各种机制。某一服务若想加入到查找服务中,它必须租用查找服务中的入口,因而查找服务就能够准确反映当前所有的服务。如果有服务加入或离开查找服务,相应的事件就会发生,而所有对此类事件感兴趣并注册过的对象将得到通知。编程模式建立在由基础结构所支持的代码移动性能之上。

  基础结构以及使用该基础结构的服务都是存在于Jini系统实际环境中的计算实体。服务使用了一组接口,这些接口定义了可以在服务和基础结构之间通讯的通讯协议。这些接口结合在一起就构成了Java语言编程模型的分布式扩展,也就是Jini编程模型。Jini与Java的关系如图6所示。

Sun开发的JINI技术在网络中的应用-LMLPHP

图6 Jini是Java在分布式环境中的扩展

  Jini系统中服务之间的通讯主要是通过远程方法调用(RMI)来实现。RMI是传统的远程过程调用机制在Java语言中的扩展,RMI既可以把数据也可以把代码封装成对象在网络上进行移动,大部分Jini系统的简单性就是这样实现的。

  Jini系统安全模型的设计是以两个概念为基础的:负责人和访问控制列表。被访问的Jini服务往往代表着某些实体负责人--通常能追溯到系统中的特殊用户。某一服务可以请求访问其他服务,由与实现该服务对象相连的访问控制列表决定。

  Jini系统的关系如图7所示。

Sun开发的JINI技术在网络中的应用-LMLPHP

图7 Jini结构层次

  4、Jini上的网络服务

  在Jini基础结构和分布式编程之上,可提供便于分布式计算的网络服务。JavaSpace就是这样的一种网络服务(有关JavaSpace服务说明我将在下一篇《JavaSpace应用》文章中给予详解)。

  基础机构、服务和编程模型的结合,其共同工作的设计以及相互构造的特点,使得整个系统简单化、统一化、易于理解。

  5、基本Jini服务的需求

  我们知道Jini结构的许多关键部分就是Jini服务本身,运行这些服务需要一定的条件。Jini为自身的服务定义了接口,而非实现;因此Jini服务的实现不同,需求也不同了。例如,一个查找服务可能建立在完整的商业数据库基础上,需要JDBC的支持;而另一个查找服务可能要使用内存中的hash表。尽管我们不能统一确定这些基本服务到底需要什么样的实现,但可以讨论所需的最少功能,这是构件接口所需的功能需要。虽然Jini把两种服务定义为最基本的服务:查找服务和事务管理器,但查找服务相对更加重要。除开特殊的事务管理器带来的一些特殊要求,查找服务可在任意环境中运行,其情形和前面讨论的"普通"服务相同。

  Sun目前提供的查找服务的参考实现,实际上是基于运行Java的通用计算机。但更精简的查找服务完全可运行在功能低得多的平台。尽管你可能仍希望在服务器计算机上运行查找服务以减少停机时间,但你完全可以简化查找服务使其不再基于Java。最简单的查找服务对主机平台的基本需求是要求平台支持基于套接字的IP组播的网络传输,发现协议使用此协议寻找查找服务,而查找服务可以响应。查找服务给出的响应是一个序列化的Java对象,即客户端可用来连回查找服务的服务代理。这个对象可在运行Java的机器上进行"预先序列化",查找服务本身就没有必要运行序列化了。当这个预先序列化了的对象被放置到查找客户端时,它可以使用任意协议,按需要的传输方式回调查找服务。

  作为Jini的"自引导"服务,查找服务对平台的需求很低,只要对连网的设备稍作扩充即可。

  四、Jini技术在网络中应用

  Jini技术的出现为数字化电子设备和现有计算机网络之间的连接构筑了一条通道,各种电子设备的联网将产生许多服务,生成新的经济增长点,推动计算机产业和信息家电产业的发展。

  家庭网络广阔的市场前景吸引了众多的IT商家参与其中,许多顶级的公司对于家庭网络技术标准的制定做出了应有的贡献。当前家庭网络的互操作标准主要有Home API工作组的API规范、CIC下属的互操作委员会制定的HPNP(HomePNP) 规范、HAVI规范、SUN公司的JINI技术规范等。

  Home API工作组成立於1998年,其主要目标是建立一种开放性工业标准以加速家庭智能化信息电器的应用,该工作组在本年度会议CONNECTIONS '99上发布了Home API规范, API 的任务是如何为上层的应用程序提供组件服务和提供什么样的服务,API通常定义相应的编程模型和功能调用方法,它的重点在于在单台设备上为编程提供相应的接口,如两个设备上的API可以是完全不同的,而位于它上层的应用程序可以借助不同的API提供的服务通过下层一致的协议实现通信,
其重点并不在于设备之间的互操作性。

  HPnP规范是由CIC的互操作技术委员会(Interoperability Technical Committee)完成的。规范的1.0版本是于1997年8月份发布的,HPnP是一种互操作规范,它独立于网络的下层技术和协议,运行于多种网络协议之上,来自不同厂家的产品可以在同一网络上相互通信,实现即插即用功能。

  HAVI是家庭网络的音频、视频设备互操作规范,它采用了基于IEEE1394标准的网络技术,当一新的设备加入或离开时,网络的配置会自动更新,使得网络内部的设备具有良好的互操作性,如使用相应的桥接协议(bridge protocol)可以实现与JINI系统设备的相互操作。

  Jini和蓝牙技术的结合应用在通信环境中有以下优点:首先,不需要网络连接线;其次,不需要安装设备驱动程序,再次,一个设备远程控制另一个设备。这些特点使得网络更容易连接和管理。虽然蓝牙技术进一步发展,Jini是SUN公司的免费产品,很容易掌握应用编程接口,并可进行分布式计算。随着蓝牙技术和Jini技术规范的布、不断推广与相互结合,生活中各种电路的互连将变得愈来愈方便,Jini的即插即用功能和蓝牙的无线连网使得设备的增减变得非常简单,使网络的建设可以分阶段逐步完善而不必一次到位,满足了一般用户的需求。Jini技术和蓝牙的结合,必将进一步推动信息无线网络的快速发展,成为信息网络又一重要应用领域,将极大地改变人们的生活方式,促进普适计算时代的到来。

04-17 13:42