对象状态传送的方法、装置、程序和该程序的记录介质的制作方法

文档序号:6558993阅读:129来源:国知局
专利名称:对象状态传送的方法、装置、程序和该程序的记录介质的制作方法
技术领域
本发明涉及一种包含Java(已注册商标)虚拟机的装置。尤其是涉及一种对象状态传送方法、对象状态传送装置、对象状态传送程序、和用于该程序的记录介质,该程序在同步对象状态时使得减少将一个对象状态传送到其它主机的开销、以及提高整个系统的能力成为可能。
背景技术
在现有的Java技术中,为了将多个对象的内部状态(称作实例变量的对象的单独数据)传送到外部装置,必须通过一种通常称为串行化的方法,将这些实例一个接一个地转化成一个字节序列,然后将这个字节序列传送到外部装置中。这样就在串行化时产生了大量的开销。为了执行串行化,必须通过访问每个成员变量来提取每个单独成员变量的状态,每个成员变量代表每个实例的内部状态,并且被提取的状态必须被复制到一个将要存储字节序列的传送区域,因此,增加了开销。
例如,在一个由多个主机组成的集群中,当组成集群的一个主机因某种原因而变得不能连续服务时,另一个主机就代替它继续提供该服务,保持了系统的可靠性。对于要接管提供该服务的使另一个主机而言,与该服务相关的数据(对象状态)必须通过组成该集群的主机之间的同步而被复制。
串行化在这样的时刻进行,并且多个对象的内部状态被转换为一个字节序列,该字节序列被传送到另一个主机,但总开销却影响了整个系统的性能。
一个利用上述集群配置的系统在因特网(URL:http://edocs.beasys.co.jp/edocs/wls/docs70/cluster/failover.html)上发布的一篇文章中进行了描述;在该实例中,在故障转移时通过使用串行化来复制会话状态而实现会话接管。
在以上描述的传统技术中,当必须传送大量对象状态时,例如在组成集群的多个节点(主机)之间同步对象状态以便增加可靠性时,其它处理就被阻塞,导致整个系统的性能受到相当大的影响。

发明内容
本发明的目的之一是大量减少这个开销,以使在一个短时间内同步非常大量的对象的对象状态、并且在提高集群配置可靠性的同时最小化其对整个系统性能的影响成为可能。
本发明第一方面最重要的特点是,对象内部状态由应用程序按对传统对象同样的方式加以访问,该对象内部状态被存储在字节序列中。
更准确地说,应用程序被并入到Java虚拟机等中,并能通过一个用于操作对象的内部状态的存取器方法访问对象;对象的内部状态被映射到字节序列中,并被通过传送单元以那种形式传送到外部装置中。
因此,当对象能被按照和传统对象相同的方式从应用程序中加以操作时,内部状态已被按照字节序列映射的对象能被提供给该应用程序,使得用于传送该对象状态的开销大大减少了,并且该对象能在传送目的地被再现。因此,该装置在不降低其处理速度的同时保持了高可靠性。
例如,当一个数据处理装置已经变得不能继续服务时,另一个数据处理装置接管该服务;为实现这些,必须传送对象内部状态到另一个数据处理装置。传送处理理想地在每次更新对象内部状态时进行,但由于这可能导致极高的负载,所以实际上传送处理以有规律的时间间隔进行。在本发明中,传送内部状态的开销大大减少,而不中断其它处理,并且内部状态能比在传统装置中被更频繁地传送到另一个数据处理装置。这样就能够缩短在多个数据处理装置之间同步内部状态的时间间隔,增加了整个系统的可靠性。
在本发明的第一个方面中,根据来自应用程序的要创建新对象的请求,新对象的内部状态被保护在字节序列中,在字节序列和新对象的内部状态间进行映射,与该映射相关的映射数据被存储在一个映射管理表等中。
在本发明的第一个方面中,当应用程序已经访问过该被创建对象的内部状态时,按照存储在映射管理表中的映射数据,设置在被映射的字节序列中的对象内部状态,或该对象的内部状态从被映射的字节序列中提取,并且把结果返回给应用程序。
在本发明的第一个方面中,允许以未改变的形式把存储了对象内部状态的字节序列和存储在映射管理表或等中的映射数据传送到另一数据处理装置。
在本发明的第一个方面中,当被创建的对象被应用程序认为是不须要的、并且Java虚拟机等企图释放与该对象相关的存储器区域时,允许同时取消字节序列和该对象的映射,并且更新存储在映射管理表或等中的映射数据。
在本发明的第一个方面中,一个对象可由一个数据处理装置中的再现单元根据由另一个数据处理装置中的传送单元传送的字节序列和映射数据进行再现,然后与被再现对象相关的数据被发送给应用程序。
依据本发明的第二个方面,对象(它在多个数据处理装置之间是共享的)作为将被传送到另一个数据处理装置的对象被放置在共享堆区(heap region)中,并且传送单元传送共享堆区到另一个数据处理装置。
因此,有可能存储可以按与传统对象相同的方式操作的共享对象,此外,有可能向应用程序提供那些能被传送端的数据处理装置直接传送且能被再现端的数据处理装置再现的共享堆区。因此,可以大量减少传送对象的内部状态到另一个数据处理装置的开销,并且对象可以被在传送目的地再现。所以,该装置保持了高可靠性且不降低处理速度。
更准确地说,要确定该对象是否在多个数据处理装置之间共享;若共享,则该对象就作为一个共享对象被存储在共享堆区中;若不共享,则该对象被存储在堆区中。照这样,应用程序可以用同样的方法操作普通对象和共享对象的内部状态。
在本发明的第二个方面中,允许预先指定一个传送类;当应用程序发出创建新对象的请求时,确定要创建的类是否被包括在该传送类中;当要创建的类不包括在传送类中,在堆区中创建一个对象,并且当要创建的类包括在传送类中,在共享堆区中创建一个共享对象。这样就使得在多个数据处理装置之间只共享一个属于特定类的共享对象成为可能。因此,可以减少用来同步多个数据处理装置所需的传送数据量。
在本发明的第二个方面中,当应用程序已发出命令以操作该被创建对象的内部状态时,允许根据由应用程序提供的、要被操作的对象的地址,确定要被操作的对象是否被存储在共享堆区中,并确定操作是否包含设置内部状态;当设置存储在共享堆区中的对象的内部状态时设置一个标志,它表示在构成共享堆区的多个块当中,存储了要被操作的对象的块已被更新。
在本发明的第二个方面中,存储对象内部状态的整个共享堆区可以被传送到另一个数据处理装置。这样就允许共享堆区被不变地传送到其它数据处理装置,减少传送开销。
在本发明的第二个方面中,在多个块中,只有其标志被设置为表明其对应块已被更新的块才被发送到其他数据处理装置。这样就减少了传送数据的数量,缩短了传送端的数据处理装置的发送时间和接收端的数据处理装置的接收时间,并减少了传送和接收的开销。
在本发明的第二个方面中,允许从一个数据处理装置传送的共享堆区由另一个数据处理装置接收,该另一个数据处理装置将其中的内容安排到自己的共享堆区,并且计算在传送端的共享堆区的地址和接收端的共享堆区的地址之间的差;当在被传送的共享堆区中的共享对象的指针指示在传送端的共享堆区内的位置时,将根据该地址之间的差对该指针进行校正;当该指针指向传送端的共享堆区外的一个位置时,该指针被置空;由此,再现了该共享对象。因此,不再有任何需要去匹配在多个数据处理装置当中存储了共享堆区的位置。


图1是示出了根据本发明第一实施例的系统结构的一个例子的框图。
图2示出了本发明第一个实施例中一个对象创建过程的例子的框图。
图3是在本发明第一个实施例中一个对象创建过程的流程图。
图4是示出了本发明第一个实施例中一个对象操作过程的例子的框图。
图5是本发明第一个实施例中一个对象操作过程的流程图。
图6是示出了本发明第一个实施例中对象传送和再现的例子的框图。
图7是本发明第一个实施例中对象传送和再现过程的流程图。
图8是示出了本发明第一个实施例中删除一个对象的过程的框图。
图9是本发明第一个实施例中删除一个对象的过程的流程图。
图10是示出了本发明第一个实施例中一个对象再现方法的框图。
图11是示出了本发明第一个实施例中当映射数据被分散并存储在对象当中时系统结构的例子的框图。
图12是示出了本发明第二个实施例的系统结构的一个例子的框图。
图13是示出了本发明第二个实施例中传送类说明过程的例子的框图。
图14是本发明第二个实施例中传送分类说明过程的流程图。
图15是示出了本发明第二个实施例中一个对象创建过程的例子的框图。
图16是本发明第二个实施例中一个对象创建过程的流程图。
图17是示出了本发明第二个实施例中一个对象操作过程的例子的框图。
图18是本发明第二个实施例中一个对象操作过程的流程图。
图19是示出了本发明第二个实施例中对象传送和再现过程的例子的框图。
图20是本发明第二个实施例中对象传送和再现过程的流程图。
图21是示出了依据本发明第三个实施例的一个系统构造例子的框图。
具体实施例方式
本发明的优选实施例将结合附图进行描述。
第一个实施例图1是示出了根据本发明第一实施例的系统结构的一个例子的框图。发送器10是一台包含Java虚拟机的计算机,并且能传送对象的内部状态。接收器20也是一台包含Java虚拟机的计算机,并且接收来自发送器10的对象的内部状态,根据它已经接收的内部状态再现对象。
发送器10中的一个对象创建函数101根据来自应用程序100的对象创建命令创建一个对象102。此时,对象创建函数101把在传送预定区域104中创建的对象102的内部状态排列成字节序列,并且在映射管理表103中设置在新对象102的内部状态和字节序列之间的映射数据。
当应用程序100通过存取器方法访问对象102的内部状态时,在传送区域104中的字节序列中设置或者提取对象102的内部状态,并且将其返回给应用程序100,其中该字节序列依照映射管理表103中的数据已经建立了映射。存取器方法是对象102为了使应用程序100能够访问对象102而准备的一种接口类型;因为存取器方法不适合用图说明,因此没有在图1中示出。
为了同步在发送器中创建的对象102的内部状态,一个传送函数105有规律地传送这些内部状态到接收器20,并且将传送区域104中的字节序列和映射管理表103以没有变化的形式传送给接收器20。传送函数105作为一个对象被执行。
接收器20中的一个再现函数201在接收器20中的传送区域202中设置来自传送函数105的字节序列,并且,另外,在接收器20的映射管理表203中反射映射管理表103中的映射数据。再现函数201从传送区域202中的接收的字节序列中和映射管理表203中提取每一个对象的内部状态,并且再现与发送器10中的对象102具有相同内部状态的对象204。再现函数201作为一个对象被执行。
对象管理函数205接收来自再现函数201的对象204的再现通知,并且通知应用程序206该对象已经被再现。
接下来,对发送器10和接收器20的各种函数进行详细说明。
图2是示出了本发明第一个实施例中一个对象创建过程的例子的框图,并且图3是一对象创建过程的流程图。处理的流程将结合图2和图3进行说明。
(A)对象创建命令应用程序100调用对象创建函数101的对象创建方法(例如,creatObject()),并且发布一个命令以创建由该方法指定的对象(步骤S1)。
(B)获取映射数据响应对象创建命令,对象创建函数101执行在要被创建的对象的内部状态和构成传送区域104的字节序列之间的映射。为了实现这一点,对象创建函数101确定要创建的对象的内部状态的数量和类型,确定需要的大小,并且在映射管理表103中检索所需大小的空区域(步骤S2)。然后,对象创建函数101在映射管理表103中的字节序列中记录内部状态的位置。就是说,对象创建函数101通过在映射管理表103的空区域的记录中设置与要被创建的对象相关的数据以保护所述区域的安全(步骤S3)。
(C)对象创建然后,对象创建函数101创建对象并且设置映射管理表103中的数据,映射管理表103存储在面提到的(B)中。也就是说,对象创建函数101设置被创建的对象到在传送区域104中用于它的内部状态的位置(步骤S4)。
(B)对象引用返回其后,对象创建函数101返回一个对象引用到应用程序100(步骤S5)。应用程序100从对象创建函数101接收对象引用(步骤S6)。对象引用被用于移交对象,并且能通过用于直接指向该对象被存储的位置的指针实现。另一个可选择的办法是创建一个包括用于直接指定对象存储位置的指针的条目表,并且对象引用通过指定该表中的一个条目而间接访问对象存储位置。当应用程序100已经要求对象创建函数101创建一个对象时,就返回对象引用以便移交由对象创建函数101创建的对象给应用程序100。
图4是示出了在依据本发明的实施例中一个对象操作过程的例子的框图,并且图5是该对象操作过程的流程图。该处理流程将基于图4和图5进行说明。
(A)对象操作命令应用程序100调用对象102的存取器方法(例如,setAttribute(),getAttribute()等),并且由此发布一个命令以执行对该对象的内部状态的操作,换句话说,设置或获取内部状态(步骤S10)。
(B)设置和获取对象内部状态基于在创建对象102时为对象102设置到对象的内部状态的字节序列的映射数据,对象102的存取器方法通过访问组成传送区域104的字节序列,设置或者获取对象的内部状态(步骤S11)。
(C)返回设置或者获取对象内部状态的结果对象102返回设置或者获取的结果到应用程序100。特别是,在获取对象内部状态的情况下,对象102返回内部状态到应用程序100(步骤S12)。应用程序100接收所述结果(步骤S13)。
图6是示出了在依据本发明的实施例中对象传送和再现的例子的框图,并且图7是该对象传送和再现过程的流程图。该处理流程将基于图6和图7进行说明。
(A)获取字节序列和映射管理表例如,为了传送发送器10中的对象内部状态到接收器20,传送函数105开始有规律地传送处理,并且从组成传送区域104的字节序列和映射管理表103中获取数据(步骤S20)。
(B)数据传送传送函数105传送获取的数据到接收器20中的再现函数201,包括另外一台主机(步骤S21)。
(C)字节序列和映射管理表的再现再现函数201从发送器10接收代表对象的内部状态的字节序列和映射管理表103的数据(步骤S22),并通过把它们设置在传送区域202和映射管理表203中来再现它们(步骤S23)。
(D)对象再现然后,再现函数201从映射管理表203中获取该被传送对象的类型和它的内部状态在传送区域202内的位置(步骤S24),并且基于映射管理表203的数据再现对象204。随后,再现函数201为每一个再现的对象204设置映射管理表203的数据(例如内部状态在传送区域202中的位置)(步骤S25)。
(E)对象再现通知再现函数201创建被再现的对象204的引用数组,并且向对象管理函数205通知该数组(步骤S26)。管理函数205接收对象204的引用数组(步骤S27),并且把对该数组的引用作为再现数据通知一个预先已注册的应用程序206(步骤S28),应用程序206在需要时执行再现之后的处理。
图8是示出了在依照本发明的实施例中删除一个对象的过程的框图,并且图9是删除该对象的过程的流程图。该处理流程基于图8和图9进行说明。
(A)对象释放命令应用程序100调用一个用于释放不再需要的对象的释放方法,并且从而发布一个命令以释放对象102(步骤S30)。
(B)清除映射数据当对象102接收释放命令时,它指示对象创建函数101进行删除(步骤S31)。按照来自对象102的删除命令,对象创建函数101清空在映射管理表103中存储了对象102的记录的区域,从而清除映射数据(步骤S32)。应用程序100删除与已经对其发出了释放命令的对象相关的对象引用(步骤S33)。
图10是示出了用于在接收器20中根据映射管理表203的映射数据和组成传送区域202的字节序列再现一个对象的方法的框图。
接收器20的再现函数201有规律地接收来自发送器10中传送函数105的组成传送区域104的字节序列和映射管理表103的映射数据,并且设置传送区域202和映射管理表203。在映射管理表203中设置的映射数据是名叫OBJ1和OBJ2的对象以及它们的内部状态a和b在一个传送区域(字节序列)202中的位置。
再现函数201从事先准备的一个对象类文件207中提取表示对象OBJ1和OBJ2的内部状态的类型和数量的数据,并且根据在映射管理表203中设置的对象内部状态和传送区域202之间的映射数据,重新创建内部状态在传送区域202中的位置,并且由此再现对象204。从而,在接收器20中再现与发送器10中的对象102具有同状态的对象204。
上面对第一实施例的说明描述了这样的例子,在该例子中,在发送器10中有一个传送区域104,在接收器20中有一个传送区域202但是可以提供多个传送区域。当有多个传送区域时,组标识数据等被追加到每一个预置的对象组中,使它们能够被分配到适当的传送区域。
在上面的说明中,映射数据被一起存储在映射管理表103和映射管理表203中,但是可以按照对象划分和存储映射数据。图11是示出了在这种情况下系统结构的一个例子的框图;与图1相同的部分用同样的标号表示,且不再进一步说明。
在图11中,映射数据曾被存储在图1中的映射管理表103和203中,映射数据与各个对象102和204相对应地被安排为映射数据108和208。尤其是,来自如图2中示出的映射数据的、与对象OBJ1相关的内部状态a和b与对象102存储在一起,对象102与对象OBJ1相对应。同样的,来自如图2中示出的映射数据的、与对象OBJ2相关的内部状态a和b与对象102存储在一起,对象102与对象OBJ2相对应。图11中示出的系统与图1到10描述的系统以相同的方式操作,唯一的不同在于,存取的是映射数据108和208而不是映射管理表103和203,映射数据108和208被与各个对象相对应地存储。
第二实施例图12是示出了一个根据本发明第二实施例的系统构造例子的框图。发送器30和接收器40分别对应于第一实施例中的发送器10和接收器20。因而,在本实施例中,与第一实施例中相同的组成部分重用相同的参考符号,不再进一步说明。
对象302对于每个主机是唯一的,不在主机间共享。相反,共享对象310在主机间共享,并在主机间进行传送。
对象302存储在一个堆区311中,而共享对象310存储在一个共享堆区312中。顺便提及,堆区311和共享堆区312的数据结构将在后面参考图15说明。
传送类数据库(DB)313是用于存储与将要在主机间共享的类相关的数据的数据库。传送类数据库313的结构的一个特例将在后面参考图13说明。
传送类列表314包含从用户发送给发送器30的数据,在传送类列表314中指定的每个类都附有一个类号,这些类号存储在传送类数据库313中。
对象创建函数301对应于第一实施例中的对象创建函数101;对象创建函数301将在后面详细说明,主要有以下功能。对象创建函数301在传送类数据库313中设置由用户输入的传送类列表314。此外,当从应用程序100收到创建一个对象的命令时,对象创建函数301搜索传送类数据库313,并确定要创建的类是否被指定为传送类;根据该确定结果,对象创建函数301在堆区311或共享堆区312中创建对象。此外,当从应用程序100收到操作一个对象的命令(以便设置或获取该对象的内部状态)时,对象创建函数301确定要被操作的对象是否被存储在共享堆区312中;根据确定结果,对象创建函数301操作堆区311中的对象302或共享堆区312中的对象310,并返回操作结果给应用程序100。
传送函数305对应于第一实施例中的传送函数105,并有规律地传送整个共享堆区312、或包含更新对象的共享堆区312的一部分到接收器40。
再现函数401对应于第一实施例中的再现函数201,并把从发送器30接收的共享堆区312的全部或一部分安排到共享堆区412,并在共享堆区412中创建一个共享对象410,该共享对象具有与发送器30中的共享对象310同样的状态。再现函数401通知与被再现的共享对象410相关的数据给对象管理函数405。
对象管理函数405具有与发送器30端的对象创建函数301相同的功能,此外,它从再现函数401接收与被再现的共享对象410相关的数据,并通知该数据的引用给应用程序206。
对象402、堆区411、传送类数据库413、和传送类列表414分别与发送器30端的对象302、堆区311、传送类数据库313和传送类列表314一样。
图13示出了依据本发明一个实施例在用于指定传送类方法中的处理的例子,图14是传送类指定方法的处理的流程图。
图13还示出了传送类数据库313的特定结构。传送类数据库313存储数据对,该数据对包括将被在主机间传送的类名和由对象创建函数301在指定传送类时分配给类名的类号。
处理流程图将在后面参考图13和图14说明。
(A)读取传送类列表当包含虚拟机的发送器30被激活时,对象创建函数301读取由用户提供的传送类列表314。同样地,当包含虚拟机的接收器40被激活时,对象管理函数405读取由用户提供的传送类列表414(步骤S51)。
(B)在传送类数据库中存储传送类列表对象创建函数301在传送类数据库313中存储其已经读取的传送类列表314。同样地,对象管理函数405在传送类数据库413中存储其已经读取的传送类列表414。此时,对象创建函数301和对象管理函数405给每个由传送类列表314和传送类列表414指定的类名附加一个唯一类号。(步骤S52)图15是示出了在依据本发明的实施例中一个对象创建过程的例子的框图,图16是该对象创建过程的一个流程图。
图15还示出了堆区311和共享堆区312的结构的一个特定例子。
堆区311只存储每个对象的对象状态数据320(显示各个对象302的状态)。相反,共享堆区312包括一个头350和多个块351。由于每个块351有相同结构,所以图15显示了有代表性的块1的详细结构。
头350包括头/块类型360,块数量361,块大小362,区域头地址363和块更新标志364。表示头/块类型360的后继区域是一个头350还是一个块351的数据(固定值)被存储在头/块类型360中。块数量361表示共享堆区312中的块数量。在该实施例中为了方便说明,固定值被存储为块数量361(即,共享堆区312的大小不变),但对此没有限制。块大小362表示每个块351的大小。为方便说明,本实施例中块351的大小都相同,但对此没有限制。区域头地址363存储共享堆区312的头地址。即,共享堆区312的头地址被存储为发送器30端的区域头地址363,并且共享堆区412的头地址被存储为接收器40端的区域头地址363。块更新标志364是一个依据头350和块351而提供的标志的集合,每个标志表示其对应的区域(头350或各个块351)是否已被更新。
每个块351在其头部有一个头/块类型370和一个块号371,其后跟着为每个对象存储的、与每个对象相关的数据(在以下术语中为“对象数据”)。以与头/块类型360相同的方式,头/块类型370存储表示后继区域是头350还是块351的数据(固定值)。当然,这些存储在头/块类型370中的各个固定值被设置为与那些存储在头/块类型360中的值不同的值。块号371是分配给每个块的唯一编号。
对象数据包括到下一个对象的偏移量372、类号373和对象状态数据374。到下一个对象的偏移量372表示每个对象的大小,并且可以通过把到下一个对象的偏移量372加到与每个对象相关的对象数据的头地址(即,下一个对象的偏移量372的存储位置),而获取与下一个对象相关的对象数据的头地址。在每个块中的最后一个对象相关的对象数据之后的存储器中,在与到下一个对象的偏移量372对应的区域中存储“0”,使得有可能确定在该存储器中没有对象。类号373存储一个类号(见图13),该类号在指定传送类时使用,代表该对象所属的类。对象状态数据374以与组成堆区311的对象状态数据320相同的方式存储每个对象的状态。
该处理的流程图将基于图15和图16说明。
(A)对象创建命令应用程序100命令对象创建函数301去创建一个对象。例如,当要创建的类的类名是“Class_A”时,字节码“new Class_A”能被用来命令对象创建函数301创建一个对象(步骤S61)。
(B)确定它是否是传送类对象创建函数301检索传送类数据库313(步骤S62),并确定要创建的类的类名是否被包含在传送类数据库313中(步骤S63)。当类名被包括在传送类数据库313中时,处理进行到(C)。相反,当类名未被包括在传送类数据库313中时,处理进行到(D)。
(C)在共享堆区中创建对象对象创建函数301在共享堆区312中创建要创建的类的一个对象(步骤S64)。首先,对象创建函数301确定一个区域以便将对象存储到共享堆区312中。对象创建函数301从头块(图15中块“1”)顺序地跟踪在块351中到下一个对象的偏移量372,确定与在块351中的最后对象相关的对象数据的下一个地址,并使该地址成为与要创建的对象相关的对象数据的头地址。接着,如第一实施例中所述,对象创建函数301确定要创建的对象的内部状态的数量和类型,从而确定要创建的对象所需要的大小,并基于所获得的大小设置到下一个对象的偏移量372。对象创建函数301从传送类数据库313中提取与要创建的类的类名相应的类号,并将其设为类号373。当留在正被检查的块351中的空区域不足以存储要创建的对象时,对象创建函数301重复该操作直到它找到了有必需的空区域的块为止。然后,处理进行到(E)。
(D)在堆区中创建对象对象创建函数301在堆区311中创建要创建的类的对象(步骤S65)。即,对象创建函数301在堆区311中为对象状态数据320取得一个新区域。然后,处理进行到(E)。
(E)返回对象引用如第一实施例,对象创建函数301返回对象引用给应用程序100(步骤S66)。应用程序100从对象创建函数301接收对象引用(步骤S67)。
图17是示出了在本发明的实施例中对象操作过程的一个例子的框图,图18是对象操作过程的一个流程图。处理的流程将参考图17和图18说明。
(A)对象操作命令应用程序100命令对象创建函数301操作一个对象(如,增量对象OBJ1的内部状态a)。同时,应用程序100向对象创建函数301发送要被操作的对象的地址(步骤S71)。
(B)检查要被操作对象的地址是否在共享堆区中对象创建函数301检查要被操作的对象的地址是否在共享堆区312中(步骤S72)。当该地址在共享堆区312外时,处理进行到(C),而当该地址在共享堆区312内时,处理进行到(D)。
(C)对象的操作按照来自应用程序100的命令,对象创建函数301基于要操作的对象地址,操作与堆区311中要操作的对象302相应的对象状态数据320(步骤S73)。此后,处理进行到(E)。
(D)操作对象和设置块更新标志基于要操作的对象的地址,对象创建函数301按照来自应用程序100的命令,操作与共享堆区312中要操作的共享对象310相应的对象数据中的对象状态数据374(步骤S74)。下一步,对象创建函数301计算在共享堆区312中的块的块数量,而在该共享堆区中存储了要被操作的共享对象310。若共享对象的地址是x,共享堆区312的头地址(即,第一个块351的头地址)是y,且块大小362是2n,那么块号=(x-y)>>n。顺便提及,“>>n”表示右移n位的计算。然后,当要通过设置来操作对象时,对象创建函数301在包括块更新标志364的标志中设置与计算的块号对应的标志。由于块更新标志364已被更新的事实指示头350的内容已被设置,所以对象创建函数301也要从包括块更新标志364的标志中设置与头350相应的标志(步骤S75)。然后,处理进行到(E)。
(E)对象操作结果的通知对象创建函数301返回对象操作结果给应用程序100。特别地,当对象操作包括获取对象状态时,对象创建函数301返回被操作过的对象的内部状态给应用程序100(步骤S76)。应用程序100接收这个对象的内部状态(步骤S77)。
图19示出了在依据本发明的实施例中针对共享堆区312的对象传送和再现过程的一个例子,图20是对象传送和再现过程的一个流程图。处理流程将参考图19和图20说明。
(A)共享堆区的传送命令传送函数305周期性地启动传送处理,并获取共享堆区312的头地址。
(B)共享堆区的传送有两种类型的传送方法整个区域传送和差异传送;在激活发送器30时,用户预先选择他希望使用的传送方法,并将其指示给发送器30。然后,传送函数305确定传送方法(步骤S81)。在整个区域传送的情况下,传送函数305读取共享堆区312,然后传送该整个区域到接收器的再现函数401(步骤S82)。在差异传送的情况下,传送函数305参考在共享堆区312的头350中的块更新标志364,从共享堆区312中读取具有设置标志的头350和/或块351,然后传送它们到接收器40的再现函数401,并清除对应于已经被传送的头350和/或块351的标志(步骤S83)。
(C)共享堆区的再现再现函数401安排从发送器30接收的数据到共享堆区412(步骤S84)。在接收器40端,共享堆区的地址与发送器30端的地址不同。因此,再现函数401参考在共享堆区412的头350中的区域头地址363来提取共享堆区412的头地址,另外,参考被安排在共享堆区412中的、在发送器30端的头350中的区域头地址363,并提取共享堆区312的头地址。随后,再现函数401计算两个地址间的差别,从被安排进共享堆区412的数据中(特别地,标识对象状态数据374中的其它对象的指针),再现函数401校正指向发送器30端的共享堆区312的指针为接收器40端的地址(即,在共享堆区412中的地址)。进一步,再现函数401置空任何指向发送器30端的共享堆区312以外的指针(步骤S85)。一个指向共享堆区312以外的指针可能正标识堆区311中的一个位置。根据需要,应用程序206后置处理被置空的指针。
(D)对象再现通知再现函数401创建一个对再现的共享对象410的引用数组,并将该数组通知给对象管理函数405(步骤S86)。对象管理函数405接收该引用数组,并将对该数组的引用作为再现的数据通知给应用程序206(步骤S87)。需要时,应用程序206执行再现后的处理。
顺便提及,整个区域传送的情况下,更新块更新标志的过程(图18中步骤S75)可以被从图17和图18中描述的对象操作过处理中省略。
第三个实施例图21是示出了根据本发明第三个实施例中的一个系统构造例子的框图,组合了第一和第二实施例。发送器50包括了发送器10和发送器30的结构元件,并且接收器60包括了接收器20和接收器40的结构元件。在图21中,与第一和第二实施例中相同的组件用同样的参考标号表示并且不再进一步解释。
对象创建函数501是通过组合第一实施例中的对象创建函数101和第二实施例中的对象创建函数301而实现的。应用程序100事先向对象创建函数501规定对象创建函数是依照第一实施例还是第二实施例操作。同样的,对象管理函数601是通过组合第一实施例中的对象管理函数205和第二实施例中的对象管理函数405而实现的。应用程序206事先向对象管理函数601规定对象管理函数是依照第一实施例还是第二实施例操作。另外,在第一实施例中描述的将被传送的对象102和204分别存储在堆区311和411。
接下来,将说明在单独使用第一实施例中描述的对象状态传送装置和在单独使用第二实施例中描述的对象状态传送装置之间每一个过程的不同。
用于指定传送类的方法是一个仅用于第二实施例的过程,并且与在图13和14中描述的具有相同的处理流程。
第一和第二实施例都包括对象创建和操作过程,并且这些过程的流程遵照它们各自的实施例。
第一和第二实施例都包括对象传送和再现过程,并且这些过程的流程遵照它们各自的实施例。就是说,传送函数305依据事先选择的传送方法传送共享堆区312的全部或一部分到再现函数401;再现函数401接收它,并且在共享堆区412中再现共享对象410。传送函数105将传送区域104和映射管理表103传送到再现函数201,并且再现函数201再现传送区域202和映射管理表203。
只有第一个实施例有对象删除过程,并且处理流程遵照它的实施例。
有可能将传送函数105和传送函数305组合成为单一的传送函数,并且将再现函数201和再现函数401组合成为单一的再现函数。当这样做的时候,在接收器60端确定从发送器50传送的数据是否遵照第一实施例或第二实施例是必要的。为此,当发送器50传送数据到接收器60时,它添加表示该数据是否遵照第一或第二实施例的数据,并且接收器60基于添加的数据根据第一或第二实施例执行操作。
上面描述的实施例的过程可以通过计算机(数据处理装置)和软件程序实现;所述程序可以存储在合适的记录介质上,比如,计算机可读的便携存储器、半导体存储器、或硬盘驱动器,并且计算机通过从记录介质中读取该程序来执行它。
因为主机也作为接收器和发送器运行,所以它们包括充当接收器和发送器的部件。在给定的时间,主机不是作为发送器就是作为接收器运行,并且因为这个原因,上面实施例描述了一个作为发送器运行的主机和一个作为接收器运行的主机。
权利要求
1.一种数据处理装置中的象状态传送方法,该数据处理装置包括应用程序和多个具有内部状态的对象,该内部状态能够被通过应用程序加以操作,所述方法包括以下步骤确定对象是否在多个数据处理装置之间共享;当该对象在多个数据处理装置之间共享时,把该对象作为共享对象存储在共享堆区内;当该对象不在多个数据处理装置之间共享时,把该对象存储在堆区内;并且通过以没有变化的形式把共享堆区发送到另一数据处理装置而把共享对象的状态传送到其它数据处理装置。
2.如权利要求1所述的对象状态传送方法,还包括步骤预先指定作为传送类的要传送到另一数据处理装置的类;当应用程序已经发出用于创建新对象的命令时,确定由应用程序指定的、要创建的类是否被包括在该传送类中;当要创建的类未被包括在该传送类中时,在堆区中创建一个新的对象;并且当要创建的类被包括在该传送类中时,在共享堆区中创建一个新的共享对象。
3.如权利要求1所述的对象状态传送方法,还包括步骤当应用程序已经发出用于操作对象的内部状态的命令时,基于由应用程序提供的要被操作的对象的地址,确定将要被操作的对象是否被存储在共享堆区中,并确定该操作是否包含设置内部状态;当要被操作的对象存储在共享堆区中并且所述操作包括设置内部状态时,设置一个标志,该标志表明在构成共享堆区的多个块当中的存储了要被操作的对象的块已被更新。
4.如权利要求1所述的对象状态传送方法,其特征在于整个共享堆区被发送到另一个数据处理装置。
5.如权利要求3所述的对象状态传送方法,其特征在于在该多个块当中,只有其标志被设置为表明其对应块已被更新的块被发送到另一个数据处理装置。
6.如权利要求1所述的对象状态传送方法,其特征在于再现所述共享对象的另一个数据处理装置执行以下步骤接收由如权利要求1所述的对象状态传送方法传送的共享堆区,并且安排传送的共享堆区到另一个数据处理装置的共享堆区;计算在包含在传送的共享堆区中的传送的共享堆区的地址与包含在另一个数据处理装置中的传送的共享堆区内的另一个数据处理装置的传送的共享堆区的地址之间的差;确定包含在传送的共享堆区内的共享对象的指针是否指向在传送的共享堆区中的位置;当指针指向传送的共享堆区中的位置时,基于地址之间的差,校正该指针;并且当该指针指向在传送的共享堆区以外的位置时,该指针被置空。
7.一种数据处理装置中的对象状态传送装置,该数据处理装置包括应用程序和多个具有内部状态的对象,该内部状态能够被通过应用程序加以操作,所述装置包括共享堆区,该堆区把在多个对象当中的被多个数据处理装置所共享的对象存储为共享对象;堆区,该堆区存储在多个对象当中没有被多个数据处理装置所共享的对象;以及传送单元,该单元通过以没有变化的形式发送所述共享堆区到另一个数据处理装置而传送共享对象的内部状态到其它的数据处理装置。
8.如权利要求7所述的对象状态传送装置,其特征在于所述共享堆区包括用于存储共享对象的多个块和表示多个块中的每一个是否已经被更新的标志,并且其中对象状态传送装置还包括传送类存储单元,该单元存储要传送到另一个数据处理装置的传送类;对象创建单元,该单元响应于来自应用程序的用于创建一个新对象的命令和将要创建的类的说明,在该命令指定未被包含在该传送类中的类作为要被创建的类的情况下,在堆区中创建新的对象,并且当该命令指定一个已经包含在该传送类中的类作为要被创建的类时,在共享堆区中创建新的共享对象;以及一个单元,该单元响应于来自应用程序的用于操作对象的内部状态的命令和将要操作的对象的地址,基于要被操作的对象的地址和操作的内容,检测在共享堆区中设置对象的内部状态的命令,并且设置一个标志,该标志对应于存储了要被操作的对象的块,并且其中该传送单元依照预定的传送方法传送整个共享堆区或者只传送标志被设置的块到另一个数据处理装置。
9.一种数据处理装置中的对象状态传送装置,该数据处理装置包括应用程序和多个具有内部状态的对象,该内部状态能够被通过应用程序加以操作,所述对象状态传送装置包括共享堆区,该堆区存储该共享堆区自身的地址,并存储在多个对象当中的在多个数据处理装置之间共享的对象为共享对象;堆区,该堆区存储多个对象当中的在多个数据处理装置之间不共享的对象;用于再现共享对象的再现单元,该单元接收从另一数据处理装置传送来的共享堆区,并且将传送的共享堆区安排到它自己的共享堆区,计算在传送的共享堆区的地址和它自己的共享堆区的地址之间的差,并且基于地址的差,校正在传送的共享堆区包含的共享对象中的指针之中的、指向传送的共享堆区的位置的指针;以及对象管理单元,该单元向应用程序通知与再现的共享对象相关的数据。
全文摘要
当大量对象的状态必须被传送到另一台装置时,可使开销大量减少并且在一个短时间内同步大量的对象状态。在创建对象时,对象创建函数在传送区域内将对象内部状态安排减字节序列,并且在映射管理表中设置映射数据。当用程序应已经通过存取器方法操作内部状态时,在传送区域的字节序列中设置状态,或者从其获取该状态。传送函数将传送区域的字节序列和映射管理表传送到一个接收器,在该接收器中再现函数基于接收的数据再现该对象。
文档编号G06F9/46GK1952881SQ20061008488
公开日2007年4月25日 申请日期2003年8月12日 优先权日2002年8月14日
发明者田中慎司, 山田哲靖 申请人:日本电信电话株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1