标题：JINI
一：Jini白皮书
什么是Jini?Jini可以使人们极其简单地使用网络设备和网络服务，就象今天我们使用电话一样---通过网络拨号即插即用。Jini的目标是最大限度地简化与网络的交互性。 
Jini利用了Java技术的优势。Jini包含了少量类库格式的Java代码和某些惯例，可在网络上创建一个Java虚拟机的"王国"，就象我们人类创造一个社区一样。在这个王国里的人、设备、数据和应用程序等网络公民均被动态地连接起来，从而能够共享信息和执行任务。 主要趋势---网络的普及这个世界正在网络化。例如，在今天，一个企业要想取得成功就必须建立网络。商业网络正在不断扩大，而且已经能够与供应商和客户实现直接交互。与无线网络的交互也几乎成为家常便饭。企业和消费者都要求能与网络进行更广泛的交流。出差在外的人无不希望在到达饭店后就能把自己的计算机插入网络接口，不但能与自己单位的工作环境进行交互工作，而且还能与饭店的本地服务，如打印机或传真机等进行交互工作。父母可能希望只需使用移动电话或笔记本电脑就能与家里的摄像机相连，通过它来察看家里的情况。人们无不希望随时随地能够连接和立即使用本地的定制服务。在不远的将来，我们将看到网络渗透到很多其它环境。例如，将会出现把电视机和立体声设备等音频/视频设备与家庭办公室的电脑和外设连接起来的网络，并控制安全监视器和温控恒温器等网络设备。电缆和ASDL等高带宽媒介将为家庭提供全新的服务。服务供应商不断为驾驶员提供越来越多的服务，网络也必将随之进入汽车领域。除导航系统外，游览景点和当地餐馆名单等本地服务也将出现在驾驶员的屏幕上。只要汽车与远程诊断设备相连，它就能自动完成对汽车的维护，并在汽车出现问题时通知驾驶员。商业机遇---网络服务Jini所能带来的商业机遇是新型的网络服务。 
例如，产品制造商将在基于网络的产品上提供新的服务。例如，磁盘可被看作与网络相连的存储服务，能向磁带和其它新型服务提供自动存储备份。联网的摄像机可能将提供诸如安全监视等新型成像服务。这些新的服务使制造商成为新型的网络服务供应商。 
Jini还能帮助传统的服务供应商提供新型服务。 
例如，某媒体服务供应商可能希望向某消费者的家庭打印机提供报纸打印服务。无线服务供应商可能希望通过蜂窝电话提供相似的服务。 
Jini还可简化对现有服务的管理。 
在隔天交货的情况里，Jini简化了分布在各处的工人与网络连通的方式。在个人银行里，基于Jini的计算机和外设可简化分行的系统管理。对于无线服务供应商，Jini可使蜂窝电话具备类似于电话的网络功能：屏幕大小、处理能力、使所提供的服务根据每一部电话的特点而专门设计。问题是，在今天的环境中，联网还是太复杂了。例如，无论是把PC连接到网络上，还是使用联网的打印机都非常复杂。只有经验丰富的系统管理员才有能力处理装载驱动程序、设置配置文件等复杂的工作。显然，我们不可能指望一般消费者也能管理今天这样复杂的网络。 
今天的网络还很脆弱和很不灵活。对网络稍加改动就可能造成不可挽救的大混乱。向网络中添加诸如磁盘存储等功能的过程也很复杂。例如，要想添加一个磁盘驱动器，我们就必须打开机箱，处理设置跳线器，并解决一系列复杂的设置问题。即使专家也会头疼。 
实际上，从消费者的角度看，他们所需要的只不过是把硬件和软件插入联网的环境，并立即就能使用可用的服务：就象我们今天插接电话一样。在今天，当消费者从商店购买一部电话后，他不必对电话进行配置。消费者只需给电话服务供应商打一个电话，服务就会送上门。最后，消费者只需把电话插好，就能使用电话服务了。自主的联网。 Jini的价值Jini的作用就是能简化与网络的交互性。 
从消费者的角度看，消费者把可插接的设备和软件插入网络，就像今天插接一部电话一样简单。 
从传统服务供应商的角度看，Jini简化了Services Delivery (服务提供)的管理。设备不但能向网络推出增值服务，而且还能提供设备的属性和功能。现在，服务供应商可以针对每台设备设计服务。当然，Jini还将有可能打开一扇通向新的网络化服务的大门。 
从产品制造商的角度看，Jini打开了全新的市场。因为Jini简化了设备向网络提供增值服务的能力。所以，产品就不仅仅作为商品而投入竞争，而是作为增值服务的产品参与竞争。 
从Java程序员的角度看，Jini简化了编写分布式应用程序的工作，因而，任何Java程序员都能利用基于Jini的新设备编写应用程序和服务。因此，企业不再需要聘用有限的专家资源编写分布式应用程序，任何Java程序员都能为基于Jini的网络开发服务。 Jini的起源Bill Joy在1994年之前向Sun公司实验室提交了一份包括以下三个主要概念的建议书： 
可在所有平台上运行的语言运行该语言的虚拟机，和允许分布式虚拟机像单一系统那样工作的网络化系统到1995年，这种语言和虚拟机相继面市，即Java编程语言和Java虚拟机。但该系统的概念则仍保留在Sun公司的研究与开发实验室，作进一步的研究和开发。这个系统的概念就是Jini。 
Jini战略部署与合作伙伴Sun公司部署了广泛的战略，力求将Jini推向市场。我们可以这样说，Jini与任何向网络化环境提供产品和/或服务的企业都密切相关。这包括传统的设备制造商、服务供应商和软件开发商。 
Jini将如何进行授权？ 
为推动Jini的进一步创新，使其尽快被市场所接受，Jini源代码将象Netscape公司的Mozilla模型一样向所有开发商公开。为确保兼容性和质量，正在考虑对商业产品进行标记。围绕授权方式的很多具体细节目前仍在最后确定过程之中。拟议中的授权草案将于今年8月公布。 
Jini技术概述
Jini技术可划分为两个范畴：体系结构和分布式编程。此外，还将提供在Jini上运行的网络服务。 基础结构Jini基础结构解决设备和软件如何与网络连接并进行注册等基本问题。 
基础结构的第一种要素称作Discovery and Join (发现与联合)。Discovery and Join解决设备和应用程序在对网络一无所知的情况下如何向网络进行首次注册这样的难题。 
基础结构的第二个要素是Lookup (搜索)。Lookup可被看作网络中所有服务的公告板。 
Network Services ---网络服务Other Services ---其它服务Leasing ---租用Transactions ---交易Distributed Event---分布式事件Other OS ---其它操作系统Other CPU ---其它CPU DISCOVERY AND JOIN 设备或应用程序插入网络后需要完成的第一个任务就是发现该网络，并使网络发现该设备或应用程序。我们之所以使用Discovery and Join这样的说法，是因为设备或应用程序事前不可能对网络有任何了解。 
Discovery的工作原理如下： 
当基于Jini的设备插入网络后，它就通过一个众所周知的端口向网络发送一个512字节的多路广播Discovery包。在其它信息中，该包包含对自己的引用。 
Jini Lookup在众所周知的端口上进行监听。当接收到Discovery包后，Lookup就利用该设备的接口将Lookup的接口传递回插接的设备或应用程序。 
现在，该设备或应用程序已经发现了该网络，并准备将其所有特性上载到Jini Lookup。上载特性是Discovery and Join中Join这方面的特性。 
现在该设备或应用程序使用在Discovery阶段所接收到的Lookup接口与网络相连。上载到Lookup的特性包括该设备或应用程序所提供的所有增值服务(如驱动程序、帮助向导、属性等)。 
LookupLookup是网络上所有服务的网络公告板。Lookup不但存储着指向网络上服务的指针，而且还存储着这些服务的代码和/或代码指针。 
例如，当打印机向Lookup注册时，打印机将打印机驱动程序或驱动程序接口上载到Lookup。当客户机需要使用打印机时，该驱动程序和驱动程序接口就会从Lookup下载到客户机。这样，就不必事先把驱动程序装载到客户机上。 
打印机还可能把其它增值服务装载入Lookup。例如，打印机可能存储关于自己的属性(如它是否支持postscript，或它是否为彩色打印机)。打印机还可能存储可在客户机上运行的帮助向导。 
如果网络上没有Lookup，则网络就会使用一个Peer Lookup (对等Lookup )程序。当需要服务的客户机在网络上找不到Lookup时，Peer Lookup就开始工作。在这种情况下，客户机可发送与Lookup所用的相同的Discovery and Join包，并要求任何服务供应商进行注册。随后，服务供应商就会在客户机上注册，尽管那不是Lookup。分布式编程Jini分布式编程为Java增添了创建分布式系统所必需的其它功能。尤其是Jini分布式编程可提供租用、分布式交易和分布式事件。 
租用租用与租用一套公寓很类似。我们在租用一套公寓时，一般会商定使用该公寓的时间。类似地，在Jini中，对象彼此之间商定租期。例如，当某设备使用Discovery and Join协议发现网络时，它就注册一段租用时间。在租约到期之前，该设备必须重新商定租期。这样，如果租约到期或设备拔下后，该设备在Lookup中的记录就会被自动删除。这就是分布式垃圾收集的工作原理。 
分布式事件在单一的计算机中，事件肯定能被接收方接收到，序列也肯定能按照顺序进行。 
但在分布式环境中，分布的事件可能不是按照顺序被接收，或者，某个事件还可能丢失。 
为便于在Java环境中处理分布的事件，Jini为分布的事件提供了一个简单的Java API。例如，当一个分布的事件发生时，该事件都带有一个事件号和序列号。利用这种信息，接收方就能检查事件是否丢失(序列号丢失)或事件是否按照顺序接收(序列号顺序不对)到。 
分布式交易在分布式Java环境中，有时需要一种很简便的方法，来确保在整个交易完成之前，在该交易中发生的所有事件都被真正提交了（两阶段提交）。 
为便于进行此类分布式计算，Jini提供了一种简单的Java API。该API可使对象起动一个能管理交易的交易管理器。每个参与交易的对象都向交易管理器注册。 
当交易发生时，如果某个参与的对象说，交易中的某个事件没有发生，则此信息就被送回交易管理器。随后，交易管理器就告诉所有参与的对象回滚（rool back）到前一个已知状态。类似地，如果所有对象都完成了其交易的过程，则整个交易就向前进行。 
Jini上的网络服务在Jini基础结构和分布式编程之上，可提供便于分布式计算的网络服务。JavaSpace就是这样的一种网络服务。