[转载]拥抱Jini:从Starter Kit 2.0开始(第一部分)

拥抱Jini:从Starter Kit 2.0开始(第一部分)


Jini代表着分布式计算技术的深刻革命,其目的是通过对分布式资源的高效处理,将网络逐渐变成一个方便灵活且易于管理的工具, 这样用户或任何其它可计算实体在Jini系统中都能够很方便地发现对其有用的资源,从而完成各种分布式计算。本文第一部分介绍了Jini的基本概念和实现 原理,在本文的第二部分作者将介绍借助Jini Technology Starter Kit v2.0如何开发基于Jini的软件系统。

Jini代表着分 布式计算技术的深刻革命,其目的是通过对分布式资源的高效处理,将网络逐渐变成一个方便灵活且易于管理的工具,这样用户或任何其它可计算实体在Jini系 统中都能够很方便地发现对其有用的资源,从而完成各种分布式计算。本文第一部分介绍了Jini的基本概念和实现原理,在本文的第二部分作者将介绍借助 Jini Technology Starter Kit v2.0如何开发基于Jini的软件系统。

为何求助Jini?

从 计算机诞生那天起,在如何更好地将计算机互连起来以便充分利用各种资源这一问题上,人们从来没有停止过辛勤探索的脚步。从大型机到PC机,从局域网到广域 网再到后来的Internet,整个世界似乎经历了一次网络化的大洗礼。现在,随着嵌入式设备的大量使用,无所不在的网络和无所不在的计算 (everything connecting, everywhere computing)又在逐渐将人类带入一个崭新的信息社会。

一 切都非常令人兴奋,并且随之而来各种电子设备的互联也将成为一种必然的趋势。今后,与人们生活息息相关的各种家电设备都能够联成网络并接入 Internet,人们可以在任何时间、任何地点统一控制各种家电,让它们协同工作,从而将极大地影响和改变目前的生活方式。比如,在将电视机接入 Internet后,你就可以通过电视机来浏览网页,获取所需的信息;又比如,你可以在下班前一小时,通过Internet控制家里的电饭煲和微波炉开始 工作,这样当你到家时晚饭已经做好了;再比如……

可问题是现在联网还是太复杂了,无论是要把一台PC机连接到网 络上,或者是使用联网的打印机,都是一件非常困难的事情,至少对一般的消费者来讲是这样。而类似安装驱动程序、修改配置文件等"专业性"的工作,更加只有 那些经过严格训练并且经验丰富的系统管理员才有可能胜任。另一方面,目前的网络还相当脆弱,并且很不灵活,仅仅只对某些关键部件稍加改动很可能就会造成网 络的一片混乱。而像添加磁盘驱动器这类看似非常简单的事情,管理员也必须先打开机箱,设置跳线,并解决一系列复杂的软件设置问题。

解 决这个问题的办法是提出一种全新的分布式计算概念,使得任何设备无需预先配置和安装,便可在任何时间任何地点加入网络,并且能和网络中已有的各种软硬件一 起协调工作完成计算。正是在这一思想的指引下,产生了Jini这一新的分布式计算平台,Jini的设计理念就是要让用户在使用计算机周边产品或嵌入式电器 时,能像使用电话一样方便。 从消费者的角度看,如果你想安装电话,只要申请到一个电话号码,再去买个电话机,然后把插头往墙壁上的插座一插,拿起话筒听到嗡嗡声后就可以正常使用了, 不需要对电话进行任何配置。Jini的目标正是要在可靠性、可配置性和可管理性等方面达到类似于电话系统那样的水平,使得任何硬件或者软件只要进入网络这 一大环境,就能够立即使用所有可用的服务,而不需要那么多烦琐的配置过程。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


Jini是什么?

Jini 是以Java技术为核心的分布式系统,它通过使用一个简易的"即插即用"模型,能够随时改变硬件或者软件的配置,从而提供了一个支持快速配置的分布式计算 环境。Jini的迷人之处在于它能够使各种数字设备无需配置、安装或者人工干预,就能够在一个临时的称为服务联盟(federations of services)的设备集合中共同工作。联盟中的任何设备无论大小都可以自行管理,共同组成一个服务网络,联盟中的每一个成员都可以为其它成员提供资源 或服务,同时又可以从其它成员那里获取自己所需的资源和服务,Jini提供一套完善的机制使得硬件设备或者软件组件能够随时加入或者退出联盟。

