分布式系统中对象的延迟重组和事件通知的远程装载的制作方法

文档序号:6418915阅读:145来源:国知局
专利名称:分布式系统中对象的延迟重组和事件通知的远程装载的制作方法
技术领域
本发明涉及分布式系统机器间传送对象的系统和方法,具体来说,涉及分布式系统事件通知对象的延迟重组。
背景技术
利用远程终端访问和文件传送的专用协议,往往可足够并高效率地处理专注于点对点数据传输的分布式程序。可就某一程序专门裁剪这些协议,这些协议所提供的并非建立不同分布式程序(例如分布式操作系统、电子邮件系统、计算机会议系统等)的基础。
当常规传送服务可用作建立分布式程序的基础,这些服务显示出许多组织问题,例如在不同机器中用不同的数据类型,缺乏同步措施,对简单编程规程无规定。
分布式系统通常包含通信网络互联的若干不同类型的机器。每一计算机具有其本身的内部数据类型,其本身的地址定位规则,以及其本身的操作系统。在建立分布式系统时,这种异种机带来问题。结果,程序开发人员在为这些异机种分布式系统开发的程序中必须加入确保信息在不同机器上得到一致的处理和解释这种处理能力。
但通过注意到在初始化程序(即对通信进行初始化的程序)受阻并一直等到应答返回从而这段时间处于闲置状态这种情况下,大部分的程序在进程间采用请求和应答的交互来实现一个简化。这可以由进程间的进程调用机制来建立模型。这种机制其中之一称为远程进程调用(RPC)。
RPC是在相同机器或不同机器上运行的2个进程(例如程序、小应用程序等)之间提供同步通信的机制。在一简化例子中,一个进程例如客户程序将一消息发送至另一进程,例如服务器程序。在此例子中,不论发送消息还是接收消息对该进程来说均无需同步。对于客户程序可以传送消息,然后开始新的活动,或对于服务器程序环境可以缓存进来的消息直到服务器程序准备好处理新消息。
但RPC对同步设置了限制,因为其紧密地模仿本地进程调用,这需要在一个方向上传递参数,阻止该调用进程(例如客户程序)直到服务器程序所调用的进程完成,然后返回一应答。RPC这样便包含2个消息传送,和2个进程在调用期间的同步。
RPC机制通常按采用本地进程调用规程的2个处理部分实施,一部分位于客户侧,另一部分位于服务器侧。下面参照

