用于为工作单元提供原子性的方法、系统和计算机程序的制作方法

文档序号:6566878阅读:112来源:国知局
专利名称:用于为工作单元提供原子性的方法、系统和计算机程序的制作方法
技术领域
本发明涉及 一 种用于为工作单元提供原子性的方法、系统和计 算机程序。
背景技术
在事务处理领域中,通常要求工作单元具备ACID性质。ACID 是代表四种工作单元性质的首字母缩写词原子性、 一致性、隔离 性和耐久性。原子性要求务必使工作单元的所有操作都发生或者务 必使工作单元的操作无一发生。 一致性要求工作单元保持它所操作 的数据的 一 致性。隔离性要求工作单元不得读取另 一 事务的中间结 果。耐久性要求使被提交(commit)的工作单元的结果持久并且即 使在系统故障的情况下仍然能够确保其它ACID属性。然而,用以 保证这些性质的职责落在不同部件上。例如,如果工作单元是事务, 则事务协调器提供原子性,应用提供一致性,资源管理器提供隔离 性和耐久性。另外,在一些工作单元中,并非所有这样的性质都会 得到遵循,例如对于作为长期运行(延展)的事务并且包括数个事 务的工作单元而言没有遵循隔离性。例如, 一种公知和理解的工作单元是事务,而事务协调器或者 中间件的作用在于提供原子性。由此,例如如果应用在事务中涉及 到两个操作并随后请求事务协调器提交该事务,则事务协调器必须 保证两个操作均提交(成功)。可选地,如果该应用请求事务协调 器收回(back out)事务,则事务协调器必须保证两个操作均被收回 (失败)。提供原子性的主要问题是即使在事务协调器执行于其上的系 统发生故障的情况下仍然必须确保原子性。例如,如果事务涉及到 两个操作并随后进行提交,则系统可能在事务协调器已经提交第一 操作之后、但是在尚未提交第二操作之前发生故障。结果,当系统 重启时,事务协调器必须保证第二操作也提交。为了提供这一功能, 事务协调器有必要维护经历了系统故障而留存下来的并且记录各事 务的进度的非易失性日志。例如,事务协调器将在该日志中维护对 各事务中涉及到的操作以及该事务的进度状态的顺序记录。另外, 在事务中的某些点,在事务协调器保证日志记录已经被写到非易失 性存储器的同时必须保持该事务。然而,写入日志是耗费时间的。发明内容根据第 一方面,提供一种用于为涉及到多个参与器的工作单元提供原子性的方法,该方法包括以下步骤将预备请求发送到至少 一个参与器,其中该请求包括为了恢复工作单元而需要的数据;以及在恢复工作单元时,恢复工作单元,包括从至少一个参与器获 得数据;以及使用获得的数据来恢复和保留工作单元的原子性。优选地,数据包括如下细节,根据该细节能够确定工作单元的 结果。更优选地,该数据包括工作单元中其它参与器的列表。更优 选地,向预备请求被发送到的最后参与器发送的数据包括提交工作 单元的结果的指示。在优选实施例中,恢复工作单元的步骤还包括响应于获得的 数据包含提交工作单元的结果的指示,将提交请求发送到至少 一 个 参与器。优选地,该方法还包括以下步骤将遗忘请求发送到至少 一个参与器。更优选地,从至少一个参与器获得数据的步骤包括 将对数据的请求发送到至少一个参与器。更优选地,从至少一个参 与器获得数据的步骤包括从至少一个参与器接收消息,该消息包 括数据。根据第二方面,提供一种用于参与工作单元的方法,该方法包 括以下步骤从工作单元的协调器接收预备请求,该预备请求包括 代表协调器进行存储的数据;以及处理预备请求,该处理步骤包括以下步骤确定能够完成更新;在非易失性存储器中存储数据;以 及对预备请求做出响应,该响应包括能够完成更新这一指示。优选地,该方法还包括以下步骤从协调器接收对数据的请求; 以及响应于接收到请求,将数据提供给协调器。更优选地,该方法 还包括以下步骤将数据发送到协调器。更优选地,发送数据的步 骤对确定与协调器失去联系做出响应。根据第三方面,提供一种用于为涉及到多个参与器的工作单元 提供原子性的协调器,该协调器包括用于将预备请求发送到至少 一个参与器的装置,其中该请求包括为了恢复工作单元而需要的数据;以及用于在恢复工作单元时恢复工作单元的装置,包括用于 从至少 一个参与器获得数据的装置;以及用于使用获得的数据来恢 复和保留工作单元的原子性的装置。根据第四方面,提供一种用于参与工作单元的参与器,该参与 器包括用于从工作单元的协调器接收预备请求的装置,该预备请 求包括代表协调器进行存储的数据;以及用于处理预备请求的装置, 包括用于确定能够完成更新的装置;用于存储数据的非易失性存 储器;以及用于对预备请求做出响应的装置,该响应包括能够完成 更新这一指示根据第五方面和第六方面,提供如下计算机程序,这些计算机 程序包括当所述程序运行于计算机上时适于执行上述方法的所有步 骤的程序代码装置。根据第七方面,提供一种用于解决涉及到多个参与器的工作单 元的方法,该方法包括以下步骤多个参与器中的各参与器获得与 多个参与器中的各其它参与器相关联的标识符数据;多个参与器中 的各参与器从多个参与器中的各其它参与器获得包括与工作单元相 关联的状态的第 一消息;以及至少 一个参与器使用接收的第 一消息 来恢复工作单元。根据第八方面,提供一种用于解决涉及到多个参与器的工作单 元的系统,该系统包括用于使多个参与器中的各参与器获得与多
个参与器中的各其它参与器相关联的标识符数据的装置;用于使多 个参与器中的各参与器从多个参与器中的各其它参与器获得包括与 工作单元相关联的状态的第 一消息的装置;以及用于使至少一个参 与器使用接收的第一消息来恢复工作单元的装置。根据第九方面,提供一种用于解决涉及到多个参与器的工作单 元的参与器,该参与器包括用于获得与多个参与器中的各其它参 与器相关联的标识符数据的装置;用于从多个参与器中的各其它参 与器获得包括与工作单元相关联的状态的第 一消息的装置;以及用 于使用接收的第 一 消息来恢复工作单元的装置。根据第十方面,提供一种计算机程序,该计算机程序包括当所装置。 ^ 、 、' 、 ' ^ 、、—