Jini 是一个主动的、响应式的分布式基础结构,它提供了在分布式环境中进行服务的建立、查找、通讯和调用的一整套机制。Jini技术被设计成可以运用在任何有能 力连入网络的器件上,而不论该器件运行什么软件或运行在哪种硬件设备之上。Jini技术是以网络器件中的一个构件的面貌出现的,它为器件如何连入网络、共 享信息和与网络进行互操作建立了一套规则,而同时又保持了对用户的完全透明。Jini本身与平台无关,采用它的器件不再受到所用软件、处理器、设备驱动 器,或传统网络协议的制约,其唯一要求只是一个能够运行Java字节码的虚拟机,如图1所示。


图1 Jini运行环境
图1 Jini运行环境

提出Jini这一体系结构的目标是将成组的硬件设备和软件组件联合成一个单一的、动态的分布式系统,联合后的网络系统更加易于管理和使用,同时在保持单机的灵活性、统一响应和控制的情况下,还能够支持由系统提供的共享能力。Jini这一体系结构中有几个非常重要概念:

  • 服务(Service)
    服务是一个独立的功能实体,它可以被人、程序或者其它服务使用。服务这一概念在Jini中包括的内涵非常丰富,它可以是一次计算过程或者存储操作,也可以 是和另一个用户交流的通道,甚至可以是一个硬件设备或者另一个用户。Jini系统中成员间的联盟是为了对服务进行共享访问,一个Jini联盟不应被简单地 看成是客户机和服务器的集合,而应当看作是组合到一起完成某个特定任务的服务集合。Jini提供了相应的机制,能够在分布式系统中实现对服务的构造、查 找、通信和调用,同时还提供了一套服务协议来负责服务间的通信。
  • 客户(Client)
    Jini中的客户是需要利用服务的硬件设备或软件组件,Jini的目标是支持尽可能多的异构客户,包括各种硬件设备和软件平台。
  • 查找服务(Lookup Service)
    是Jini中的一种服务协议,它允许软硬件发现网络并变成联盟中的成员,同时将所提供的服务广播给联盟中的其它成员。

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


Jini如何工作?

一个完整的Jini系统由基础设施(Infrastructure)、编程模型(Programming Model)、服务(Services)三个部分组成,其体系结构如图2所示。


图2 Jini系统架构
图2 Jini系统架构

3.1 基础设施

基础设施用来定义基于Jini的硬件设备和软件组件如何连接并注册到网络,它包括以下四个组成部分:

  • Java RMI扩展实现  这是Jini系统中的构件在通信时所采用的底层通信机制。
  • 分布式安全系统  用来将Java平台的安全模型扩展到分布式Jini系统,并定义联盟成员的使用权限。
  • 发现/加入(Discovery/Join)协议  是一种服务协议,允许软硬件发现网络并成为联盟的成员,同时将所提供的服务广播给联盟中的其它成员。
  • 查找(Lookup)服务  是网络中所有服务的公告牌(bulletin board),用来展示联盟中的所有成员,并且帮助使用者在联盟中寻找所需的资源和服务。

Jini 基础设施负责实现添加、删除、定位和访问服务的相关机制,它通常驻留在网络中的三个地方:在查找服务中;在服务提供者中;或者在客户中。Jini基础设施 的核心是Lookup、Discovery和Join三条协议,它们使得基于Jini的任何服务都可以随时加入或者退出联盟,并且在加入联盟时无需进行安 装和配置,从而达到了即插即用的效果。

查找服务(Lookup Service) 是Jini体系结构中的基本组成部分,它负责在分布式系统中提供对服务的中央注册机制。一旦进入Jini的世界,如果想找到所需的服务就必须通过查找服 务,此外,查找服务还是为管理员和用户提供各种访问接口的基础。在一定程度上你可以将查找服务看成是网络中所有服务的公告牌,它维护着各个服务所提供的功 能接口与实现该服务的对象集间的映射关系。Jini中的客户通过使用查找服务在分布式网络中查找和调用所需的服务,而查找服务中的对象本身可以包含其它查 找服务,从而构成层次式的查找服务。

当硬件设备或者应用程序进入网络时,它所提供的服务如何被Jini发现并接 纳,并进一步成为整个Jini分布式系统中的某项服务,需要经过两个必不可少的重要步骤。第一步是找到系统中的查找服务,这个过程称为发现 (Discovery),所用到的协议是发现协议。第二步是将自己注册到查找服务中,这个过程称为加入(Join),描述这个过程的协议是Join协议。 一个Jini服务只有在成功完成了这两个步骤之后,才能正式成为联盟中的一员,并开始向外界提供相应的服务。