图1说明这两者的诸多部分。
图1是利用RPC机制调用信息的流程图。如图1所示,客户程序100发出一调用(步骤102)。该RPC机制101接着将该调用封装为调用数据包的形式参数(步骤103),RPC机制101接着将其传送给服务器程序109(步骤104)。该调用数据包还包含信息以识别第一个发送调用的客户程序100。调用数据包传送(步骤104)后,RPC机制101便进入其等待服务器程序109应答的等待状态。
服务器程序109的RPC机制108(当服务器程序109位于与客户程序100相同的平台上时可以为与RPC机制101相同的RPC机制)接收调用数据包(步骤110),从该调用数据包当中将该调用形式参数解包(步骤111),利用调用信息识别调用所针对的服务器程序109,并将调用形式参数提供给服务器程序109。
服务器程序接收该调用(步骤112),通过启用合适的进程(步骤115)对该调用进行处理,并返回一应答给RPC机制108(步骤116)。该RPC机制108接着在一应答数据包中封装该应答(步骤114),并将它发送给客户程序100(步骤113)。
接收应答数据包(步骤107)触发该RPC机制101来退出等待状态,并从应答数据包当中将应答解包(步骤106)。RPC101接着响应该调用将应答提供给客户程序100(步骤105)。这是模仿本地进程调用规程的典型RPC机制的方法流程。因为RPC机制采用本地进程调用规程,因而客户程序100在调用时被阻止直到接收到应答为止。这样,客户程序100在发送该调用后不继续其本身的处理,而是等待服务器程序109的应答。
JavaTM编程语言是一种面向对象的编程语言,典型地利用字节代码指令集汇编为与平台无关的格式,可在支持Java虚拟机(JVM)的任何平台上执行。该语言在例如一本James Gosling,Bill Joy,和Guy Steele著,Addison-Wesley于1996年出版的名称为“Java语言规范”的教科书有说明,通过引用归并于此。JVM在例如一本TimLindholm和Frank Yellin著,Addison Wesley于1996年出版的名称为“Java虚拟机规范”的教科书中有说明,通过引用归并于此。Java和基于Java的商标均为太阳微系统公司在美国等国家内的商标或注册商标。
因为JVM可以在任何种类的平台上实施,所以实施采用JVM的分布式程序显著地降低与异机种分布式系统程序开发相关的难度。而且,JVM采用支持系统程序间通信的Java远程定义法启用(RMI)系统。RMI在例如可由通用资源定位器(URL)http//java.sun.com/products/jdk/1.1/docs/guide/rmiTOC.doc.html所提供的文献“远程定义法启用规范”(太阳微系统公司于1997年出版)中有说明,并通过引用归并于此。
图2是示意包括利用JVM传送和接收定义法启用的机器201和202在内的面向对象分布式系统200中对象的流程图。系统中200中,机器201用RMI205通过将对象变换为包括对所传送对象类型的识别和构成对象数据在内的字节流207来应答对对象203的调用。机器201应答对对象203的调用时,系统200中不论运行在相同还是另一机器上的进程均可以在不等待对其请求应答的情况下继续工作。
机器202接收字节流207。机器202通过利用RMI 206来自动地将其变换为相应的对象204,这是对对象203的复制,并通过在机器202上执行程序使得对象可用。机器202还可以通过将该对象先变换为字节流再将它送至也自动将字节流变换为相应对象的第三机器,将对象传送给另一机器。
按此方式由字节流对对象进行自动重组,有时需要进行不必要的处理。例如,有时进行一调用时不要求与对象的实际或直接交互,两者均需要将字节流变换为对象形式。而调用则可以要求将对象传递给另一调用或将它存储用于以后用途。在这种情况下,特别是对象将要传送给另一机器的话,在中间机器上重组对象没有必要的。这种情况的例子包括分布式系统中通知事件对象的传送。因而,希望在对于对象来说无用的中间机器上没有不必要的字节流至对象的变换,或接收机器上的进程需要访问对象前没有过早的字节流变换的情况下,更为高效地在分布式系统中传送对象。
发明概述本发明方法规定一种分布式系统内与特定事件通知请求相关的对象。该对象变换为一包含该对象自述形式的数据流,一旦发生该事件通过访问该数据流中标识的程序代码来重组对象的情况下,便提供该位流用于有选择地传送给机器。
本发明另一方法在第一机器处接收一包含分布式系统内与特定事件通知请求相关的对象其自述形式的数据流。该方法包括确定是否将该数据流发送给第二机器和通过访问该数据流中标识的程序代码来有选择地将数据流发送给用于重组对象的第二机器,第一机器提供该事件的通知。
本发明装置规定一种分布式系统内与特定事件通知请求相关的对象。该装置将对象变换为一包含该对象自述形式的数据流,一旦发生该事件通过访问该数据流中标识的程序代码来重组对象的情况下,便提供该位流用于有选择地传送给机器。
本发明另一装置在第一机器处接收一包含分布式系统内与特定事件通知请求相关的对象其自述形式的数据流。该装置确定是否将该数据流发送给第二机器和通过访问该数据流中标识的程序代码来有选择地将数据流发送给用于重组对象的第二机器,第一机器提供该事件的通知。
附图简要说明合并于本说明书并构成其一部分的附图,与说明书一起说明本发明的优点和原理。附图中包括图1是说明采用RPC机制的调用信息的流程图;图2是面向对象的分布式系统中传送对象的说明图;图3是本发明一实施例中可采用的示范性分布式处理系统的示意图;图4是一示范性分布式系统架构的示意图;图5是图4所示的分布式系统架构中计算机的示意图;图6是本发明分布式处理系统内对象的流程图;图7是本发明实施例中利用对象组成远程代码的装载的分布式系统中传送对象所执行步骤的流程图;图8是本发明分布式系统中传送对象时使代码装载和对象组成延迟所执行步骤的流程图;图9是说明事件通知的分布式网络图;以及图10是分布式网络内事件通知进程的流程图。
详细说明概况本发明系统采用RPC或RMI的变形高效地传送对象,分别位于不同机器上从一个对象至另一对象传递形式参数并返回数值。在这些例子中,希望将对象重组和与这些对象重组相关的代码下载一直延迟到该程序需要为止。前后文中所用的术语“机器”指物理机器或虚拟机器。在相同物理机器上可存在多个虚拟机。RPC系统的例子包括分布式计算环境(DCE)RPC和微软分布式共用对象模型(DCOM)RPC。
如何通过使自述数据流成为本系统第一类实体来实现此系统的例子,是指存在于编程语言的典型系统内,并且可被那种语言编写的指令访问和操纵。数据流典型地是一字符序列,例如能够传送的位图,而且自述字节流是包含足够信息的字节流,这样它可以变换回相应的对象。
称为“集结对象”的对象包括自述数据流。这种集结对象可典型地由从一地址空间传递至另一地址空间的任何对象产生,它们可以被存储,传递至其他对象,或用于根据需要重组原始类型的对象。利用集结对象的优点在于,对象的重组一直延迟到对集结对象访问的进程调用利用集结对象创建对象时。需要在对象上操作的任何代码下载延迟到采用集结对象来产生对先前用于产生集结对象的原始对象的复制。
因而,在不用对象的情况下,不是将它存储以用于后面的检索或与另一进程一起传递,RMI不下载对象重组所需要的代码。这会在时间和代码存储空间两方面带来相当的效益。
事件通知例如会通过利用集结对象而发生。对于事件通知,机器利用一设备登录来接收分布式网络内对特定事件的通知。设备将登录请求与集结对象一起传送给一事件发生器,它对于后面可能的传送存储集结对象。若事件发生,事件发生器将包括集结对象在内的对事件的通知发送给事件监听器。事件监听器可以重组集结对象,它可以包含与事件有关的信息。事件监听器可以与请求通知的设备相同。事件包括例如对象状态或其发生的变化。分布式系统中事件的具体例包括但不限于下列由键或光标控制设备进行“点击”;在显示器上叠加视窗;连接网络的设备;登录到网络上的用户;以及特定用户动作。
分布式处理系统图3示出本发明实施例中可用到的示范性分布式处理系统300。图3中,分布式处理系统300包含连接在网络云319所代表的网络配置中的3个无关的异机种平台301、302和303。另外,仅用3个平台只是便于说明,并不限制本发明实施例采用特定数目的平台。而且,具体的网络结构对于本发明实施例并非决定性的。例如,本发明实施例中可采用的另一网络结构会采用一个平台作为所有其他平台与之连接的网络控制器。
分布式处理系统300实施例中,平台301、302和303分别包括处理器316、317和318,以及存储器304、305和306。各个存储器304、305和306中分别包括应用程序307、308和309,操作系统310、311和312,以及RMI部件313、314和315。
应用程序307、308和309可以是先前编写并修改为一起工作,或专门编写利用本发明实施例所提供服务的优点的应用或程序。应用程序307、308和309启用按照本发明实施例所要执行的操作。
操作系统310、311和312分别是与相应的处理器316、317和318相联系的标准操作系统。平台301、302和303可以是异机种。例如,平台301具有一由太阳微系统公司制造的UltraSparc微处理器作为处理器316,并采用一Solaris操作系统310。平台302具有一由硅图形公司制造的MIPS微处理器作为处理器317,并采用一Unix操作系统311。最后,平台具有一由Intel公司制造的Pentium微处理器作为处理器318,并采用一微软Windows 95操作系统312。本发明实施例并不限于此,也可以适应同机种平台。
Sun,Sun Microsystems,Solaris,Java和SunLogo均属于美国和其他国家中太阳微系统公司(Sun Microsystems Inc.)的商标或注册商标。UltraSparc和所有其他Sparc商标均是在许可下使用的,为美国和其他国家内的SPARC国际公司的商标。标注有SPARC商标的产品基于太阳微系统公司开发的结构。
存储器304、305和306起到几个功能,例如作为对相关平台的总体存储。另一功能是在各自的处理器316、317和318执行期间存储应用程序307、308和309,RMI部件313、314和315,以及操作系统310、311和312。另外,存储器304、305和306部分可以构成对网络319中所有平台301、302和303均可利用的共享存储器。注意RMI部件313、314和315均与JVM结合在一起工作,但为了简化示意图未示出JVM。
分布式系统架构本发明系统和方法还可以工作于特定的分布式系统400,下面参照图4和图5并对此加以说明。分布式系统400包含不同部件,包括硬件和软件,(1)允许系统用户在许多设备的网络上共用服务和资源;(2)向程序员提供允许开发健壮、安全的分布式系统的工具和编程模式;以及(3)简化分布式系统监管任务。要实现这些目标,分布式系统400采用Java编程环境以允许代码和数据两者均以无缝方式在设备间迁移。因而,分布式系统400平铺在Java编程环境的顶部上面,实施包括由此提供的安全性和健壮型在内的此环境特性。
图4和图5的分布式系统400中,不同计算机和设备结合形成为,对用户来说所显现的是单个系统。通过表现为单个系统,该分布式系统400在不放弃个人计算机或工作站灵活性和个性化响应的前提下,提供单个系统所能提供的对访问的简化以及共享能力。分布式系统400可以包含地理上分散但认同基本信任、系统管理以及政策的诸多用户所操作的数千个设备。
位于分布式系统100内的是对一个或多个设备所提供的服务进行不同的逻辑分组,每一这种逻辑分组称为Djinn。“服务”是指能够为用户、程序、设备或另一服务访问的,并能够计算、与存储有关、与通信有关、与向另一用户提供访问有关的资源、数据或功能程序。作为Djinn部分提供的服务例包括诸如打印机、显示器和盘这类设备;诸如应用程序或实用程序这类软件;诸如数据库和文档这类信息;以及系统用户。
用户和设备均可以加入Djinn。当加入Djinn时,用户或设备便向Djinn增加0或更多的服务,在安全约束下可以访问其所包含的任意一种服务。这样,设备和用户结合形成为一Djinn来共享对其服务的访问。该Djinn的诸多服务在程序设计上表现为Java编程环境的诸多对象,它们可以包括其他对象、按不同编程语言写成的软件部件、或硬件设备在内。一服务具有一接口,定义可由那种服务请求的诸多操作,该服务类型确定组成那种服务的诸多接口。
分布式系统400包含网络408互联的计算机402、计算机404和设备406。设备406可以任意个数的设备,例如打印机、传真机、存储设备、计算机等其他设备。网络408可以是一局域网、广域网或互联网。虽然仅说明2个计算机和1个设备组成分布式系统400,但本领域技术人员会理解,分布式系统400可包括另外的计算机或设备。
图5更加具体地示出计算机402来表示分布式系统400的若干软件部件。本领域技术人员会理解,计算机404或设备406可以相类似配置。计算机402包括存储器502、第二级存储设备504、中央处理单元(CPU)506、输入设备508以及视频显示器510。该存储器202包括查询服务512、发现服务514和JavaTM运行时系统516。该Java运行时系统516包括Java远程定义法启用系统(RMI)218和Java虚拟机520。第二级存储设备504包括JavaSpace522。
如上文所述,示范性的分布式系统400基于Java编程环境,因而利用Java运行时系统516。该Java运行时系统516包括Java API程序库,允许Java运行时系统顶部上面运行的程序按与平台无关的方式访问包括主机操作系统视窗能力和联网能力在内的不同系统功能。因为Java API程序库对移植Java运行时系统的所有操作系统提供单个公用API,因而不论是主机平台的操作系统还是硬件配置,运行于Java运行时系统顶部上面的各程序均按与平台无关的方式运行。Java运行时系统516作为位于加州景山的太阳微系统(Sun Microsystems)公司可供给的软件开发套件当中的部分来提供。
Java虚拟机520也有利于平台的无关性。Java虚拟机520象一抽象计算机那样运作,按字节代码形式从程序当中接收指令,并通过动态地将它们变换为诸如目标代码这种执行形式来解释这些字节代码,并执行它们。RMI 518通过允许在一个计算机或设备上执行对象来有利于远程定义法启用,在另一计算机或设备上撤销一对象的诸多方法。RMI和Java虚拟机也作为Java软件开发套件的部分提供。
查询服务512定义对一特定Djinn可供给的诸多服务。也就是说,在示范性分布式系统400内可以有超过1个的Djinn,因而有超过1个的查询服务。该查询服务512在Djinn内每一服务包含一个对象,每一对象则包含有利于访问相应服务的种种方法。查询服务512及其访问在前面已通过引证归并的发明名称为“有利于访问查询服务的方法和系统”这一共同待审的美国专利申请中有说明。
发现服务器514当有新设备加入到示范性分布式系统400时,在称为启动和加入(或发现)的处理期间进行检测,当检测有这一新设备时,发现服务器便向查询服务512传递一指向该新设备的引用,以便该新设备可将其服务与查询服务一起登录并成为Djinn一员。登录后,新设备成为该Djinn一员,从而可以访问查询服务512中包含的全部服务。该启动和加入处理在前面已通过引证归并的发明名称为“分布式系统中提供可下载代码用于与设备通信的装置和方法”的美国专利申请中有说明。
JavaSpace522是示范性分布式系统400中诸多程序用来存储对象的对象资源库。诸多程序利用JavaSpace522来持久地存储诸多对象,并使之可由示范性分布式系统400中的其他设备访问。Java空间(Java space)在已通过引证归并的发明名称为“利用多形态入口和入口匹配的数据库系统”、于1997年11月17日申请并转让给共同受让人的美国专利申请U.S.Ser.No.08/971,529中有说明。本领域技术人员会理解,示范性分布式系统400可包含许多查询服务、发现服务和Java空间。
分布式处理系统中的数据流图6是连接机器601、602和603(例如为在一个或多个计算机上执行的计算机或虚拟机,或参见图3说明的机器)的面向对象分布式系统600的示意图。发送机601包括的存储器604存储诸如对象605及606和对该对象执行处理的RMI 607这种对象。要在网络600上发送一对象,RMI607采用将对象605变换为作为字节流608发送至机器602的集结对象的代码609。包括输入数据流和输出数据流在内的Java编程语言所用的数据流是本领域公知的,其说明出现于例如通过引用归并于此的Mark Campione和Kathy Walrath著、Addison-Wesley于1996年出版的书名为“Java指导互联网面向对象的编程”的教科书(pp.325-53)。
这种变换的部分包括增加信息,以便接收机602可重组对象。当对象类型集合受到限制并且所有机器601、602和603上的均相同时,接收机典型地需要对象的状态和其类型的描述,因为对象代码已经出现在所有网络机器上。作为替代,机器601利用RMI 607来提供更高的灵活性,在需要时允许代码与信息或对象的状态和种类一起移动。另外,发送机在集结对象中包括对所发送对象的类型的识别,构成对象状态的数据以及与对象相关代码的URL形式的可通过网络访问的位置。URL在本领域众所周知,其说明出现于例如通过引用归并于此的Mark Campione和Kathy Walrath著、Addison-Wesley于1996年出版的书名为“Java指导互联网面向对象的编程”的教科书(pp.494-507)。
当接收机602接收字节数据流608时,便识别所发送对象的类型。机器602包含其本身处理对象的RMI610和代码611。若字节数据流608包含集结对象,机器602可以采用集结对象中标识的对象类型、状态信息和对象代码来创建新对象614。对象614是对象605的复制,存储于机器602的存储器613中。如果代码612不驻留在机器602上或无法提供,而且集结对象不包含该代码的话,RMI610利用集结对象的URL对代码进行定位,将复制的代码传送给机器602。若对象被解除集结通常只需要代码612。因为代码是字节代码格式进而可移植,所以接收机器可将代码装载到RMI610来重组对象。这样,即使那种对象以前从未在该机器上出现,机器602也能重组相应类型的对象。
机器602还可以将对象614变换为传送至第三机器603用的字节数据流615,它包含其本身处理对象的RMI618和代码619。RMI618采用该对象代码620将字节数据流615变换为存储于存储器617中相应的对象616。对象616是对象605的拷贝。若对象的代码620未驻留或无法提供,机器603便如上文所述请求采用URL的另一机器的代码。
机器602可以在不重组对象的情况下作为替代存储集结的对象作为字节数据流。它接着可以将字节数据流发送给机器603。
集结对象集结对象是一种对象的容器,允许对象作为RMI调用中的一个参数被传递,但使接收机器对集结对象的变换一直延迟到接收机器上执行的程序清楚地经过对该集结对象的调用而请求对象。容器是一种封装,包括支持传送对象的数据和对象的代码或对该代码的引用,封装还保持了发送的对象。当RMI调用中按相同语义请求作为参数传递时,集结对象所含的可串行对象典型地串行化或解除串行。串行化是一种将对象的存储器内部表示变换为相应的自述字节数据流的进程。解除串行是一种将自述字节数据流变换为相应对象的进程。
要将一对象变换为集结对象,将该对象置于集结对象容器以内,当采用URL对对象代码进行定位时,URL加入到容器。这样,当从其集结对象容器当中检索所含对象时,若对象代码本地无法提供的话,加入到容器的URL便用于对对象类字节格式的代码进行定位和装载。
表1提供Java编程语言对本发明集结对象的示范性类定义。
表1package java.rmi;public final class MarshalledObject implements java.io.Serializable{public MarshalledObject(Object obj)throws java.io.IOException;public Object get()throws java.io.IOException,ClassNotFoundException;public int hashCode();public boolean equals();}可以在一制品内实现一集成对象,规定可计算机读出的存储介质中所存储对象的表现。
集结对象的开发人员将可串行对象当作其单个形式参数,并保持对象在字节数据流中的集结表现。对象的集结表现保留RMI调用中所传递对象的语义数据流中的每一类典型地用对象代码或指向该代码的URL注解,以便当对象通过对“get”定义法的调用重组对象时,可对每一类字节代码进行定位和装载,远程对象用它们的代理存根替换。“get(取)”定义法是一种由程序调用以执行解除集结的进程的定义法,属于利用自述字节数据流(集结对象)由集结对象重组对象,和获得那个进程所需代码的进程。代理存根是对重组对象用远程对象的引用。
当类集结对象的实例写入“java.io.ObjectOutputStream”,重组期间创建的所含对象的集结形式写入数据流。这样,只对字节数据流加以串行化。
当从“java.io.ObjectInputStream”读出集结对象时,所包含对象没有解除串行成为新对象。而是在其集结表现中维持该对象,直到调用集结对象的“get”定义法。
“get”定义法最好总是从其集结形式重组所含对象的新拷贝。内部表现采用解除RMI调用集结参数所用的相同语义来解除串行。这样,若本地无法提供,对对象表现解除串行便采用嵌入对象串行化数据流中的URL注记来装载类代码。
如集结对象的类定义所示,对象集结表现的散列代码定义为与对象本身的散列代码等效。总之,本领域知道,在散列表中用一散列代码来执行信息的快速查询。若对象的集结表现经比较等效的话,该等值方法将返回真状态。等值方法通过确定所重组对象是否与原始对象相同来验证重组,这些方法在Java编程语言中是公知的。
集结对象的传送图7是本发明分布式系统中最好在传送对象过程中所执行步骤700的流程图。机器接收一字节数据流(步骤701),它包括对象数据,识别对象类型的信息以及可选地为与对象相关代码的URL。接收机器确定对象代码是否驻留或可提供(步骤702)。若可提供,该机器最好采用RMI来根据字节数据流和驻留代码重组对象(步骤704)。若代码并非驻留,机器采用字节数据流当中的URL来请求位于网络可存取位置的另一机器当中的代码,那机器返回代码的一个拷贝(步骤703)。对象还可以按字节数据流形式传送至另一机器(步骤705)。
图8是本发明分布式系统传送集结对象时希望执行以延迟代码装载和对象重组的步骤800的流程图。机器接收一字节数据流(步骤801),它包括对象数据,识别对象类型的信息以及可选地为与对象相关代码的URL。
该机器确定该字节数据流是否是集结对象(步骤802)。若不是这样一种对象,该机器便对字节数据流进行正常的处理(步骤803)。相反所接收字节数据流代表一集结对象的话,该机器便响应接收机器上一进程所启用的“get”定义法保持用于后面用途的集结对象。若接收机器确定对象要传送至另一机器(步骤804),便在不进行对象重组的情况下简单地发送字节数据流。若机器使用对象,便采用其RMI及其相关代码执行对象重组(步骤805)。若对象重组代码并非驻留在机器上,便如上所述采用URL来请求并获得代码(步骤806)。该机器确定需要将对象发送至另一机器(步骤807)。若对象注定用于另一机器,便作为字节数据流发送(步骤808)。
因而,集结对象提供分布式系统中更高效的对象传送。若机器需要对象,可对它重组,若机器不需要利用该对象,便可在不重组情况下发送集结对象。
事件通知中对集结对象的利用分布式系统或网络可以结合系统中对事件通知的登录利用集结对象。图9是说明事件通知的分布式网络900的示意图。网络900可以采用参照图3、图4和图5说明的机器。网络900包括具有RMI902和对象903的远程事件监听器901、具有RMI905和对象906的机器904、以及具有提供事件通知的RMI908和对象909的事件发生器907。机器904可以与远程事件监听器901相同,如虚线所示,或者可以是分开的机器。
希望通知特定网络事件的机器904由RMI908通过发送对包括集结对象912或与集结对象912相关的事件通知的请求来登录。事件发生器907存储用于可能的后面传送的集结对象。当RMI908检测出事件发生,便与集结对象913一起将事件通知发送给远程事件监听器901。为了获得对集结对象进行重组用的代码911,远程事件监听器901可以对会包含有关该事件信息的代码服务器910进行一调用。代码服务器是具有至代码入口、应答对特定类型或对象类的请求并将那对象代码返回的实体和进程。代码服务器可以定位在机器901内或另一机器上。而且,代码可以驻留在与代码服务器相同的平台上或分开的平台上。登录后,远程事件监听器901可以提供被检测时对特定事件的指示。
图10是分布式网络例如网络900内进程1000或事件通知的流程图。机器向存储集结对象用于可行的后面传送(步骤1002)的远程事件发生器发送包括一集结对象在内的登录请求(步骤1001)。该事件发生器确定事件是否发生(步骤1003),若检测出这种事件发生,便将包括所存储的集结对象在内的事件通知发送给一事件监听机器(步骤1004)。事件发生器依据特定判据或系统要求确定是否继续提供事件发生通知(步骤1005),。若如此便继续确定事件是否发生。这些步骤可以利用例如说明书中提供的表1-5所示的用Java编程语言编写的界面和类定义。
表2提供一例Java编程语言中实施一远程事件监听器的界面。
表2public interface RemoteEventListener extends Remote,java.util.EventListenervoid notify(RemoteEvent theEvent)throws EventUnknownException,RemoteException;表2所示界面中,通知定义法所具有的“RemoteEvent”类型的单个参数在工作期间用于封装作为通知一部分传递的信息。表3提供一例“RemoteEvent”类定义的公共部分定义。
表3public class RemoteEvent extends EventObject{public RemoteEvent(Object evSource,long evIdNo,long evSeqNo)public Object getSource();public long getID();public long getSeqNo();public MarshalledObject getRegistrationObject();}表3所示定义中,“RemoteEvent”对象所含的抽象状态包括一指向其中发生事件的对象的引用,标识相对于发生事件的对象事件种类的“long(长整数)”,以及表示事件种类这种实例的序号(“SeqNo”)的“long”。从“RemoteEvent”对象得到的序号是一增加数值,可以相对于较早的序号提供一关于事件发生数目的表示。
表4提供一例事件发生器Java编程语言的界面。
表4public interface EventGenerator extends Remote{public EventRegistration register(long evId,MarshalledObject handback,
RemoteEventListener toInform,long leasePeriod)throws EventUnknownException,RemoteException}表4中所示的登录方法允许对象以内事件发生中需关注内容的登录。执行此方法时,JVM所接收的包括是用于标识事件类的长整数的“evId”;作为通知一部分传送回来的对象;指向“RemoteEventListener”对象的引用;以及表示需关注内容登录租用期间的长整数。若“evId”提供给没有被事件发生器对象辨识的该调用,JVM便报出错信号。Java编程语言中,说成JVM将“EventUnknownException”“抛”出以发出出错信号。登录定义法的第二变元是相应类型事件发生时要作为通知一部分发送回来的集结对象。登录定义法的第三变元是一接收所发生事件种类的任何实例通知的远程事件监听器。此形式参数可以是正登录需关注内容的对象,或可以是例如第三方事件处理器或通知“邮箱”这种另一个远程事件监听器。对于登录定义法的最后形式参数是表示所请求的登录持续时间的“长”整型数,称为“租用”。
登录定义法的返回数值是一时间登录类定义的对象。该对象包含一识别时间种类的“长”整数,其中需关注内容相对于授予登录的对象、对授予登录的对象的引用以及包含有关租用期间信息的租用对象登录过。
表5提供一例事件登录Java编程语言的类定义。
表5public class EventRegistration implements java.io.Serializable{public EventRegistration(long eventNum,Remote registerWith,Lease eventLease,long currentSeqNum);public long getEventID();public Object getEventSource();public Lease getLease();public long currentSeqNum();}
表5所示的类定义中,“getEventID”定义法返回其中登录有需关注内容的事件识别符,其与“getEventSource”定义法的返回数值相组合唯一识别事件种类。信息提供给第三方资源库以允许它们辨识事件并对其进行正确的路由选择。JVM操作期间,“getLease”定义法返回这种登录的租用对象,并用于租用维护。“currentSeqNo”定义法返回事件种类序号数值,当授予登录时是当前的数值,允许与任何连续通知中的序号相比较。“toString”定义法可以与这种类定义一起采用,以返回人们可读出的包含组成对象状态信息的字符串。
执行图7、图8和图10所示步骤的机器可以包括执行如图3、图4和图5所示功能的计算机处理器。它们可以包括配置为使处理器执行上述功能的模块或程序。它们也可以包括存储器中存储的计算机程序产品。计算机程序产品可以包括计算机可读介质或嵌入计算机可读代码用以使计算机执行上述功能的介质。该介质可以包括用载波实现的计算机数据信号,并表示当处理器执行时通过执行本说明书中说明的方法使处理器可靠地按绝对地址对外围设备进行寻址的指令序列。该介质还可以包括用于执行说明书所说明方法的数据结构。
本发明系统的示范性实施例是参照在JVM规范上执行Java编程语言的计算机系统说明的,但本发明可等同地适用于处理不同编程语言代码的其他计算机系统。具体来说,可以利用面向对象编程系统和非面向对象编程系统来实施本发明。另外,尽管所说明的本发明实施例工作于Java编程环境,但本领域技术人员会理解,本发明也可以应用于其他编程环境。
虽然本发明是结合示范性实施例说明的,但会很清楚,许多修改对于本领域技术人员来说是显而易见的,本发明用于涵盖其任何调整或变形。在不脱离本发明保护范围的情况下,可利用例如集结对象的不同标记或定义。本发明应仅仅由权利要求及其等价物限定。
权利要求
1.一种包含多台机器的分布式系统中传送对象的方法,其特征在于,包括下列步骤规定一对象与用以在系统内通知一特定事件的请求相关;将该对象变换为一包含该对象自述形式的数据流;以及一旦事件发生便通过访问数据流中标识的程序代码重建该对象的情况下,提供用于有选择传送给机器的数据流。
2.如权利要求1所述的方法,其特征在于,该提供步骤包括在有选择传送之前存储数据流。
3.如权利要求1所述的方法,其特征在于,该变换步骤包括对未建封装的对象进行封装,并包括对于重建该对象用程序代码的引用。
4.一种包含多台机器的分布式系统中处理对象的方法,其特征在于,包括下列步骤在第一机器处接收一包含与用以在系统内通知一特定事件的请求相关的对象其自述形式的数据流;确定是否将该数据流发送至第二机器;以及有选择地将数据流发送至第二机器用以通过访问数据流中标识的程序代码重建对象,第一机器提供事件的通知。
5.一种包含多台机器的分布式系统中传送对象的装置,其特征在于,包括一模块配置为规定一对象与用以在系统内通知一特定事件的请求相关;一模块配置为将该对象变换为一包含该对象自述形式的数据流;以及一模块配置为一旦事件发生便通过访问数据流中标识的程序代码重建该对象的情况下,提供用于有选择传送给机器的数据流。
6.如权利要求5所述的装置,其特征在于,该提供模块包括一模块配置为在有选择传送之前存储数据流。
7.如权利要求5所述的装置,其特征在于,该变换模块包括一模块配置为对未建封装的对象进行封装,并包括对于重建该对象用程序代码的引用。
8.一种包含多台机器的分布式系统中处理对象的装置,其特征在于,包括一模块配置为在第一机器处接收一包含与用以在系统内通知一特定事件的请求相关的对象其自述形式的数据流;一模块配置为确定是否将该数据流发送至第二机器;以及一模块配置为有选择地将数据流发送至第二机器用以通过访问数据流中标识的程序代码重建对象,第一机器提供事件的通知。
9.一种包含多台机器的分布式系统中传送对象的系统,其特征在于,包括第一机器;第二机器;将第一机器与第二机器连接的网络;以及在系统中传送对象的装置,该装置包括一模块配置为规定一对象与用以在系统内通知一特定事件的请求相关;一模块配置为将该对象变换为一包含该对象自述形式的数据流;以及一模块配置为一旦事件发生便通过访问数据流中标识的程序代码重建该对象的情况下,提供用于有选择传送给机器的数据流。
10.如权利要求9所述的系统,其特征在于,该提供模块包括一模块配置为在有选择传送之前存储数据流。
11.如权利要求9所述的系统,共特征在于,该变换模块包括一模块配置为对未建封装的对象进行封装,并包括对于重建该对象用程序代码的引用。
12.一种包含多机器的分布式系统中传送对象的系统,其特征在于,包括第一机器;第二机器;将第一机器与第二机器连接的网络;以及在系统中传送对象的装置,该装置包括一模块配置为在第一机器处接收一包含与用以在系统内通知一特定事件的请求相关的对象其自述形式的数据流;一模块配置为确定是否将该数据流发送至第二机器;以及一模块配置为有选择地将数据流发送至第二机器用以通过访问数据流中标识的程序代码重建对象,第一机器提供事件的通知。
13.一种计算机程序产品,包括一计算机可读介质包含控制计算机系统执行一方法的指令,其特征在于,该方法包括下列步骤规定一对象与用以在系统内通知一特定事件的请求相关;将该对象变换为一包含该对象自述形式的数据流;以及一旦事件发生便通过访问数据流中标识的程序代码重建该对象的情况下,提供用于有选择传送给机器的数据流。
14.如权利要求13所述的计算机程序产品,其特征在于,该提供步骤包括在有选择传送之前存储数据流。
15.如权利要求13所述的计算机程序产品,其特征在于,该变换步骤包括对未建封装的对象进行封装,并包括对于重建该对象用程序代码的引用。
16.一种计算机程序产品,包括一计算机可读介质包含控制计算机系统执行一方法的指令,其特征在于,该方法包括下列步骤在第一机器处接收一包含与用以在系统内通知一特定事件的请求相关的对象其自述形式的数据流;确定是否将该数据流发送至第二机器;以及有选择地将数据流发送至第二机器用以通过访问数据流中标识的程序代码重建对象,第一机器提供事件的通知。
17.一种制品,其特征在于,规定计算机可读存储介质中所存储对象的表示,并能够在分布式系统中机器间进行电子传送,该制品包括第一对象包括计算机可读存储介质存储的自述数据流,第一对象与系统中规定一用以通知事件的请求的第二对象相关,第一对象具有一特性,表明除非检测出事件发生,否则当第一对象在机器间传送时该第一对象便作为数据流保留。
18.如权利要求17所述的制品,其特征在于,数据流包括用于重建第二对象的计算机可读指令。
19.如权利要求17所述的制品,其特征在于,数据流包括用于重建第二对象的计算机可读指令位置。
20.一种包含多台机器的分布式系统中传送对象的装置,其特征在于,包括规定一对象与用以在系统内通知一特定事件的请求相关的装置;将该对象变换为一包含该对象自述形式的数据流的装置;以及一旦事件发生便通过访问数据流中标识的程序代码重建该对象的情况下,提供用于有选择传送给机器的数据流的装置。
全文摘要
分布式系统中的事件通知采用串行形式保留的对象,称为一集结对象。就事件通知而言,机器用一设备登录以接收网络内对特定事件的通知,集结对象与一登录请求一起传送。
文档编号G06F9/50GK1298504SQ99805305
公开日2001年6月6日 申请日期1999年2月16日 优先权日1998年2月26日
发明者P·C·琼斯, A·M·沃尔蕾斯, J·H·瓦尔多, K·C·R·C·阿诺德 申请人:太阳微系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1