现在将参照如以下附图中所示的本发明优选实施例,仅通过例 子来描述本发明图1是本发明可以实施于其中的系统的框图;图2是根据现有技术在事务中涉及到的部件以及在这些部件之 间的流程的示意图;图3是根据本发明第一实施例在事务中涉及到的部件以及在这 些部件之间的流程的示意图;图4是根据本发明第二实施例在事务中涉及到的部件以及在这 些部件之间的流程的示意图;图5是事务系统的框图;图6是根据优选实施例的事务系统的框图;图7是根据优选实施例在事务中涉及到的部件以及在这些部件 之间的流程的示意图;以及图8是根据优选实施例在事务解决中涉及到的部件以及在这些 部件之间的流程的示意图。
具体实施方式
根据优选实施例,所选工作单元是事务。图l是本发明能够实施于其中的系统(100)的框图。图1示出了包括所拥有的应用(110) 的第一数据处理系统(105)、包括用于执行事务的事务协调器(120) 的第二数据处理系统(115)、包括参与器1即第一资源(例如数据 库)的第三数据处理系统(130)和包括参与器2即第二资源(例如 数据库)的第四数据处理系统(135)。该系统(100)也包括日志(125),事务协调器(120)、参与器1和参与器2能够向该日志 写入具有与事务相关联的数据的一个或者多个日志记录。应当理解,事务中涉及到的部件(即所拥有的应用(110)、 事务协调器(120)、参与器1和参与器2)能够驻留于任何数据处 理系统上,并且这些部件能够全部驻留于同 一数据处理系统上。图2是根据现有技术依照两阶段提交协议在示例性事务中涉及 到的部件以及在这些部件之间涉及到的流程的示意图。首先,应用(110)将开始请求(200)传送到事务协调器(120),该请求表明 事务的开始。接着,应用(100)将更新请求(205 )(也就是对参 与器进行改变的请求)发送到参与器1。响应于接收到更新请求,参 与器1向事务协调器(120)注册(210)为参与事务的参与器并且 在响应中接收该事务的事务标识符。接着,应用将更新请求(215) 发送到参与器2。响应于接收到更新请求,参与器2向事务协调器(120)注册(220 )为参与事务的参与器并且在响应中接收该事务 的事务标识符。响应于参与器1和参与器2成功地执行更新请求,应用(110) 将提交请求(225 )发送到事务协调器(120)。直至提交处理完成 后,应用(110)才重新获得控制。响应于来自应用(110)的提交请求(225 ),事务协调器(120) 将第一 日志记录强制写入(230 )到日志(125 ),其中第一 日志记 录包括与事务相关联的标识符、与参与器1相关联的标识符以及与 参与器2相关联的标识符。参与器1不具有与参与器2相关联的数 据并且反之亦然。由此,只有事务协调器才具有与参与事务的参与 器相关联的数据。注意到直至所写数据被固定存储到非易失性存储 器后,强制写入才返回。接着, 一旦强制的日志写入完成(确保数据存储于非易失性存 储器中),事务协调器(120)就将预备请求(235 )传送到参与器1。 应当理解,参与器在参与到事务中之后在它接收预备请求之前采用 回滚(rollback)。换而言之,如果参与器在参与到事务中之后而在 接收预备请求之前选择针对事务采取单方面动作,则它应当回滚与 事务相关联的更新。响应于接收到预备请求,参与器1将第二日志记录强制写入 (240 )到日志,其中第二日志记录包括响应于注册请求而接收的事 务标识符以及与事务相关联的状态即"待定(in doubt)"。这一状态 表明参与器1再也不能采用回滚而是需要等待被通知事务结果。接 着,参与器1将提交表决(245 )(即对预备请求的响应)传送到事 务协调器(120),该提交表决表明参与器1能够成功地参与事务。 应当理解,如果参与器1不能成功地参与事务,则它应当收回它所 执行的任何更新并且表决为"回滚"而不写入日志记录。接着,事务协调器(120)将预备请求(250 )传送到参与器2。 响应于接收到预备请求,参与器2将第三日志记录强制写入(255 ) 到曰志,其中第三日志记录包括事务标识符以及与事务相关联的状 态即"待定"。这一状态表明参与器2再也不能采用回滚而是需要等 待被通知事务结果。接着,参与器2将提交表决(260)(即响应) 传送到事务协调器(120),该提交表决表明参与器2能够成功地参 与事务。应当理解,如果参与器2不能成功地参与事务,则它应当 收回它所执行的任何更新并且表决为"回滚"而不写入日志记录。事务协调器(120)收集所有表决,但是收集的表决不被硬存 储于日志(125)中。接着,事务协调器(120)将第四日志记录强 制写入(265 )到日志,其中第四日志记录包括事务标识符以及与事 务相关联的计算结果。假设所有参与器的表决为"提交",则决定 为"提交,,。如果一个或者多个参与器的表决为"回滚",则决定 为"回滚"。接着,事务协调器(120)将提交请求(270)传送到参与器1 而将提交请求(275 )传送到参与器2,这些请求向参与器表明它们 应当提交事务。在已经提交事务之后,参与器"遗忘"该事务,使得 与参与器相关联的日志记录符合清除条件。在第一例子中,在事务协调器(120)在第一日志记录被写入 之后、但是在预备请求(235 )被发送到参与器1之前发生故障的情 况下,在重启时,事务协调器(120)读取日志(125)以确定日志 (125)中记录的事务的最后成功状态。在该第一例子中,事务协调 器(120)所记录的第一 日志记录被读取并且包括与事务标识符、参 与器1的标识符和参与器2的标识符相关联的数据。根据日志(125) 中的数据,事务协调器(120)确定接收到对提交事务的请求、但是 尚未收集来自所有参与器的表决。结果,得知参与器尚未被提交, 而为了保证事务的原子性,将回滚请求发送到各参与器。因而确保了事务的原子性。在第二例子中,如果事务协调器(120)在从参与器1接收提交表决(245 )之后发生故障,则在重启时,事务协调器(120)读 取日志(125)以确定日志(125)中记录的事务的最后成功状态。 在该第二例子中,事务协调器(120)所记录的第一日志记录被读取 并且包括与事务标识符、参与器1的标识符和参与器2的标识符相 关联的数据。根据日志(125)中的数据,事务协调器(120)确定 从应用(110)接收到对提交事务的请求、但是尚未收集来自所有参 与器的表决。结果,得知参与器尚未被提交,而为了保证事务的原 子性,将回滚请求发送到各参与器。因而确保了事务的原子性。在第三例子中,如果事务协调器(120)在提交请求被发送到 参与器l之后发生故障,则在重启时,事务协调器(120)读取曰志 (125)以确定日志(125)中记录的事务的最后成功状态。事务协调器(120)所记录的第四日志被读取并且包括与事务标识符相关联 的数据以及与事务相关联的计算结果(即"提交,,)。根据此数据,事务协调器(120)确定各参与器的表决为"提交"并且提交结果被 计算过、但是不能确定提交是否传送到了任意参与器。结果,事务 协调器将提交请求(270, 275 )发送到参与器1和参与器2。因而保 证了事务的原子性。注意到在现有技术的流程中,事务协调器两次对它的日志进行 强制操作第一次是对事务标识符和参与器数据进行记录,而第二 次是对事务标识符以及与事务相关联的计算结果进行记录。虽然录 入此数据会实现原子性,但不利的是,事务协调器写入日志会耗费 时间。还注意到参照图2描述的事务是两阶段提交事务的例子。本领 域技术人员将认识到有很多可能的变型,例如事务可以包含任何数 目的参与器并且一个或者多个参与器可以不执行更新。图3是根据本发明第一实施例在图2的示例性两阶段提交事务 中涉及到的部件以及在这些部件之间涉及到的流程的示意图。在该 第一实施例中,由于与结果的指示相关联的数据随预备请求一起传 送,所以减少了事务协调器(120)所执行的日志写入的次数。首先,应用(110)将开始请求(300 )传送到事务协调器(120), 该请求表明事务的开始。接着,应用(100)将更新请求(305 )(也 就是对参与器进行改变的请求)发送到参与器1。响应于接收到更新 请求,参与器1向事务协调器(120)注册(310)为参与事务的参 与器。接着,应用将更新请求(315)发送到参与器2。响应于接收 到更新请求,参与器2向事务协调器(120)注册(320 )为参与事 务的参与器。响应于参与器1和参与器2成功地执行更新请求,应用(110) 将提交请求(325 )发送到事务协调器(120)。响应于来自应用(110) 的提交请求(325 ),事务将第一日志记录强制写入(330 )到日志 (125),其中第一日志记录包括与事务相关联的标识符、与参与器
1相关联的标识符以及与参与器2相关联的标识符。
接着, 一旦强制的日志写入完成,事务协调器(120)就将预 备请求(335 )传送到参与器1。该预备请求包括数据,即"回滚" 这一结果指示。响应于接收到预备请求和关联数据,参与器1将第 二曰志记录写入(340 )到日志,其中第二日志记录包括事务标识符 以及"回滚,,指示。接着,参与器l将提交表决(345 )(即响应)传 送到事务协调器(120),该提交表决表明参与器1能够成功地参与 事务。
接着,事务协调器(120)将预备请求(350 )传送到参与器2。 该预备请求包括数据,即"提交"指示。响应于接收到预备请求和关 联数据,参与器2将第三日志记录写入(355 )到日志,其中第三日 志记录包括事务标识符以及提交结果。接着,参与器2将提交表决 (360 )(即响应)传送到事务协调器(120),该提交表决表明参 与器2能够成功地参与事务。
一旦事务协调器(120)已经收集了所有表决,事务协调器(120) 就能够有利地立即将与计算结果相关联的请求传送到参与器而无需 对计算结果进行日志写入,这是因为参与器本身会维护与结果相关 联的数据。由此,事务协调器(120)将提交请求(365 )传送到参 与器1而将提交请求(370 )传送到参与器2,这些请求向参与器表 明它们应当提交事务。
在第四例子中,在事务协调器(120)在写入第一日志记录之 后、但是在预备请求(335 )被发送到参与器l之前发生故障的情况 下,在重启时,事务协调器(120)读耳又第一日志记录并且确定从应 用(110)接收到对提交事务的请求、但是没有完成该事务。结果,
的请求,使得事务协调器(120)能够确定日志(125)中记录的事 务的最后成功状态。在该第四例子中,参与器1和参与器2进行答 复从而表明它们不具有日志记录。由此,事务协调器(120)确定尚 无任何预备被传送到参与器或者所有参与器都已经完成。结果,事
务协调器(120)将回滚传送到各参与器,这使得各参与器回滚或者
如果各参与器已经完成则没有影响。因而保证了事务的原子性。
在第五例子中,如果事务协调器(120)在从参与器1接收提 交表决(345 )之后发生故障,则在重启时,事务协调器(120)读 取第一 日志记录并且确定从应用(110)接收到对提交事务的请求、 但是没有完成该事务。结果,事务协调器(120)向各参与器发送对 接收它们已经录入的任何数据的请求,使得事务协调器(120)能够 确定日志(125)中记录的事务的最后成功状态。在该第五例子中, 参与器1利用第二日志记录中的数据也就是事务标识符和"回滚,,指 示进行答复。参与器2发送表明它不具有日志记录的答复。
事务协调器(120)确定由于没有参与器具有"提交"这一结 果指示的日志记录,所以没有参与器被提交,并且结果是将回滚传 送到各参与器。因而保证了事务的原子性。
在第六例子中,如果事务协调器(120)在提交请求被发送到 参与器l之后发生故障,则在重启时,事务协调器(120)向各参与 器发送对接收它们已经录入的任何数据的请求,使得事务协调器
(120)能够确定日志(125)中记录的事务的最后成功状态。在该 第六例子中,由于参与器1已经遗忘该事务为提交请求的一部分, 所以参与器1发送表明它不了解该事务的答复。参与器2利用第三 曰志记录中的数据也就是事务标识符和"提交"指示进行答复。现在, 事务协调器(120)能够确定由于最后的参与器(即参与器2)已 经发回所指示的提交结果,所以计算结果被提交过。事务协调器
(120)也能够确定由于参与器1已经遗忘该事务为提交请求的一 部分,所以提交请求被发送到了参与器1。由此,事务协调器(120) 立即将提交请求(370 )传送到参与器2。因而保证了事务的原子性。 然而也注意到如果事务协调器也将提交传送到参与器1 ,则尽管该提 交将被拒绝,但是由于参与器1的更新已被提交,所以事务的原子 性并不受损。
有利地,在本发明的第一实施例中,对于参与事务的参与器,
与对可能结果的指示相关联的数据随预备请求一起传送,这一指示 被"回滚,,到除预备所传送到的最后参与器(对于该参与器而言该指 示为"提交,,)以外的所有参与器。由此,事务协调器无需录入任何 与事务的结果相关联的数据,这是因为在发生故障时,事务协调器 能够从参与器本身恢复数据以便重建事务。如果没有参与器已经录 入"提交"指示,则回滚事务。注意到包含"回滚"指示是可选的,这是 因为就事务而言的回滚结果能够根据有无"提交"指示来确定。
优选地,在预备过程中具有"提交"指示的参与器是最后一个要 提交的参与器。可选地,参与器能够录入这一指示作为处理提交请 求的一部分,在该情况下它将需要保留该指示直至事务协调器告知 它遗忘该指示。
注意到作为对"回滚,,和/或"提交,,的替代,可以使用事务协调器 能够从中推断事务结果的任何指示。例如,这些指示可以是不同的 字符串、数字值或者二进制值。
注意到如果参与器在对预备的响应中表决为"回滚",则它能 够遗忘事务。
图4是根据本发明第二实施例在图2的示例性事务中涉及到的 部件以及在这些部件之间涉及到的流程的示意图。在第二实施例中, 事务协调器(120)无需维护日志,这是因为与参与器相关联的数据 随预备请求一起传送。有利地,这使得不再需要该事务协调器具有 对日志文件的访问权限。
首先,应用(110)将开始请求(400)传送到事务协调器(120), 该请求表明了事务的开始。接着,应用(110)将更新请求(405 ) 发送到参与器1。响应于接收到更新请求,参与器1 (410)向事务 协调器(120)注册(410)为参与事务的参与器。接着,应用将更 新请求(415)发送到参与器2。响应于接收到更新请求,参与器2 向事务协调器(120)注册(420 )为参与事务的参与器。响应于参 与器1和参与器2成功地执行更新请求,应用(110)将提交请求(425 ) 发送到事务协调器(120)。
响应于来自应用(110)的提交请求(425 ),事务协调器(120) 将预备请求(430 )传送到参与器1。该预备请求包括数据,即与事 务相关联的标识符以及与参与事务的各其它参与器(在这一例子中 为参与器2)相关联的标识符。响应于接收到预备请求和关联数据,参与器1将第一日志记录 写入(435 )到日志,其中第一日志记录包括事务标识符、与事务相 关联的状态即"待定"以及参与器2的标识符。接着,参与器1将提 交表决(440 )(即响应)传送到事务协调器(120),该提交表决 表明参与器1能够成功地参与事务。
接着,事务协调器(120)将预备请求(445 )传送到参与器2。 该预备请求包括数据,即与事务相关联的标识符以及与参与事务的 各其它参与器(在这一例子中为参与器1 )相关联的标识符。。
响应于接收到预备请求和关联数据,参与器2将第二日志记录 写入(450 )到日志,其中第二日志记录包括事务标识符、与事务相 关联的状态即"待定"以及参与器1的标识符。接着,参与器2将提 交表决(455 )(即响应)传送到事务协调器(120),该提交表决 表明参与器2能够成功地参与事务。
一旦事务协调器(120)已经收集所有表决,事务协调器(120) 就能够直接将与计算结果相关联的请求传送到参与器。也就是说, 事务协调器(120)将提交请求(460)传送到参与器1而将提交请 求(470)传送到参与器2,这些请求向参与器表明它们应当提交事 务。
响应于接收到提交请求,参与器1将第三日志记录强制写入 (465 )到日志,其中第三日志记录包括事务标识符、与事务相关联 的状态即"提交"以及参与器2的标识符。响应于接收到提交请求, 参与器2将第四曰志记录强制写入(475 )到曰志,其中第四曰志记 录包括事务标识符、与事务相关联的状态即"提交,,以及参与器1的 标识符。
直至事务协调器声明遗忘该事务是可接受的后,参与事务的参与器才能够遗忘该事务。这是因为事务协调器必须保证它能够从参 与器获取足够数据以便在事务协调器发生故障时重建事务。由此,在已经提交事务之后,事务协调器(120)将明确的遗忘请求(480) 传送到参与器1而将明确的遗忘请求(485 )传送到参与器2。现在 能够清除包括参与器数据的参与器日志记录。当事务协调器在发生故障之后重启时,参与器主动地联系事务 协调器并且发送它的日志记录中的事务协调器数据。根据日志记录, 事务协调器能够确定事务中涉及到的所有其它参与器的标识符,由 此事务协调器能够联系事务中涉及到的所有其它参与器以从它们的 日志记录获取数据。例如,参与器能够基于与协调器失去了联系来 决定联系事务协调器,其中能够由于自从它接收预备请求起预定时 间限制已经到期而确定与协调器失去了联系。在第七实施例中,在事务协调器(120)在预备请求(330 )被 发送到参与器1之前发生故障的情况下,在重启时,参与事务的任 何参与器都不联系事务协调器(120)。这是因为各参与器能够采用 回滚。由此保证了事务的原子性。在第八例子中,如果事务协调器(120)在从参与器1接收提 交表决(340)之后发生故障,则在重启之后,参与器l联系事务协 调器(120)并且提供第一日志记录中的数据,也就是事务标识符、 与事务相关联的状态即"待定,,以及参与器2的标识符。由此,根据 从参与器1接收的数据,事务协调器(120)现在得知参与器2也参 与到事务中。由此,事务协调器(120)请求来自参与器2的状态, 而参与器2利用表明它不具有日志记录的指示进行答复并且采用回 滚。事务协调器(120)由此确定参与器没有被要求过进行提交,结 果,将回滚传送到各参与器。因而保证了事务的原子性。在第九例子中,如果事务协调器(120)在提交请求被发送到 参与器l之后发生故障,则在重启之后,参与器l联系事务协调器 (120)。在这一例子中,参与器l发送如下数据,该数据包含来自 第三日志记录的数据,即事务标识符、与事务相关联的状态即"提交"
以及参与器2的标识符。这是因为事务尚未到达告知参与器1遗忘 事务的状态。由此,根据从参与器1接收的数据,事务协调器(120) 现在得知参与器2也参与到事务中并且参与器1已经被提交。结果,事务协调器(120)联系参与器2。在这一例子中,参与 器2发送第二日志记录中的数据,也就是事务标识符、与事务相关 联的状态即"待定"以及参与器1的标识符。事务协调器(120)因此 确定参与器2尚未被提交并且将提交传送到参与器2。因而保证了事 务的原子性。有利地,参与事务的参与器录入与参与该事务的其它参与器相 关联的参与器数据。由此,事务协调器无需录入与参与事务的所有 参与器相关联的任何数据。相反,在发生故障时,事务协调器能够 从参与器本身恢复与所有参与器相关联的数据。注意到在第二实施例中,在事务协调器发生故障之后能够使用 不同事务协调器来恢复事务。例如,能够由事务中涉及到的参与器 之一提供不同的事务协调器功能。注意到作为对"待定,,和/或"提交,,的替代,可以使用事务协调器 能够从中推断事务状态的任何指示。例如,这些指示可以是不同的 字符串、数字值或者二进制值。还注意到有可能对第一实施例和第二实施例进行组合。例如, 第一实施例的预备请求能够包括其它参与器的列表。这使得不再需 要事务协调器写入第一日志记录。注意到在这些例子中参与器例如可以是事务认知数据库 (transaction aware database ),而从应用到参与器的更新请求可以是 对更新数据库中数据的请求。还注意到尽管在例子中参与器和事务协调器均使用同一日志, 但是在实践中这些日志可以是不同日志。图5是事务系统(500 )的框图,其中第一数据处理系统(505 ) 包括所拥有的应用(510),而第二数据处理系统(515)包括用于 执行事务的事务协调器(520 )。还示出了包括用于管理第 一 资源(例
如数据库)的第一参与器的第三数据处理系统(530)。还示出了包 括用于管理第二资源(例如数据库)的第二参与器的第四数据处理 系统(535 )。该系统(500)也包括多个日志(525、 535和545 ), 其中事务协调器(520 )、第一参与器和第二参与器分别将一个或者 多个日志记录(即其中日志记录包括与事务相关联的数据)写到这 些曰志。应当理解,事务中涉及到的部件(即所拥有的应用(510)、 事务协调器(520 )、参与器l和参与器2)能够驻留于任何数据处 理系统上,并且这些部件能够全部驻留于同 一数据处理系统上。在发生与事务协调器和/或参与器执行于其上的系统相关联的 故障的情况下,数据能够用来帮助进行恢复。将认识到这样的故障 可能涉及断电,或者硬件设备故障,该硬件设备如板上存储器或者 保持数据库的DASD。如果事务协调器发生故障,则参与器必须等待直至事务协调器 恢复并且分析它的日志,以便推进事务。将认识到实现重启所花费 的时间对于任何业务都是重要的。例如,如果事务协调器的重启花 费了 一个小时,则参与器如保险数据库在这一小时内不可用并且业 务不能进行。现在将参照图6和图7描述优选实施例。图6是事务系统(600) 的框图,其中第一数据处理系统(605 )包括所拥有的应用(610), 而第二数据处理系统(615 )包括用于执行事务的事务协调器(620 )。 还示出了包括用于管理第一资源(例如数据库)的参与器1的第三 数据处理系统(630 )。还示出了包括用于管理第二资源(例如数据 库)的参与器2的第四数据处理系统(640)。该系统(600)也包 括多个日志(625、 635和645 ),其中事务协调器(620)、参与器 1和参与器2能够分别将一个或者多个日志记录(即其中日志记录包 括与事务相关联的数据)写到这些日志。应当注意,事务中涉及到的部件(即所拥有的应用(610)、事务协调器(620 )、参与器1 和参与器2)能够驻留于任何数据处理系统上,并且这些部件能够全 部驻留于同 一数据处理系统上。在优选实施例的事务系统(600)中,参与器1和参与器2可 配置用以进行通信。图7是在图6的事务系统(600)中涉及到的部件以及在这些 部件之间涉及到的流程的示意图。应用(610)将开始请求传送到事 务协调器(620 ),该请求表明了事务的开始。接着,应用(610) 将更新请求发送到参与器1。响应于接收到更新请求,参与器1向事 务协调器(620)注册为参与事务的参与器。接着,应用将更新请求 发送到参与器2。响应于接收到更新请求,参与器2向事务协调器 (620 )注册为参与事务的参与器。为求简明在图7中没有描绘这些 流程。响应于参与器1和参与器2成功地执行更新请求,应用(610) 将提交请求(700 )发送到事务协调器(620 )。响应于来自应用(610)的提交请求(700),事务协调器(620) 将第一日志记录强制写入(705 )到日志(625 ),其中第一日志记 录包括与事务相关联的标识符、与参与器1相关联的标识符以及与 参与器2相关联的标识符。注意到直至所写数据被硬存储到非易失 性存储器后,强制写入才返回。可选地,能够应用上文公开的方法使得事务协调器无需维护日接着,一旦强制的日志写入完成(确保数据存储于非易失性存储器中),事务协调器(620)就将预备请求(710)传送到参与器1。 该预备请求包括数据,即与事务相关联的标识符以及包括与参与事 务的所有参与器(在这一例子中为参与器1和参与器2)相关联的标 识符的列表。可选地,该预备请求包括与参与事务的各其它参与器 即参与器2相关联的标识符。响应于接收到预备请求和关联数据,参与器1将第二日志记录 强制写入(715)到日志(635 ),其中第二日志记录包括事务标识 符、与事务相关联的状态即"待定"、参与器1的标识符以及参与器2 的标识符。接着,参与器1将提交表决(720)(即响应)传送到事 务协调器(620),该提交表决表明参与器1能够成功地参与事务。 接着,事务协调器(620)将预备请求(725 )传送到参与器2。 该预备请求包括数据,即与事务相关联的标识符以及包括与参与事 务的所有参与器(在这一例子中为参与器1和参与器2)相关联的标 识符的列表。响应于接收到预备请求和关联数据,参与器2将第三日志记录 强制写入(730 )到日志(645 ),其中第三日志记录包括事务标识 符、与事务相关联的状态即"待定"、参与器1的标识符以及参与器2 的标识符。接着,参与器2将提交表决(735 )(即响应)传送到事 务协调器(620 ),该提交表决表明参与器2能够成功地参与事务。 可选地,该预备请求包括与参与事务的各其它参与器即参与器1相 关联的标识符。一旦事务协调器(620 )已经收集了所有表决,事务协调器(620 ) 就能够直接将与计算结果相关联的请求传送到参与器。也就是说, 事务协调器(620 )将提交请求(745 )传送到参与器1而将提交请 求(755 )传送到参与器2,这些请求向参与器表明它们应当提交事 务。响应于接收到提交请求,参与器1将第四日志记录强制写入 (750 )到曰志(635 ),其中第四日志记录包括事务标识符、与事 务相关联的状态即"提交"以及参与器2的标识符。响应于接收到提 交请求,参与器2将第五日志记录强制写入(760)到日志,其中第 五日志记录包括事务标识符、与事务相关联的状态即"提交,,以及参 与器1的标识符。直至事务协调器声明遗忘该事务是可接受的后,参与事务的参 与器才能够遗忘该事务。这是因为事务协调器必须保证它能够从参 与器获取足够数据以便在事务协调器发生故障时重建事务。由此, 在已经提交事务之后,事务协调器(620)将明确的遗忘请求(780 ) 传送到参与器1而将明确的遗忘请求(785 )传送到参与器2。现在 能够清除包括参与器数据的参与器日志记录。 现在将参照图6、图7和图8描述根据优选实施例的处理。在 事务协调器(620)发生故障的情况下,参与器以多种方法中的任何 方法检测(步骤800 )故障。在一个例子中,参与器不能对"预备" 命令做出响应。在另一例子中,参与器以有规律的间隔对"预备,,命 令做出响应直至达到参与器确定事务协调器已经发生故障的阈值。 在又一例子中,在参与器等待来自事务协调器的结果的同时达到超 时值。参照图8,响应于参与器1确定(步骤800 )事务协调器(620 ) 已经发生故障,参与器1检查事务协调器(620 )正在协调的事务的 事务标识符。参与器1然后比较该事务的事务标识符与它的日志 (635 )中的一个或者多个日志记录。响应于该比较,参与器l确定 与事务相关联的状态以及与参与事务的各其它参与器(即参与器2) 相关联的标识符。参与器1将广播消息发送(步骤805 )到参与器2。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。由此,有利地,在 事务协调器在将预备请求发送到参与器2之前发生故障的情况下, 参与器2将从参与器1本身接收参与器1的标识符。优选地,参与 器1在预定时间阈值内等待来自参与器2的广播消息。类似地,响应于参与器2确定(步骤810)事务协调器(620) 已经发生故障,参与器2检查事务协调器(620)正在协调的事务的 事务标识符。参与器2然后比较该事务的事务标识符与它的日志 (645 )中的一个或者多个日志记录。响应于该比较,参与器2确定 与事务相关联的状态以及与参与事务的各其它参与器(即参与器1 ) 相关联的标识符。参与器2将广播消息发送(步骤815)到参与器1。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。优选地,该消息也包括含有与参与事务的所有参与器(在这一例子
中为参与器1和参与器2)相关联的标识符的列表。优选地,参与器2在预定时间阔值内等待来自参与器1的广播消息。响应于从参与器2接收到广播消息,参与器l将来自它的曰志记录中的与事务相关联的状态和从参与器2接收的与事务相关联的状态相聚集以便解决(步骤820)事务。响应于解决事务,参与器i将日志记录强制写入(825 )到它的日志(635 ),其中该日志记录包括事务标识符、与事务相关联的 状态、参与器1的标识符以及参与器2的标识符。响应于从参与器1接收到广播消息,参与器2将来自它的日志 记录中的与事务相关联的状态与从参与器1接收的与事务相关联的 状态相聚集以便解决(步骤830 )事务。响应于解决事务,参与器2将日志记录强制写入(835 )到它 的曰志(645 ),其中该日志记录包括事务标 识符、与事务相关!^:的 状态、参与器1的标识符以及参与器2的标识符。优选地,在事务协调器(620 )重启时,参与器将它们的日志 记录传送到事务协调器(620)。优选地,直至事务协调器(620 )重启并且表明遗忘该事务是 可接受的后,参与事务的参与器才能遗忘(步骤840,步骤845 )该 事务。这是因为各参与器必须保证它能够从它的日志以及从各其它 参与器获取足够数据以便在事务协调器(620 )发生故障时重建事务。 由此,在启动时,参与器将它们的日志记录传送到事务协调器(620 )。 在确定已经解决事务时,事务协调器(620)将明确的遗忘请求传送 到参与器1以及将明确的遗忘请求传送到参与器2。现在能够清除包 括参与器数据的参与器日志记录。可选地,直至向各其它参与器发送确认该事务已经被该参与器 解决的消息并且直至从各其它参与器接收到确认该事务已经被各其 它参与器解决的消息后,参与事务的参与器才能遗忘(步骤840,步骤845 )该事务。由此,优选地,在解决事务(步骤820 )时,参与器l将广播消息发送到参与器2。该消息包括含有事务标识符的字段以及含有与 已解决的事务相关联的状态的字段。优选地,参与器2确认广播消 息的接收。另外,优选地,在解决事务(步骤830 )时,参与器2将广播 消息发送到参与器1 。该消息包括含有事务标识符的字段以及含有与 已解决的事务相关联的状态的字段。优选地,参与器1确认广播消 息的接收。一旦参与器1已经发送含有与已解决的事务相关联的状态的广 播消息并且一旦参与器1已经从参与器2接收到含有与已解决的状 态相关联的状态的广播消息,参与器1就清除它的日志记录。 一旦 参与器2已经发送含有与已解决的事务相关联的状态的广播消息并 且一旦参与器2已经从参与器1接收含有与已解决的状态相关联的 状态的广播消息,参与器2就清除它的日志记录。在第十例子中,在事务协调器(620 )在预备请求被发送到参 与器1之前发生故障的情况下,参与器不相互联系。这是因为各参 与器能够采用收回。根据优选实施例,在第十一例子中,在事务协调器(620 )在 从参与器1接收提交表决之后发生故障的情况下,响应于检测到(步 骤800 )事务协调器(620)的故障,参与器1检查事务协调器(620) 正在协调的事务的事务标识符(例如T1)。参与器1然后比较该事 务的事务标识符与它的日志(635 )中的一个或者多个日志记录。响 应于该比较,参与器1确定与事务相关联的状态以及与参与事务的 各其它参与器(即参与器2)相关联的标识符。参与器l将广播消息发送(步骤805 )到参与器2。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。 优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。下文示出了广播消 息的例子广播(T1;待定;参与器l,参与器2) 类似地,响应于参与器2确定(步骤810)事务协调器(620) 已经发生故障,参与器2检查事务协调器(620)正在协调的事务的 事务标识符(即T1)。参与器2然后比较该事务的事务标识符与它 的曰志(645 )中的一个或者多个日志记录。响应于该比较,参与器 2确定与事务相关联的状态以及与参与事务的各其它参与器(即参与 器1 )相关联的标识符。响应于从参与器l接收到广播消息,参与器2确定事务协调器 (620 )发送过预备消息到参与器1。在优选实施例中,响应于确定发送过预备消息到参与器1,参 与器2预备并且发送(步骤815)广播消息到参与器1。该消息包括 含有事务标识符的字段以及含有与该事务相关联的状态的字段。优选地,该消息包括含有与参与事务的所有参与器(在这一例子中为 参与器1和参与器2)相关联的标识符的列表。下文示出了广播消息 的例子广播(T1;待定;参与器l,参与器2)响应于从参与器2接收到广播消息,参与器1将来自它的日志 记录中的与事务相关联的状态(即待定)和从参与器2接收的与事 务相关联的状态(即待定)相聚集以便解决(步骤820 )事务。在第 十一例子中,参与器1通过提交来解决(步骤820 )事务。响应于解决事务,参与器i将日志记录强制写入(825 )到它 的日志(635 ),其中该日志记录包括事务标识符、与事务相关联的 状态、参与器1的标识符以及参与器2的标识符。优选地,参与器1将广播消息发送到参与器2。该消息包括含 有事务标识符的字段以及含有与已解决的事务相关联的状态的字 段。优选地,参与器2确认广播消息的接收。响应于从参与器l接收到广播消息,参与器2将来自它的日志 记录中的与事务相关联的状态(即待定)和从参与器1接收的与事 务相关联的状态(即待定)相聚集以便解决(步骤830 )事务。在第 十一例子中,参与器2通过提交来解决(步骤830)事务。
响应于解决事务,参与器2将日志记录强制写入(835 )到它 的日志(645 ),其中该日志记录包括事务标识符、与事务相关联的 状态、参与器1的标识符以及参与器2的标识符。优选地,参与器2将广播消息发送到参与器1。该消息包括含 有事务标识符的字段以及含有与已解决的事务相关联的状态的字 段。优选地,参与器1确认广播消息的接收。参与器1和参与器2的日志记录现在符合清除条件(步骤840 和845 )。可选地,在第十二例子中,在事务协调器(620 )在从参与器1 接收提交表决之后发生故障的情况下,响应于检测到(步骤800 )事 务协调器(620)的故障,参与器1检查事务协调器(620)正在协 调的事务的事务标识符(例如T2)。参与器1然后比较该事务的事 务标识符与它的日志(635 )中的一个或者多个日志记录。响应于该 比较,参与器1确定与事务相关联的状态以及与参与事务的各其它 参与器(即参与器2)相关联的标识符。参与器l将广播消息发送(步骤805 )到参与器2。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。 优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。下文示出了广播消 息的例子广播(T2;待定;参与器l,参与器2)类似地,响应于参与器2确定(步骤810)事务协调器(620) 已经发生故障,参与器2检查事务协调器(620)正在协调的事务的 事务标识符(即T2)。参与器2然后比较该事务的事务标识符与它 的日志(645 )中的一个或者多个日志记录。响应于该比较,参与器 2确定与事务相关联的状态以及与参与事务的各其它参与器(即参与 器1 )相关联的标识符。应当注意,由于事务协调器(620)在预备请求被发送到参与 器2之前发生故障,所以参与器2不具有日志记录并且采用收回。 参与器2将广播消息发送(步骤815)到参与器1。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。下文示出了广播消 息的例子广播(T2;收回;参与器l,参与器2)响应于从参与器2接收到广播消息,参与器1将来自它的日志 记录中的与事务相关联的状态(即待定)和从参与器2接收的与事 务相关联的状态(即收回)相聚集以便解决(步骤820 )事务。在第 十二例子中,参与器1通过收回来解决(步骤820 )事务。参与器1无需写入它的日志,这是因为参与器2已经解决了事 务(即参与器2采用了收回)。由此,无需清除与参与器1和参与 器2相关联的日志记录。在第十三例子中,在事务协调器(620 )在提交请求被发送到 参与器1之后发生故障的情况下,响应于接收到提交请求,参与器1 进行提交。响应于提交,参与器1将日志记录强制写入到它的曰志 (635 ),其中日志记录包括事务标识符、与事务相关联的状态、参 与器1的标识符以及参与器2的标识符。应当理解,该事务尚未达 到参与器1被告知遗忘事务的状态。响应于检测到(步骤800 )事务协调器(620 )的故障,参与器 l检查事务协调器(620)正在协调的事务的事务标识符(即T3)。 参与器1然后比较该事务的事务标识符与它的日志(635 )中的一个 或者多个日志记录。响应于该比较,参与器1确定与事务相关联的 状态以及与参与事务的各其它参与器(即参与器2)相关联的标识符。参与器1将广播消息发送(步骤805 )到参与器2。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。 优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。下文示出了广播消 息的例子
广播(T3;提交;参与器l,参与器2)类似地,响应于参与器2确定(步骤810)事务协调器(620) 已经发生故障,参与器2检查事务协调器(620)正在协调的事务的 事务标识符(即T3)。参与器2然后比较该事务的事务标识符与它 的日志(645 )中的一个或者多个日志记录。响应于该比较,参与器 2确定与事务相关联的状态以及与参与事务的各其它参与器(即参与 器1 )相关联的标识符。参与器2将广播消息发送(步骤815)到参与器1。该消息包 括含有事务标识符的字段以及含有与该事务相关联的状态的字段。优选地,该消息包括含有与参与事务的所有参与器(在这一例子中 为参与器1和参与器2)相关联的标识符的列表。下文示出了广播消 息的例子广播(T3;待定;参与器l,参与器2)响应于从参与器l接收到广播消息,参与器2将来自它的日志 记录中的与事务相关联的状态(即待定)和从参与器1接收的与事 务相关联的状态(即提交)相聚集以便解决(步骤820 )事务。在第 十三例子中,参与器2通过提交来解决(步骤830 )事务。响应于解决事务,参与器2将日志记录强制写入(步骤835 ) 到它的日志(645 ),其中日志记录包括事务标识符、与事务相关联 的状态、参与器1的标识符以及参与器2的标识符。应当理解,参与器2已经从参与器1接收了广播消息,该广播 消息包括含有事务标识符的字段以及含有与已解决的事务相关联的 状态的字段。这是因为参与器1提交了该事务。优选地,参与器2 确i人广播消息的接收。优选地,参与器2将广播消息发送到参与器1。该消息包括含 有事务标识符的字段以及含有与已解决的事务相关联的状态的字 段。优选地,参与器1确认广播消息的接收。参与器1和参与器2的日志记录现在符合清除条件(步骤840 和845 )。
有利地,参与器在该参与器无需等待直至事务协调器重启的情 况下就能够解决事务。由此,资源无需保持锁定,并且緩解了延迟。
权利要求
1.一种用于为涉及到多个参与器的工作单元提供原子性的方法,所述方法包括以下步骤将预备请求发送到至少一个参与器,其中所述请求包括为了恢复所述工作单元而需要的数据;以及在恢复所述工作单元时,恢复所述工作单元的步骤,其包括从所述至少一个参与器获得所述数据;以及使用所述获得的数据来恢复和保留所述工作单元的原子性。
2. 如权利要求l所述的方法,其中所述数据包括如下细节,根 据所述细节能够确定所述工作单元的结果。
3. 如权利要求1或者2所述的方法,其中所述数据包括所述工 作单元中其它参与器的列表。
4. 如任一前述权利要求所述的方法,其中向预备请求被发送到 的最后参与器发送的所述数据包括提交所述工作单元的结果的指 示。
5. 如任一前述权利要求所述的方法,其中所述恢复所述工作单 元的步骤还包括响应于所述获得的数据包含提交所述工作单元的结果的指示, 将提交请求发送到所述至少 一个参与器。
6. 如权利要求5所述的方法,还包括以下步骤 将遗忘请求发送到所述至少一个参与器。
7. 如任一前述权利要求所述的方法,其中所述从所述至少一个 参与器获得数据的步骤包括将对所述数据的请求发送到所述至少 一个参与器。
8. 如任一前述权利要求所述的方法,其中所述从所述至少一个 参与器获得数据的步骤包括从所述至少一个参与器接收消息,所述消息包括所述数据。
9. 一种用于参与工作单元的方法,所述方法包括以下步骤  从所述工作单元的协调器接收预备请求,所述预备请求包括代表所述协调器进行存储的数据;以及处理所述预备请求,所述处理步骤包括以下步骤 确定能够完成更新;在非易失性存储器中存储所述数据;以及 对所述预备请求做出响应,所述响应包括能够完成更新这 一指示。
10. 如权利要求9所述的方法,还包括以下步骤 从所述协调器接收对所述数据的请求;以及响应于接收到所述请求,将所述数据提供给所述协调器。
11. 如权利要求9所述的方法,还包括以下步骤 将所述数据发送到所述协调器。
12. 如权利要求11所述的方法,其中所述发送数据的步骤对确 定与所述协调器失去联系做出响应。
13. —种用于为涉及到多个参与器的工作单元提供原子性的协 调器,所述协调器包括用于将预备请求发送到至少一个参与器的装置,其中所述请求 包括为了恢复所述工作单元而需要的数据;以及用于在恢复所述工作单元时恢复所述工作单元的装置,其包括 用于从所述至少一个参与器获得所述数据的装置;以及 用于使用所述获得的数据来恢复和保留所述工作单元的原 子性的装置。
14. 如权利要求13所述的协调器,其中所述数据包括如下细节, 根据所述细节能够确定所述工作单元的结果。
15. 如权利要求13或者14所述的协调器,其中所述数据包括 所述工作单元中其它参与器的列表。
16. 如权利要求13至15中任一权利要求所述的协调器,其中 向预备请求被发送到的最后参与器发送的所述数据包括提交所述工 作单元的结果的指示。
17. 如权利要求13至16中任一权利要求所述的协调器,其中 所述用于恢复所述工作单元的装置还包括用于响应于所述获得的数据包含提交所述工作单元的结果的指 示,而将提交请求发送到所述至少一个参与器的装置。
18. 如权利要求17所述的协调器,还包括 用于将遗忘请求发送到所述至少一个参与器的装置。
19. 如权利要求13至18中任一权利要求所述的协调器,其中 所述用于从所述至少一个参与器获得数据的装置包括用于将对所述数据的请求发送到所述至少 一个参与器的装置。
20. 如权利要求13至19中任一权利要求所述的协调器,其中 所述用于从所述至少一个参与器获得数据的装置包括用于从所述至少 一 个参与器接收消息的装置,所述消息包括所 述数据。
21. —种用于参与工作单元的参与器,包括用于从所述工作单元的协调器接收预备请求的装置,所述预备请求包括代表所述协调器进行存储的数据;以及用于处理所述预备请求的装置,包括用于确定能够完成更新的装置; 用于存储所述数据的非易失性存储器;以及 用于对所述预备请求做出响应的装置,所述响应包括能够 完成更新的这一指示。
22. 如权利要求21所述的参与器,还包括用于从所述协调器接收对所述数据的请求的装置;以及 用于响应于接收到所述请求而将所述数据提供给所述协调器的 装置。
23. 如权利要求21所述的参与器,还包括 用于将所述数据发送到所述协调器的装置。
24. 如权利要求23所述的参与器,其中所述发送数据的装置对 确定与所述协调器失去联系做出响应。
25. —种计算机程序,包括当所述程序运行于计算机上时适于 执行如权利要求1至8中任一权利要求所述的所有步骤的程序代码装置。
26. —种计算机程序,包括当所述程序运行于计算机上时适于 执行如权利要求9至12中任一权利要求所述的所有步骤的程序代码装置。
27. —种用于解决涉及到多个参与器的工作单元的方法,所述 方法包括以下步骤所述多个参与器中的各参与器获得与所述多个参与器中的各其 它参与器相关联的标识符数据;所述多个参与器中的各参与器从所述多个参与器中的各其它参 与器获得包括与所述工作单元相关联的状态的第 一消息;以及至少一个参与器使用接收的第一消息来恢复所述工作单元。
28. 如权利要求27所述的方法,其中所述获得所述第一消息的 步骤对确定与所述协调器失去联系做出响应。
29. 如权利要求27或者28所述的方法,其中所述使用步骤包括将所述第 一 消息中的所述状态和与所述至少 一 个参与器相关联 的日志记录中的状态相聚集;以及使用所述聚集的状态来恢复所述工作单元。
30. 如权利要求27至29中任一权利要求所述的方法,其中所 述第一消息还包括与所述工作单元中涉及到的所述多个参与器中的 各参与器相关联的标识符的列表。
31. 如权利要求27至30中任一权利要求所述的方法,还包括 以下步骤响应于恢复所述工作单元,所述至少一个参与器将第二 消息发送到所述多个参与器中的各其它参与器。
32. 如权利要求31所述的方法,其中所述第二消息包括与所述 工作单元相关联的结果。
33. 如权利要求31或者32所述的方法,还包括以下步骤所述至少一个参与器和所述多个参与器中的各其它参与器清除关联日 志记录。
34. 如权利要求27至33中任一权利要求所述的方法,还包括 以下步骤响应于协调器的重启,所述多个参与器中的各参与器将 关联日志记录发送到所述协调器。
35. 如权利要求27至34中任一权利要求所述的方法,还包括 以下步骤响应于协调器的重启,所述协调器向所述多个参与器中 的各参与器发送对清除关联日志记录的请求。
36. 如权利要求27至35中任一权利要求所述的方法,其中所 述获得所述第 一 消息的步骤包括所述多个参与器中的各参与器向所述多个参与器中的各其它参 与器发送对所述第一消息的请求;以及响应于接收到请求,所述多个参与器中的各参与器将所述第一 消息发送到所述多个参与器中的各其它参与器。
37. 如权利要求27至36中任一权利要求所述的方法,其中所 述状态包括结果。
38. 如权利要求27至37中任一权利要求所述的方法,其中所 述获得所述标识符的步骤包括从协调器获得包括所述标识符的预 备请求。
39. —种用于解决涉及到多个参与器的工作单元的系统,所述 系统包括用于使所述多个参与器中的各参与器获得与所述多个参与器中 的各其它参与器相关联的标识符数据的装置;用于使所述多个参与器中的各参与器从所述多个参与器中的各 其它参与器获得包括与所述工作单元相关联的状态的第一消息的装 置;以及用于使至少一个参与器使用接收的第一消息来恢复所述工作单 元的装置。
40. 如权利要求39所述的系统,其中所述用于获得所述第一消息的装置对确定与所述协调器失去联系做出响应。
41. 如权利要求39或者40所述的系统,其中所述用于使用的 装置包括用于将所述第 一 消息中的所述状态以和与所述至少 一 个参与器 相关联的日志记录中的状态相聚集的装置;以及用于使用所述聚集的状态来恢复所述工作单元的装置。
42. 如权利要求39至41中任一权利要求所述的系统,其中所 述第一消息还包括与所述工作单元中涉及到的所述多个参与器中的 各参与器相关联的标识符的列表。
43. 如权利要求39至42中任一权利要求所述的系统,还包括 用于响应于恢复所述工作单元而使所述至少一个参与器将第二消息 发送到所述多个参与器中的各其它参与器的装置。
44. 如权利要求43所述的系统,其中所述第二消息包括与所述 工作单元相关联的结果。
45. 如权利要求43或者44所述的系统,还包括用于使所述 至少一个参与器和所述多个参与器中的各其它参与器清除关联曰志 记录的装置。
46. 如权利要求39至45中任一权利要求所述的系统,还包括 用于响应于协调器的重启而使所述多个参与器中的各参与器将关联 日志记录发送到所述协调器的装置。
47. 如权利要求39至46中任一权利要求所述的系统,还包括 用于响应于协调器的重启而使所述协调器向所述多个参与器中的各 参与器发送对清除关联日志记录的请求的装置。
48. 如权利要求39至47中任一权利要求所述的系统,其中所 述用于获得所述第一消息的装置包括用于使所述多个参与器中的各参与器向所述多个参与器中的各 其它参与器发送对所述第一消息的请求的装置;以及用于响应于接收到请求而使所述多个参与器中的各参与器将所 述第一消息发送到所述多个参与器中的各其它参与器的装置。
49. 如权利要求39至48中任一4又利要求所述的系统,其中所 述状态包括结果。
50. 如权利要求39至49中任一权利要求所述的系统,其中所 述用于获得所述标识符的装置包括用于从协调器获得包括所述标 识符的预备请求的装置。
51. —种用于解决涉及到多个参与器的工作单元的参与器,所 述参与器包括用于获得与所述多个参与器中的各其它参与器相关联的标识符 数据的装置;用于从所述多个参与器中的各其它参与器获得包括与所述工作 单元相关联的状态的第一消息的装置;以及用于使用接收的第一消息来恢复所述工作单元的装置。
52. —种计算机程序,包括当所述程序运行于计算机上时适于 执行如权利要求27至38中任一权利要求所述的所有步骤的程序代 码装置。
全文摘要
本发明提供了一种用于为涉及到多个参与器的工作单元提供原子性的方法和系统。该方法包括以下步骤将预备请求发送到至少一个参与器,其中该请求包括为了恢复工作单元而需要的数据;以及在恢复工作单元时,恢复工作单元,包括从至少一个参与器获得数据;以及使用获得的数据来恢复和保留工作单元的原子性。利用本发明,参与器在该参与器无需等待直至事务协调器重启的情况下就能够解决事务。由此,资源无需保持锁定,并且缓解了延迟。
文档编号G06Q10/00GK101151630SQ200680010037
公开日2008年3月26日 申请日期2006年4月6日 优先权日2005年4月12日
发明者J·E·加尔扎, M·马尔霍兰, S·J·霍布森, S·鲍威尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1