在Jini 这一分布式计算环境中,服务提供者所提供的服务既可能是硬件也可能是软件。当某一服务提供者需要加入到Jini系统中时,它首先必须找到网络中的查找服 务,于是它在局域网中进行广播,请求加入到查找服务中。附近的查找服务在收到相应的请求后负责识别并接纳该服务,整个过程称之为发现,如图3所示。需要注 意的是,服务提供者必须包含用于通讯的服务对象(service object)和描述该服务特点的服务属性(service attributes)。


图3 发现过程
图3 发现过程

当查找服务找到之后,服务提供者将与查找服务直接进行通讯,把自己的服务对象和服务属性注册到查找服务中,换句话说就是把服务对象和服务属性发送到查找服务中去。这个过程称为加入,如图4所示。


图4 加入过程
图4 加入过程

一旦服务被成功地加入到查找服务中后,如果Jini系统中的客户需要使用该服务,它可以根据服务的类型或者属性向查找服务查询合适的服务,查找服务负责把查询后的结果返回给客户,当客户决定使用该服务时,查找服务还会将该服务对象的拷贝发送给客户,如图5所示。


图5 查找过程
图5 查找过程

Jini 客户从查找服务那里获得的服务对象是一个Java接口(Interface),其中包括用来调用服务的方法名称和参数,以及其它一些描述信息。Jini客 户通过获得的服务对象与服务提供者进行直接联系,获得相应的服务。服务对象负责处理客户与服务提供者之间的通信,从而向用户隐藏了服务的具体实现细节,如 图6所示。


图6 服务过程
图6 服务过程

3.2 编程模型

Jini是一个分布式的计算环境,其编程模型自然也是分布式的,编程模型在Jini的体系结构中占有非常重要的地位,其基础设施正是借助这一编程模型有机地结合在了一起。Jini的编程模型主要包括下面几个方面:

  • 租用(Leasing)
    在分布式系统中有一个非常严重的问题,那就是不能保证服务不突然崩溃。例如,当一台数字相机通过查找服务加入到Jini网络中时,将对外发布信息表明自己 可用且一切正常,但如果此时用户在不正常关闭设备的情况下随意将相机拔掉,相应的问题就产生了。因为对联盟中的其他成员来说,此时它们无法判断是相机所连 接的远程主机已经关掉,还是响应速度比较慢,或是相机本身产生了故障。 为了解决这个问题,Jini使用了一种称为租用的技术。租用的基本思想是:不再保证可以在任意长的时间内访问资源,而是只能在一段固定时间内将资源"借给 "某使用者。租用机制使得客户对服务的访问是基于租约的,租约保证了一段时间内的授权访问,租约必须在服务的使用者和服务提供者之间进行协商。租约在到期 之前如果不续约的话,相应的资源将被释放。租约可以是唯一的,也可以不是唯一的,非唯一租约允许多用户共享同一资源。
  • 分布式事件(Distributed events)
    和Java类似,Jini也使用事件的概念来处理异步通知,事件可以被理解成是一个包含外部状态变化信息的对象。例如,当鼠标状态在AWT中发生变化时, 不论是移动、点击还是释放,都将产生一个MouseEvent事件,事件产生后将被直接发送到希望得到该信息的相关实体(Listener)。Jini的 事件模型和Java的非常类似,但它同时还能够支持分布式事件。Jini的编程模型允许一个对象注册对其他对象感兴趣的事件,并且在该事件发生时能立即得 到相应的通知,这就使得基于事件的分布式程序能以有多种可靠性和扩展性保证的方式编写。
  • 事务(Transaction)
    分布式计算中另一个非常棘手的问题是部分失败,所谓部分失败指的是整个计算过程中的某一步产生了错误,或者计算所需的某个组成部分出现了故障。假如,银行 想在两个帐户间进行转帐,即从一个帐户中减去一定数量的金额然后加到另一个帐户上,是不是只要编写一段代码实现从A帐户中减去一定的金额,然后再用另外一 段代码实现向B帐户中加入同样的金额就可以了呢?看起来似乎没有什么问题,但实际上却存在非常严重的错误,如果资金从帐户A转出之后机器就崩溃了,很明显 B将永远无法得到,而产生这一问题的根本原因就是没有考虑到程序可能会部分失败。 Jini通过引入事务的概念解决了部分失败这一问题,事务是将一系列相关操作进行分组,以保证所有操作要么全部成功,要么全部失败的一种方法。采用事务的 好处是无论在执行过程中出现什么情况,系统都将进入一个确定的状态,这样处理起来就相对容易多了:事务成功则继续进行,事务失败则稍后再试。事务最早出现 在数据库理论中,目前已经出现了许多实用的事务模型,Jini中采用的是两阶段提交(two-phase commit)这一事务模型。

3.3 服务

Jini的基础设施和编程模式使得服务能够在分布式环境中被注册和发现,并能够向用户宣布自己的存在。服务是Jini体系结构中一个非常重要的概念,它可以用来表示组织在一起形成Jini联盟的各个实体,这里所指的实体可以是硬件、软件或者软硬件的结合。

Jini 中的每个服务都有一个接口描述,该接口定义了客户可以向这个服务请求的所有操作,并且反映了服务的类型。Jini中的服务是可以聚合的,即允许一个服务由 多个子服务组合而成。整个Jini体系结构中最重要的一个服务是查找服务,它是Jini基础设施的一个子组件,其它作为Jini体系结构组成部分并实现为 Jini服务的对象包括:

  • JavaSpace  为Jini中的对象提供了一个可选的分布式持续性保存机制,并能够被用来进行简单的通信。
  • 事务管理器  为Jini中的对象提供分布式事务服务,允许对象参与到由编程模式所定义的两阶段提交协议。

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


怎样启动Jini?

Jini 目前还处于研发的早期阶段,因此迄今为止还没有哪个Jini实现系统声称它可以真正投入实际使用,自然也就没有完全遵循Jini规范的服务或者设备出现。 尽管如此,Jini试图去解决的问题对许多软硬件厂商来讲已经非常急切了,因此Sun公司给出了一个Jini的参考实现系统:Jini Technology Starter Kit,它可以从 http://wwws.sun.com/software/jini/下载到,目前的最新版本是2.0。

从Sun 公司的网站下载到Jini Technology Starter Kit Version 2.0的源码包jini-2_0-src.zip后,将其解压缩到d: jini2_0目录下。由于Jini建立在一系列其他服务的基础之上,因此在正式启动Jini之前还必须先对这些服务进行配置,Jini Technology Starter Kit开发包中集成了一些支持Jini运行所必需的基本服务:

  • HTTP服务器
    在通过RMI下载代码时,需要利用HTTP协议完成传输,因此在运行Jini时需要一个HTTP服务器。Jini Technology Starter Kit带有一个非常简单的HTTP服务器,但它对于供在应用程序间传送代码已经完全足够了。通常情况下,需要在每个供其他应用程序下载代码的机器上运行一 个HTTP服务器。
  • RMI激活守护进程
    这是Jini Technology Starter Kit基础结构中非常实用的一个部分,它使得那些很少被调用的对象基本保持在"睡眠"状态,在需要时又能够被自动"唤醒"。RMI激活守护进程负责管理对 象在活跃和非活跃状态间的切换,并被其他Jini运行时核心服务所调用,它至少应该在查找服务所处的主机上运行。
  • 查找服务
    查找服务才是Jini的核心,它负责记录网络中当前激活的所有服务。尽管JDK中的RMI注册服务也可以作为查找服务使用,但不推荐使用,Jini Technology Starter Kit中提供的查找服务具有更加丰富和完善的功能。当出现故障或重新启动之后,查找服务需要依靠RMI激活守护进程来恢复其状态,因此在运行查找服务的机 器上必须同时运行RMI激活守护进程。

    Jini Technology Starter Kit v2.0在它的tools.jar包中自带了一个HTTP服务器,你可以在d:jini2_0script目录下创建一个内容如下的批处理文件来启动它:

    清单1:start-httpd.bat
    @rem 启动HTTP服务器的批处理文件
    java -jar lib ools.jar -port 8080 -dir lib -verbose

    缺省情况下,HTTP服务器将 运行在8080端口,但如果此时系统中已经有一个Web服务器运行在8080端口了,那么可以用"-port"参数把Jini的HTTP服务器指定到另外 的端口。参数"-dir"可以用来设置HTTP服务器的根目录,在上面的例子中将其设置为Jini的lib目录,这样做的好处是Jini的核心代码可以被 直接下载。最后那个参数"-verbose"是用于调试的,它要求HTTP服务器显示所有来自客户端的请求信息以及这些请求的来源。

    RMI 激活守护进程rmid是由JDK所提供的,它必须在可激活对象所在的每一台主机上运行,其中包括Jini查找服务、事务管理器和JavaSpace。如果 你已经成功地配置好了JDK,那么可以在d:jini2_0script目录下创建一个内容如下的批处理文件来启动它:

    清单2:start-rmid.bat
    @rem 启动RMI激活守护进程的批处理文件
    rmid -J-Dsun.rmi.activation.execPolicy=none

    Jini Technology Starter Kit v2.0中查找服务的实现是Reggie,它位于reggie.jar包中,启动这个服务比启动其他服务要稍微复杂一些。首先在d:jini2_0 config目录下为Reggie创建一个内容如下的安全策略文件:

    清单3:all.policy
    /* 安全策略文件 */
    grant codeBase "file:lib${/}*" {
    permission java.security.AllPermission;
    };

    接着在d:jini2_0config目录下为Reggie创建一个内容如下的启动配置文件:

    清单4:start-reggie.config
    /* 启动Reggie查找服务的配置文件 */
    import com.sun.jini.config.ConfigUtil;
    import com.sun.jini.start.NonActivatableServiceDescriptor;
    import com.sun.jini.start.ServiceDescriptor;
    com.sun.jini.start {
    private static codebase =
    ConfigUtil.concat(
    new Object[] {
    "http://",
    ConfigUtil.getHostName(),
    ":8080/reggie-dl.jar" });
    private static policy = "config${/}all.policy";
    private static classpath = "lib${/}reggie.jar";
    private static config = "config${/}reggie.config";
    static serviceDescriptors =
    new ServiceDescriptor[] {
    new NonActivatableServiceDescriptor(
    codebase,
    policy,
    classpath,
    "com.sun.jini.reggie.TransientRegistrarImpl",
    new String[] { config })
    };
    }

    最后再在d:jini2_0config目录下为Reggie创建一个内容如下的配置文件:

    清单5:reggie.config
    /* Reggie查找服务的配置文件 */
    import net.jini.jrmp.JrmpExporter;
    com.sun.jini.reggie {

    serverExporter = new JrmpExporter();
    initialMemberGroups = new String[] { "example.jini.sun.com" };
    }

    为了简化Reggie查找服务的启动,可以在d:jini2_0script目录下创建一个内容如下的批处理文件:

    清单6:start-reggie.bat
    @rem 启动Reggie查找服务的批处理文件
    java -Djava.security.policy=configall.policy -jar libstart.jar configstart-reggie.config

    这样在需要启动HTTP服务器、RMI激活守护进程或者Reggie查找服务时,只用在命令行方式下依次执行下面的命令就可以了:

    D:jini2_0> start scriptstart-httpd
    D:jini2_0> start scriptstart-rmid
    D:jini2_0> start scriptstart-reggie

    在Jini的世界中,所有可用 的资源都被看成是服务,而对服务的查询和检索则是最频繁的操作之一,为此Jini Technology Starter Kit v2.0专用提供了一个实用工具Browser,利用它可以查询当前Jini网络中的所有服务。为了简化Browser的启动,可以在d: jini2_0script目录下创建一个内容如下的批处理文件:

    清单7:start-browser.bat
    @rem 启动Browser的批处理文件
    java -Djava.security.policy=configall.policy -Djava.rmi.server.codebase=
    http://%computername%:8080/browser-dl.jar -jar librowser.jar

    现在只要在命令行方式下依次执行下面的命令就可以启动Browser了:

    D:jini2_0> start scriptstart-browser

    正如前面介绍过的,查找服务是Jini中的一项特殊服务,因而此时如果Reggie查找服务已经正常启动了,那么可以在Browser中查询到它,如图7所示。为了监视Jini查找服务的运行状态,你可以让Browser一直运行下去。


    图7 查询Jini服务
    图7 查询Jini服务

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


小结

Jini 在很大程度上改变了人们对网络的看法,它以Java技术为依托,把网络上的各种硬件设备和软件组件联合成单一的、动态的分布式系统,从而使网络更易于操纵 和管理,并具有更高的可配置性。Jini的目标是将所有可以联网的软硬件资源组织成一个完全自发的网络,使网络中不再需要手工的设备配制、驱动安装等专业 性较强的工作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130160/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130160/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值