ORACLE倒回:元数据驱动的撤销

申请号 CN201280060770.4 申请日 2012-10-30 公开(公告)号 CN104272247A 公开(公告)日 2015-01-07
申请人 甲骨文国际公司; 发明人 S·戈尔;
摘要 描述了元数据驱动的撤销。在一个 实施例 中,元 数据存储库 存储与操作关联的元数据。与每个操作关联的属性也存储在元数据中。每个操作与包括用于为特定操作类型的操作生成撤销条目的指令的小撤销关联。撤销日志条目是在截获包括可撤销操作的 请求 时利用元数据和小撤销生成的。当发布撤销命令时,撤销日志中与特定业务事务关联的指令被执行,以“倒回”事务。
权利要求

1.一种系统,包括:
一个或多个处理器;
计算机可读的非暂时性存储介质,包括用于维护元数据存储库和用于提供撤销逻辑的指令;
其中元数据存储库用于存储与多个操作关联的元数据,其中每个操作与一操作类型关联,其中与每个操作关联的元数据识别至少:a)与那个操作关联的一个或多个属性,及b)与对应操作的操作类型关联的小撤销,其中小撤销包括用于生成撤销条目的指令;
其中撤销逻辑用于至少部分地基于元数据存储库中的元数据以及小撤销在撤销日志中生成一个或多个条目,其中撤销日志中的第一条目基于被系统截获的第一请求中的第一操作,并且包括用于与该操作关联的第一属性的第一属性值;
其中小撤销是能够撤销与操作类型关联的操作的对象。
2.如权利要求1所述的系统,其中第一请求是把目标系统上的第一对象的值从第二个值改变成第三个值的请求,并且撤销逻辑还配置为,响应于截获该请求,向目标系统生成用于在第二个值响应于第一请求而被改变之前从目标系统检索第二个值的第二请求。
3.如权利要求2所述的系统,其中撤销日志中的第一条目中的第一属性值与第二个值相同,其中该条目包括第一指令,第一指令当被一个或多个处理器执行时,使第一对象的值被设置成第一属性值。
4.如权利要求3所述的系统,其中撤销日志中的第一条目还包括第二指令,第二指令当被一个或多个处理器执行时,使撤销逻辑确定目标系统上的第一对象的值是否与第三个值相同,并且,响应于确定目标系统上的第一对象的值与第三个值相同,执行使第一对象的值被设置成第一属性值的指令。
5.如权利要求4所述的系统,其中撤销逻辑还配置为:
基于被系统截获的第二请求中的第二操作在撤销日志中生成第二条目,其中第二请求是把第二目标系统上的第二对象的值从第四个值改变成第五个值的请求,其中第二条目包括第四个值;
其中第一请求和第二请求包括把第一和第二请求都与第一会话关联的会话-识别信息;
其中第二条目包括第二指令,第二指令当被一个或多个处理器执行时,使第二对象的值被设置成第四个值;
其中该系统配置为把第一请求发送到第一目标系统并且把第二请求发送到第二目标系统;
其中撤销逻辑配置为响应于接收到执行与第一会话关联的撤销操作的第三请求而使第一、第二和第三指令在一个或多个处理器上执行。
6.如权利要求5所述的系统,其中撤销逻辑还配置为:
基于在第二请求之前并且在第一请求之后被截获的第三请求中的第三操作在第二撤销日志中生成第三条目,其中第三请求是改变第一目标系统上的第三对象的值的请求,并且第三请求与第二会话关联;
其中撤销逻辑配置为使第一、第二和第三指令在一个或多个处理器上执行,而不改变第三对象的值。
7.如权利要求1至6中任何一项所述的系统,其中第一操作是构造器操作,并且第一属性值是响应于请求而要在目标系统上构造的对象的名称,其中撤销日志中的第一条目包括当其被一个或多个处理器执行时使对象从目标系统被除去的指令。
8.一种存储指令的计算机可读的非暂时性存储介质,所述指令当被一个或多个处理器执行时,使一个或多个处理器执行:
维护存储与多个操作关联的元数据的元数据存储库,其中每个操作与一操作类型关联,其中与每个操作关联的元数据识别至少:a)与那个操作关联的一个或多个属性,及b)与对应操作的操作类型关联的小撤销,其中小撤销包括用于生成撤销条目的指令;
至少部分地基于元数据存储库中的元数据以及小撤销在撤销日志中生成一个或多个条目;
其中撤销日志中的第一条目基于被系统截获的第一请求中的第一操作,并且包括用于与该操作关联的第一属性的第一属性值;
其中小撤销是能够撤销与操作类型关联的操作的对象。
9.如权利要求8所述的计算机可读的非暂时性存储介质,其中第一请求是把目标系统上的第一对象的值从第二个值改变成第三个值的请求,并且所述指令还包括用于以下的指令:
响应于截获该请求,向目标系统生成用于在第二个值响应于第一请求而被改变之前从目标系统检索第二个值的第二请求。
10.如权利要求9所述的计算机可读的非暂时性存储介质,其中撤销日志中的第一条目中的第一属性值与第二个值相同,其中该条目包括第一指令,第一指令当被一个或多个处理器执行时,使第一对象的值被设置成第一属性值。
11.如权利要求10所述的计算机可读的非暂时性存储介质,其中撤销日志中的第一条目还包括第二指令,第二指令当被一个或多个处理器执行时,使撤销逻辑确定目标系统上的第一对象的值是否与第三个值相同,并且,响应于确定目标系统上的第一对象的值与第三个值相同,执行使第一对象的值被设置成第一属性值的指令。
12.如权利要求11所述的计算机可读的非暂时性存储介质,其中所述指令还包括用于以下的指令:
基于截获的第二请求中的第二操作在撤销日志中生成第二条目,其中第二请求是把第二目标系统上的第二对象的值从第四个值改变成第五个值的请求,其中第二条目包括第四个值;
其中第一请求和第二请求包括把第一和第二请求都与第一会话关联的会话识别信息;
其中第二条目包括第二指令,第二指令当被一个或多个处理器执行时,使第二对象的值被设置成第四个值;
把第一请求发送到第一目标系统并且把第二请求发送到第二目标系统;
响应于接收到执行与第一会话关联的撤销操作的第三请求,使第一、第二和第三指令在一个或多个处理器上执行。
13.如权利要求12所述的计算机可读的非暂时性存储介质,其中撤销逻辑还配置为:
基于在第二请求之前并且在第一请求之后被截获的第三请求中的第三操作在第二撤销日志中生成第三条目,其中第三请求是改变第一目标系统上的第三对象的值的请求,并且第三请求与第二会话关联;
其中撤销逻辑配置为使第一、第二和第三指令在一个或多个处理器上执行,而不改变第三对象的值。
14.如权利要求8至13中任何一项所述的计算机可读的非暂时性存储介质,其中第一操作是构造器操作,并且第一属性值是响应于请求而要在目标系统上构造的对象的名称,其中撤销日志中的第一条目包括当其被一个或多个处理器执行时使对象从目标系统被除去的指令。
15.一种方法,包括:
维护存储与多个操作关联的元数据的元数据存储库,其中每个操作与一操作类型关联,其中与每个操作关联的元数据识别至少:a)与那个操作关联的一个或多个属性,及b)与对应操作的操作类型关联的小撤销,其中小撤销包括用于生成撤销条目的指令;
至少部分地基于元数据存储库中的元数据以及小撤销在撤销日志中生成一个或多个条目;
其中撤销日志中的第一条目基于被系统截获的第一请求中的第一操作,并且包括用于与该操作关联的第一属性的第一属性值;
其中该方法是由一个或多个计算设备执行的;
其中小撤销是能够撤销与操作类型关联的操作的对象。
16.如权利要求15所述的方法,还包括:
其中第一请求是把目标系统上的第一对象的值从第二个值改变成第三个值的请求;及响应于截获该请求,向目标系统生成用于在第二个值响应于第一请求而被改变之前从目标系统检索第二个值的第二请求。
17.如权利要求16所述的方法,其中撤销日志中的第一条目中的第一属性值与第二个值相同,其中该条目包括第一指令,第一指令当被一个或多个处理器执行时,使第一对象的值被设置成第一属性值。
18.如权利要求17所述的方法,其中撤销日志中的第一条目还包括第二指令,第二指令当被一个或多个处理器执行时,使撤销逻辑确定目标系统上的第一对象的值是否与第三个值相同,并且,响应于确定目标系统上的第一对象的值与第三个值相同,执行使第一对象的值被设置成第一属性值的指令。
19.如权利要求18所述的方法,还包括:
基于被截获的第二请求中的第二操作在撤销日志中生成第二条目,其中第二请求是把第二目标系统上的第二对象的值从第四个值改变成第五个值的请求,其中第二条目包括第四个值;
其中第一请求和第二请求包括把第一和第二请求都与第一会话关联的会话识别信息;
其中第二条目包括第二指令,第二指令当被一个或多个处理器执行时,使第二对象的值被设置成第四个值;
把第一请求发送到第一目标系统并且把第二请求发送到第二目标系统;
响应于接收到执行与第一会话关联的撤销操作的第三请求,使第一、第二和第三指令在一个或多个处理器上执行。
20.如权利要求15至19中任何一项所述的方法,其中第一操作是构造器操作,并且第一属性值是响应于请求而要在目标系统上构造的对象的名称,其中撤销日志中的第一条目包括当其被一个或多个处理器执行时使对象从目标系统被除去的指令。
21.一种计算机程序,用于使一个或多个处理器执行如权利要求15至20中任何一项所述的方法。

说明书全文

ORACLE倒回:元数据驱动的撤销

[0001] 权益声明
[0002] 本申请根据美国法典第35章119(e)条要求于2011年11月3日提交的临时申请61/555,443的权益,该临时申请的全部内容通过引用结合与此,就像在本文中完全阐述了一样。

背景技术

[0003] 现代计算系统常常提供“撤销”某些操作的能。这是因为计算机操作人员或者他们使用的程序有时候犯错误。当错误发生时,操作人员可能想回到已知的状态并且再试。有各种动作会导致这些错误。例如,程序员有时候未能认识到计算系统将以特定的途径被使用。当程序员还没有对特定用例进行测试时,用户可能会把错误引入系统中。在更复杂的业务事务中,常见的是对各种计算系统进行许多改变。如果在这种多步业务事务开始之后但是在其结束之前对这些计算系统之一进行改变,则不一致性将被引入到系统中。当中间改变涉及与业务事务中所进行的其它改变的安全性不一致时,这特别有问题。
[0004] 在谈到数据库事务过程中确保一致性时,有些数据库系统具有优点。这对于实现ACID事务的数据库来说尤其是正确的,诸如由Oracle公司提供的数据库系统。ACID代表原子性、一致性、隔离性和持续性。在数据库计算中,原子性意味着,如果在单个数据库事务中进行了一系列改变,则或者所有改变都进行或者这些改变都不进行。换句话说,ACID事务采取“全有或全无”方法。因而,数据库系统可以确保在提交那个事务之前整个事务将是成功的。
[0005] 其它计算系统不具有由数据库提供的一致性的优势。例如,基于LDAP(轻量级目录访问协议)的系统不具有在提交改变之前的内置的一致性检查。Web服务和其它系统也如它们所提供的那样提交改变,即使那些系统使用数据库来存储信息。例如,业务事务所需的改变之一可以是对web服务的更新请求。虽然web服务可以在现代数据库中存储数据,但是数据库意识不到业务事务所需的任何其它改变,因为一次只有一个改变通过web服务被请求,并且web服务仅仅是如它们被请求的那样进行改变。于是,数据库进而提交提供给数据库的每个事务,尽管为了完成整个业务事务还需要其它步骤。
[0006] 在以上提供的例子中,有可能其中一个操作将失败。例如,业务事务可以需要采取十三个单独的步骤,并且第十二个步骤可能失败,这造成关于系统的不一致。这种不一致在单个系统中是有问题的,但是业务事务可能需要在多个系统上采取的步骤,这使问题复杂化了。
[0007] 对这个问题的一个潜在的解决办法是为对其期望撤销能力的每个系统或服务编程专用的“撤销”逻辑。但是,在变化的系统中维护硬编码的撤销逻辑是困难的,并且常常导致错误。此外,劳力成本太高。编写为了倒回失败的业务事务而执行所有必要操作的撤销逻辑很复杂,并且随着需要由逻辑动态生成的操作数量的增加而变得非常难。此外,以这种途径实现的撤销逻辑在每次服务改变时都变得无效,这导致需要重新编写代码。
[0008] 所需要的是为在数据库事务支持之外发生的业务事务提供撤销功能性的通用撤销系统。附图说明
[0009] 在附图中:
[0010] 图1A说明了其中可以实现实施例的计算环境的逻辑框图
[0011] 图1B说明了示出实施例中作为中间方位于客户端和服务器之间的撤销引擎的逻辑框图。
[0012] 图2说明了实施例中撤销引擎的逻辑框图。
[0013] 图3说明了代表实施例中可以作为撤销引擎的一部分来实现的撤销逻辑的逻辑框图。
[0014] 图4说明了实施例中操作的分类。
[0015] 图5说明了实施例可以在其上实现的计算机系统。具体实施例
[0016] 描述了元数据驱动的撤销。在以下描述中,为了解释,阐述了众多具体的细节,以便提供对本发明的透彻理解。但是,对本领域技术人员来说很显然,本发明没有这些具体细节也可以实践。在其它情况下,众所周知的结构和设备以框图形式示出,以避免不必要地模糊本发明。
[0017] 实施例在本文中是根据以下大纲来描述的:
[0018] 1.0一般概述
[0019] 2.0结构和功能概述
[0020] 3.0元数据驱动的撤销
[0021] 3.1元数据
[0022] 3.2撤销日志
[0023] 3.3小撤销(undolet)
[0024] 3.4执行元数据驱动的撤销
[0025] 3.5撤销策略
[0026] 3.6挂起撤销引擎
[0027] 4.0实现机制–硬件概述
[0028] 1.0一般概述
[0029] 描述了元数据驱动的撤销。在一个实施例中,元数据存储库存储与操作关联的元数据。例如,元数据可以识别操作的类型,诸如操作是否是赋值器、获得器、构造器、析构器、加法器、清除器,或者其它类型的操作。与每个操作和/或操作类型关联的属性也存储在元数据中。每个操作与包括用于生成撤销条目的指令的小撤销关联。小撤销可以处理关于属于那类操作(例如,构造器、析构器)而不关于目标系统的任何操作的任何调用。撤销逻辑基于元数据存储库中的元数据以及小撤销在撤销日志中生成条目。在一个实施例中,撤销条目是基于对目标系统的查询生成的。撤销日志中的条目可以基于由系统截获的请求中的操作,并且可以包括用于与该操作关联的属性的属性值。当发出撤销命令时,撤销日志中与特定业务事务关联的指令被执行。如果撤销指令被成功地执行,则业务事务中所涉及的系统的状态将关于与该业务事务关联的对象返回事务之前的状态。
[0030] 2.0结构和功能概述
[0031] 图1A说明了其中可以实现实施例的计算环境的逻辑框图。客户端110代表能够作出请求或者以别的方式与别的计算系统或计算机过程交互的计算系统。客户端110还可以代表在计算设备上执行的过程。例如,客户端110和服务器130可以代表在同一计算设备上运行的过程。客户端110利用当其被执行时使一个或多个请求发送到服务器130的逻辑和指令来配置。服务器130代表计算系统或者计算系统上配置为响应于由其它过程、计算设备或诸如客户端110的其它实体所作的请求而根据服务器逻辑和所存储的指令执行操作的过程。例如,客户端110可以发送包括更新与财务会计系统关联的用户色的请求的更新请求。响应于接收到这个请求,服务器130可以生成发布到数据库的更新,以便根据客户的110提供的指令更新用户的角色。
[0032] 图1B说明了示出实施例中作为中间方位于客户端110和服务器130之间的撤销引擎120的逻辑框图。撤销引擎120截获发出请求的实体和请求准许实体,诸如分别为客户端110和服务器130,之间的通信。在一个实施例中,撤销引起可以是服务器130的扩充,可以完全集成到服务器130中,或者可以在与服务器130独立的计算设备上操作。在一个实施例中,撤销引擎可以是客户端110的扩充,可以完全集成到客户端110中,或者可以在与客户端110独立的计算设备上执行。撤销引擎120包括用于响应于来自客户端110的撤销请求而执行撤销操作的逻辑。例如,假设由客户端110发送的、更新与财务会计系统关联的用户角色的之前的请求已经被服务器130执行,则后续请求可以由客户端110发送,以撤销由该前一请求所作的改变。撤销引擎120从客户端110接收请求,并且使用户与它早先的角色关联,就好像之前的请求从来没有执行过一样。
[0033] 图2说明了实施例中撤销引擎的逻辑框图。撤销引擎120包括输入/输出(I/O)接口210。I/O接口210可以配置为耦合到网络、用户输入设备,或者提供作为输入212的信号或数据的其它设备或装置。I/O接口210还可以配置为耦合到网络、输出显示设备或者能够传输或显示输出214的传输介质设备。输入信号或数据212可以包括被撤销引擎120截获的、从客户端110到服务器130的请求。例如,输入212可以包括改变与服务器130或另一计算系统上的用户关联的角色的请求。该请求可以包括新的角色,以及要为其设置新角色的用户。输入212还可以包括被撤销引擎120截获的、从服务器130到客户端110的响应。例如,输入212可以包括确认角色已经成功改变的消息。输出214可以包括到服务器130的消息。例如,被撤销引擎120截获的消息可以带或不带更改地转发到服务器130。输出214还可以包括到客户端110的响应,从而指示请求的成功或失败,诸如设置或改变与用户关联的角色的请求。在一个实施例中,其它输出可以包括发送到网络管理软件的网络管理消息或用户接口输出。
[0034] 撤销引擎120包括配置为从I/O接口210接收输入212的I/O逻辑220。I/O逻辑220可以配置为在非暂时性介质,诸如易失性或非易失性存储介质,当中存储输入212或者与输入212关联的信息。例如,I/O逻辑220可以包括日志逻辑。在图1所示的实施例中,I/O逻辑220可通信地耦合到I/O接口210、处理器270、会话管理逻辑230、撤销逻辑240以及元数据提取逻辑250。在其它实施例中,撤销引擎的附加元件可以耦合到I/O逻辑
220。
[0035] 在一个实施例中,会话管理逻辑230、撤销逻辑240以及元数据提取逻辑250全耦合到处理器270和数据库260或其它储存器。会话管理逻辑230配置为确定哪些请求彼此关联。例如,会话管理逻辑230可以在数据库260中存储请求和会话标识符的日志,和/或向撤销逻辑240传递会话信息。会话标识符可以由会话管理逻辑230指定,或者可以通过从截获的请求提取会话标识信息来确定。在一个实施例中,会话信息可以在请求转发到预期的接收者之前从请求中除去。在一个实施例中,会话管理逻辑配置为管理请求的异步处理。例如,当撤销引擎充当中间方时,即使会话管理逻辑230必须在移动到下一个请求之前等待来自对其作出请求的服务器的回调通知,会话管理逻辑230也对请求保持跟踪并且按它们被接收的次序来处理它们。如果超时或其它事件发生,则撤销策略必须被调用,以便使撤销引擎120根据撤销策略指令处理超时。例如,如果在一个操作过程中发生超时,则策略可以使与会话关联的所有操作都撤销。
[0036] 在一个实施例中,元数据提取逻辑250自动地从已经扩充成支持撤销功能性的服务提取元数据。例如,诸如Java注释的备注或其它元数据可以包括在Mbean或其它对象中。这些备注可以提供定义操作之间关系的关系信息。例如,诸如setName(person,name)的操作被认为是“赋值器”,因为它设置值。对象可以具有用于检查一个人的当前名称值的相关“获得器”getName(person)。setName()操作可以在元数据中被识别为“可撤销的”操作,并且操作类型可以设置成“获得器”,以指示利用那个操作撤销操作的途径是使用相同的操作为这个人设置之前的值。
[0037] 从服务收集到的元数据不必限于获得器和赋值器。构造器和析构器,以及其它类型的可撤销操作,也可以被元数据识别。此外,在一个实施例中,只读和不可撤销的操作也可以在元数据表262中定义。在一个实施例中,元数据存储在诸如元数据表262的数据库表当中。在一个实施例中,元数据表262包括从操作类型到由元数据提取逻辑250提取的操作的映射。
[0038] 元数据表262还包括识别每个操作的参数类型的数据。例如,操作可以具有不同类型的参数,诸如“KEY”参数、“SELECTOR”参数和“DATA”参数。KEY参数用于标识。例如,名称为“SSN”的参数可以是KEY,因为它可以用于识别人。注意:关于同一个操作有零个、一个或多个参数可以是KEY。SELECTOR参数与选择关联。例如,在操作setOffice(int officeNumber,String employeeNumber)中,名称为officeNumber的参数用于选择办公室,并且因此是选择器。DATA数据用作数据,并且可以包括任何数据值。
[0039] 在一个实施例中,元数据表262可以手动或自动地,或者利用手动和动态操作的组合,填充并更新。在其它实施例中,元数据可以利用任何数据文件类型或存储系统以易失性或非易失性计算机可读存储的任何形式存储。例如,元数据可以存储在共享硬盘阵列上的扁平文件或XML文件中或者诸如存储器506的存储器中。
[0040] 在一个实施例中,撤销逻辑240配置为生成并执行撤销指令。撤销逻辑接收所截获的对要执行的操作的请求。例如,操作可以是更新与web服务应用关联的特定值的请求。撤销逻辑240从会话管理逻辑230接收会话信息,并且存储对一个或多个会话的一系列撤销指令。在一个实施例中,撤销逻辑240为由会话管理逻辑230识别出的每个会话存储撤销指令。在一个实施例中,撤销指令存储在撤销日志数据数据库表264中。在其它实施例中,撤销指令存储在存储器中,诸如除数据库260之外的易失性存储器或非易失性存储器。当被一个或多个处理器执行时,为会话生成的撤销指令使得被对应会话中的操作改变的值被撤销。例如,如果与会话关联的撤销指令成功执行,则被该会话改变的值将返回其原始值。
[0041] 在其它实施例中,可以添加图2中未示出的元件,并且计算系统的元件的配置可以与图2中所示的配置不同。例如,I/O逻辑220可以结合到撤销逻辑240中,并且数据库260可以远程连接到撤销引擎220。处理器270可以包括形式为一个或多个中央处理单元(CPU)的硬件逻辑,其中每个CPU都具有一个或多个核。
[0042] 图3说明了代表实施例中可以实现为撤销引擎的一部分的撤销逻辑240的逻辑框图。具体而言,图3说明了其中为Mbean服务器和SOAP服务器提供撤销能力的实施例。一般性的撤销引擎310配置为确定哪些操作被哪个服务执行。例如,业务事务可以被具有标识符“k6oAOxCWZh”的会话识别。但是,与会话k6oAOxCWZh关联的有些操作可以被Mbean服务器执行,而与该同一会话关联的其它操作可以由SOAP服务器执行。一般性的撤销引擎310生成,如果接收到撤销请求,用于识别指令应当发送到哪个实体的撤销指令元数据。代理Mbean服务器320和SOAP路由器330每个都生成与每个会话关联的、特定于服务的撤销指令,并且把每条指令与一般性的撤销引擎310生成的定序信息关联。如以上所讨论的,在一个实施例中,撤销逻辑240生成并执行指令。更具体而言,在一个实施例中,代理Mbean服务器320和SOAP路由器330生成并执行这种指令。如以上所讨论的,在一个实施例中,撤销逻辑240接收请求。更具体而言,在一个实施例中,一般性的撤销引擎310接收这种请求。如以上所讨论的,在一个实施例中,撤销逻辑240接收会话信息。更具体而言,在一个实施例中,一般性的撤销引擎310接收这种会话信息。如以上所讨论的,在一个实施例中,撤销逻辑240存储撤销指令。更具体而言,在一个实施例中,代理Mbean服务器320和SOAP路由器330存储这种撤销指令。
[0043] Mbean服务器和其它适配器执行发布到它们的命令。此外,这些适配器用于1)生成阶段对数据的收集,及2)实际撤销阶段执行操作或收集数据(为了验证)。
[0044] 3.0元数据驱动的撤销
[0045] 3.1元数据
[0046] 把资源逻辑映射到值的元数据存储在元数据存储库中。在一个实施例中,元数据存储库是数据库260,并且元数据存储在数据库表元数据262中。元数据可以由元数据提取逻辑250自动添加到元数据存储库或者从中除去。在一个实施例中,元数据可以通过命令行操作、基于web的工具的使用或者通过把诸如XML文件的描述资源元数据的文件拷贝到元数据存储库来手动地添加到元数据存储库或者从中除去。在一个实施例中,存储在元数据存储库中的每个资源-元数据对象都提供用于操作的元数据和其它元数据。资源元数据可以由以下一个或多个元素组成:操作元数据、参数元数据、异常元数据、操作到操作的关系,以及类型元数据,等等。
[0047] 操作元数据是与给定操作关联的元数据,并且提供操作的名称。操作的名称可以用于通过名称查找用于操作的元数据。每个操作元数据对象都与一个基本种类的属性关联。在一个实施例中,这个属性将具有以下三个值当中的一个:{READ-ONLY,UNDOABLE,NOT-UNDOABLE}。如果操作的基本种类是READ-ONLY,则这个操作的执行没有副作用并且不造成修改。如果操作的基本种类是UNDOABLE,则这个操作的执行可以被撤销。如果操作的基本种类是NOT-UNDOABLE,则这个操作的执行会造成修改,但是这些不能被撤销。图4说明了实施例中操作的分类,示出有些操作是只读,而其它操作进行修改。修改操作不总是可撤销的,但是可撤销的操作以及撤销它们需要什么样的操作可以在元数据中描述。
[0048] 在一个实施例中,与操作关联的附加元数据可以用来查找用于操作的元数据。例如,操作的属性的个数和类型可以用来查找与多态操作关联的元数据。多态操作不能仅通过名称来识别,因为它们代表具有相同名称的不同操作。多态操作的一个例子是updatePersonInfo,具有以下不同的操作:updatePersonInfo(String ssn,String name)和updatePersonInfo(String ssn,String name,String address)。在一个实施例中,采取可以按位置被识别的变元阵列的操作仍然可以与元数据关联。
[0049] 在一个实施例中,每个操作可以与一组参数-元数据对象关联。参数元数据是描述操作的参数的元数据。每个参数-元数据对象具有由串提供的名称属性。该名称属性的值提供参数的名称。类型属性也由串提供。此外,每个参数-元数据对象可以具有由串提供的目的属性。虽然在不同的实施例可以使用其它的串值,但是在一个实施例中使用值“KEY”、“SELECTOR”或“DATA”。在其它实施例中,参数可以由位置而不是由名称来识别。
[0050] 在一个实施例中,异常元数据也可以提供。异常元数据可以用来定义在遇到异常的情况下可以采取的动作。例如,如果业务事务或其它事务正被撤销,并且特定的操作因为中间操作已经改变了值而造成异常,则几个潜在的动作可以呈现给撤销请求者。一个选项可以是继续撤销操作,而不把值改变回事务之前的状态,另一个选项可以是继续撤销操作,同时把值改变回事务之前的状态。另一个选项可以是完全停止撤销过程。其它选项可以是可用的,如在异常元数据中定义的。
[0051] 异常元数据在撤销日志条目的生成过程中也可以使用。例如,如果更新将要对目标系统进行,则撤销引擎120将准备要包括在撤销日志中的条目,但是将或者不放在撤销日志中或者把它暂时放在那里。接下来,如果在对目标系统执行实际操作时发生异常,则撤销引擎120必须确定做什么。缺省地,如果发生异常,则撤销引擎120或者1)不把撤销条目放到撤销日志中,或者2)从撤销日志中除去条目。如果发生异常,则可能的场景是什么都没发生。而且,异常会是不特定于操作的一般性异常,诸如授权拒绝。因此,如果任何事情造成对目标服务器的操作失败,则缺省的动作是不存储条目,因为缺省的解释是什么都没发生,因此没有什么要撤销。
[0052] 但是,在有些情形下,异常出现,但是或者a)异常是警告,但实际的更新DID发生,因此条目应当放到撤销日志中。为了确保这种情况发生,某些异常元数据被存储,以指示撤销引擎120这个异常是警告,而不意味着更新失败。通过用这个元数据通知,撤销引擎120将把条目放到撤销日志中(或者,在一个实施例中,把它留在那里)。
[0053] 异常元数据还可以用来管理部分更新。例如,用于指定角色的操作可以用来请求要指定给用户的三个角色,这导致三个所请求角色中只有两个的准许。撤销引擎120需要一个计划,这个计划将允许其检查返回的异常,并且从那个异常确定实际指定了什么角色。即,如果异常不具有列举实际指定的角色的有效载荷,则撤销引擎120可以发布确定假定被指定的角色是否被实际指定的查询。如果有任何角色缺失,则可以由撤销引擎120推断哪些角色未被指定,并且撤销引擎可以更改用于撤销条目的有效载荷。例如,如果角色A、B和C要指定,但用户只有角色A和C,则可以推断出B没有被指定。由此,撤销条目必须被更改,以反映这种现实。
[0054] 名称图在一个实施例中用来允许关连具有相同意义但不同名称的形式参数。例如,setJobCode(String username,int jobCode)和getJobCode(String name)可以同时都存在。形式参数“username”和“name”不相同,但是它们可以具有相同的意义。使用形式为<操作-名称.名称>==<操作-名称.名称>的名称图。利用以上的例子,名称图将是setJobCode.username=getJobCode.name。名称的处理是很重要的,因为在许多情况下由撤销指令组成的撤销计划将需要关联一个操作的实际变元和另一个的变元。撤销计划需要知道名称图,使得,如果需要的话,它可以匹配具有不同名称的变元。名称图允许这么做。
[0055] 在一个实施例中,元数据可以用来确保,即使在产品升级之后,基于与产品的历史版本关联的操作生成的撤销日志也可以用来撤销业务事务。例如,在一个实施例中,变换元数据可以提供从旧操作标识符到新操作标识符的映射。防升级撤销日志的其它途径也可以使用。例如,在一个实施例中,撤销日志可以被升级模重写,使得与升级后的产品关联的条目引用与升级后的产品关联的操作。在一个实施例中,条目可以包括元数据。例如,条目可以包括把条目标记为受目标系统或其它中间系统的升级影响的条目的元数据。
[0056] 3.2撤销日志
[0057] 元数据用来生成撤销日志条目,在本文中也称为撤销指令,它颠倒作为事务,例如业务事务,一部分执行的操作。撤销日志是有序的条目列表。如在本文中所使用的,术语“条目”意味着指可识别的一组数据,并且可以包括任何数量的信息。例如,条目可以包括元数据、识别条目开始或结束的条目边界标记器,或者识别与特定业务事务关联的一组一个或多个条目的开始或结束的业务事务边界标记器。在一个实施例中,条目可以是撤销条目或验证条目。撤销条目的目的是执行作为整个撤销动作集合的一部分的某个更新。验证器条目的存在是为了验证数据是如Oracle倒回所预期的。如果数据没被验证,则发生写冲突。在一个实施例中,撤销条目采取以下形式:
[0058] {目标-信息,操作-名称,[变元]}
[0059] 在一个实施例中,验证条目可以在执行验证步骤的时候被标记,以便对与特定业务事务关联的验证进度保持跟踪。在一个实施例中,撤销条目可以在执行撤销步骤的时候被标记,以便对与特定业务事务关联的撤销进度保持跟踪。在发生需要恢复的故障的情况下,撤销条目标记可以被撤销引擎120检查,以确定由于故障而未完成的撤销操作的状态。
[0060] 验证条目也可以用于恢复目的。在一个实施例中,验证条目可以用来确定值是否与一个或多个操作的成功执行一致(即,“预期”状态)。例如,可以存在指示对x来说预期值为“3”但找到的值为“2”的验证,并且“2”是用于撤销动作条目本身的值。另一方面,如果当前的值是值“2”,则我们可以合理地得出结论,上次更新失败了。如果条目与成功不一致,则撤销策略或管理员动作可以用来解决这个问题,通过例如把该值设置成正确的值。
[0061] 目标-信息字段中的数据可以被认为是不透明的二进制大对象(blob)。与目标类型关联的适配器可以取得目标-信息中的数据,连同操作名称-名称和变元,并且执行动作。目标-信息可以是实际的对象引用,它可以识别JDBC连接,或者提供关于目标的其它信息。目标-信息可以是允许目标被识别和访问的任何内容。为了读/写目的,撤销逻辑使用这个目标-信息来访问目标。在一个实施例中,撤销引擎120依赖于与目标关联的适配器,诸如代理Mbean服务器320和SOAP路由器330,来与目标接口。
[0062] 撤销日志条目可以添加到撤销日志数据表264,以创建虚拟撤销列表。在一个实施例中,撤销日志条目可以添加到该列表的末尾。在这种情况下,如果期望逆序恢复,则撤销指令的执行是从列表的末尾到列表的开始执行的。换句话说,在一个实施例中,操作是以它们最初应用的相反的次序撤销的。在另一个实施例中,操作是同时撤销的,或者以与它们最初执行的次序的逆序不同的次序执行。
[0063] 撤销指令由撤销逻辑240利用所提供的操作-名称和变元执行。具体而言,适配器用来为每种服务执行指令。适配器的例子是代理Mbean服务器320、SOAP路由器330,或者诸如代理LDAP服务器的其它代理。每个适配器在执行每条指令后都把运行时间返回到一般性的撤销引擎310。
[0064] 验证器条目可以添加到撤销日志,以允许撤销逻辑240在执行撤销指令的同时确定被改变的对象的当前状态是否与初始改变之后紧接着的对象状态一致。换句话说,在被执行时,验证器条目告诉撤销逻辑240后续的改变是否已经对对象作出。对于验证器条目,动作是对适配器执行的并且将返回值。验证条目保留由“预期-值”表示的预期的值。所提供的比较器用来比较实际值(从适配器返回的值)与预期的值。如果根据比较器发现这些值相等,则预期的值得以验证,并且没有写冲突。如果不是这样,则存在写冲突。例如,如果一个值为“蓝”的属性随后被设置成“红”,则在撤销日志中生成验证器条目。在被执行时,如果该值已经被后续操作改变,则该验证器条目允许撤销引擎120在把该值设置回“蓝”之前验证该值为“红”。在本发明的实施例中,更具体而言,Mbean服务器320和SOAP路由器330是撤销逻辑240中确定被改变的对象的当前状态是否与作出初始改变之后紧接着的对象状态一致的部件。
[0065] 以下伪代码代表可以在一个实施例中使用的撤销-日志执行策略:
[0066]
[0067]
[0068] 3.3小撤销
[0069] 在一个实施例中,具有可撤销(UNDOABLE)基本种类的每个操作-元数据都与一个“小撤销”关联。小撤销是能够撤销与特定操作类型关联的操作的对象。例如,小撤销可以能够撤销是“赋值器”操作的操作。在一个实施例中,有些小撤销能够撤销具体的操作,并且不与操作类型关联。在另一个实施例中,小撤销可以与某个操作类型的操作子集关联,诸如仅具有目标和单个变元(或参数)的“赋值”操作。在这种情况下,多个小撤销可以与“赋值器”操作类型关联。撤销操作的动作是由关联的小撤销中的逻辑执行的。在一个实施例中,如果操作不与小撤销关联,则该操作不能被撤销。小撤销是由它们的小撤销标识符识别的。例如,名称可以用作小撤销标识符。由此,用于名称为setColor的操作的操作-元数据可能具有“赋值器”的小撤销标识符。诸如用于类Person的Person(String name)的Java构造器可以具有“构造器”的小撤销标识符。
[0070] 小撤销是在撤销逻辑240中实现的,并且在一个实施例中可以单独地存储在诸如数据库260的小撤销存储库中。当存在对可撤销的操作的调用时,由那个操作在元数据存储库中其关联的操作元数据引用的小撤销被调用。每个小撤销都充当抽象层,把与小撤销的操作类型关联的操作映射到服务所需的实际操作。例如,在一个实施例中,小撤销把操作setColor()变成称为setXXX()的一般性的“赋值”操作。这种抽象是可能的,因为所有赋值器操作都具有相似的性质,并且因此可以被撤销逻辑240以相同的方式对待。
[0071] 小撤销提供对某个目标采取带变元的动作并且生成适当的撤销条目并验证用于那个动作的条目的能力。撤销计划可以把零个、一个或多个条目生成到撤销日志中。条目的数量,以及那些条目的类型(动作对验证)完全依靠用于给定操作类型(例如,查询器、赋值器、构造器、析构器,等等)的撤销计划。每个撤销计划可以获得对用于给定目标的元数据的访问。利用这种元数据,撤销计划可以寻求生成适当的撤销条目。此外,查询可以用来收集对小撤销会有用的数据。以下是小撤销的一个例子:
[0072]
[0073]
[0074] 对于在以上例子中使用的“赋值器”操作类型,撤销计划可以查找用于setX操作的“获得器”字段的值。这个数据将在用于这个目标类型的元数据中找到。获得器字段将具有值“getX”,没有变元。然后,撤销计划将调用关于适配器的命令,该命令提供目标信息、操作(“getX”)和变元(无)。这个对适配器的调用会例如返回零。然后,这个撤销计划会查找用于这个操作的“赋值器”;即,它可以查找它应当使用什么操作来写入用于撤销条目的值。在这里,用于操作“setX”的元数据可以指示赋值器是“setX”本身,因此撤销条目将利用目标-信息“setX”创建。因而,对于可撤销的撤销引擎120的每种类型的操作,存在专用于生成用于那个动作的适当撤销条目(或多个条目)的小撤销。小撤销的实际计划可以相对简单,如由以上对赋值器的小撤销的描述所说明的,或者可以生成更复杂的计划。保持不变的是小撤销提供使用元数据、数据收集和决策可以为那个动作适当地生成零个、一个或多个撤销条目的计划。
[0075] 3.4执行元数据驱动的撤销
[0076] 在一个实施例中,诸如数据库260的元数据存储库存储与操作关联的元数据。例如,元数据可以识别操作的类型,诸如操作是否是赋值器、获得器、构造器、析构器、加法器、去除器,还是其它类型的操作。与每个操作关联的属性也存储在元数据中。
[0077] 在一个实施例中,每个操作都与包括用于生成撤销条目的指令的小撤销关联。在一个实施例中,小撤销可以处理对属于操作类型或操作分类而不关于目标系统的任何操作的调用。例如,用于析构器的小撤销将对任何析构器工作,包括用于Mbean的析构器和用于web服务的析构器。例如,用于析构器的小撤销包括用于重新创建那个对象并且适当地设置其属性的指令。例如,如果删除了名称为“John”且头发颜色为“灰色”的人对象,并且这个删除操作具有操作类型“析构器”,则与操作类型“析构器”关联的小撤销可以收集这些属性的两个值,连同关于人对象设置它们的适当操作,然后小撤销可以生成重新创建人对象的撤销条目。如果曾经以逆序执行过,则人对象将首先被创建,然后指定属性值,从而完全恢复被删除的对象。用于操作类型“赋值器”的小撤销还使得对那种操作类型“赋值器”的任何操作生成条目。赋值器小撤销包括对赋值器操作的引用,并且包括代表为其改变值的对象的属性,以及代表改变之前那个对象的值的另一个属性。在一个实施例中,赋值器小撤销可以在元数据存储库中查找用于赋值器操作的元数据,从而允许赋值器小撤销识别可以用来查询属性当前值的相关联的获得器操作。然后,如所需要的,赋值器小撤销将使用附加的元数据来确定什么变元(如果有的话)将在这个查询中被使用。然后,这个构造好的查询将利用适配器来执行,以提取这个当前值。这个查询的结果将提供这个属性的当前值。然后,赋值器小撤销将在元数据存储库中查找用于赋值器操作的元数据,从而确定什么操作将用来设置这个值。然后,赋值器小撤销将在撤销日志中生成适当的条目,诸如首先生成撤销条目,然后生成验证条目。
[0078] 在一个实施例中,撤销逻辑240配置为基于元数据存储库中的元数据以及小撤销在撤销日志中生成一个或多个条目。撤销日志中的条目可以基于被系统截获的第一请求中的操作,并且可以包括用于与该操作关联的第一属性的第一属性值。例如,用于setColor(user123,red)的小撤销是赋值器小撤销,在一个实施例中它可以是一般性的赋值器小撤销。利用小撤销中的指令以及元数据,撤销逻辑240生成为用户123存储当前颜色值(例如,蓝色)的条目,并且,如果颜色当前被设置成红色,则生成用于恢复到那个颜色的指令。即使颜色已经变成另一种颜色,诸如黄色,撤销策略也可以允许把颜色变回蓝色。旧的颜色是在新的颜色设置之前通过使用获得器,诸如getColor(user123),确定的。在这种情况下,验证器将验证getColor(user123)返回“红色”,并且撤销日志中用于撤销该操作的指令可以看起来像setColor(user123,blue)。如果撤销策略指示验证器应当被忽略,则验证器可以被撤销引擎120忽略。在本发明的实施例中,更具体而言,Mbean服务器320和SOAP路由器330是撤销逻辑240中配置为基于元数据存储库中的元数据以及小撤销在撤销日志中生成一个或多个条目的部件。
[0079] 以上段落中描述的伪代码可以用实现相同任务的任何指令代替。例如,在一个实施例中,调用web服务并且识别要验证的值和要设置的值的SQL查询或URL可以用作撤销日志条目。在一个实施例中,这些指令是响应于在撤销引擎120接收到撤销getColor()操作的请求而执行的。
[0080] 当操作与相同的业务事务关联时,会话在一个实施例中用来把操作集合到一起。例如,第一业务事务可以包括20个操作并且第二业务事务可以包括15个操作。这些操作可以在不同的目标系统或服务器,诸如服务器130,之上执行。每个操作是作为还识别会话的请求的一部分接收的。例如,请求可以包括一个或多个要执行的操作,连同会话标识符值。
在一个实施例中,即使撤销引擎120在与第一业务事务关联的两个其它请求之间接收到与第二业务事务关联的请求,第一业务事务和第二业务事务也将具有不同的会话标识符。即,请求被接收的次序不一定影响请求和请求中的操作与其关联的会话。在一个实施例中,单个请求可以识别由不同的对应会话标识符关联的多个操作。
[0081] 在一个实施例中,与相同业务事务关联的不同操作不一定与同一个目标系统关联。撤销日志是用于撤销指令的存储机制,并且可以包括多组指令。每组指令都可以与会话关联。每组撤销指令可以包括针对多个目标系统的指令或条目。当撤销命令被调用时,即使指令跨多个目标系统,与该会话关联的所有指令也都可以被执行。在一个实施例中,与第一会话关联的一组指令的执行不造成与不同会话关联的指令的执行。
[0082] 在一个实施例中,会话管理逻辑230管理由客户端提供的会话信息,其中客户端可以控制业务事务的边界。换句话说,客户端可以作出全都是同一业务事务的部分的几个请求。会话管理逻辑通过读取与这些请求关联的会话标识信息来确定业务事务的边界。会话标识符,以及会话边界标识符,在一个实施例中可以用来识别哪些请求与特定的会话关联。此外,会话中的每个请求可以包括序列号标识符,并且边界请求可以包括定义可以被撤销引擎120接收或者应当已经被其接收的请求的数量或类型的附加元数据。通过识别请求与哪个会话关联,基于该请求生成的撤销指令可以放在合适的撤销日志中。然后,通过识别仅特定的会话,客户端可以请求该会话被撤销。
[0083] 如以上所讨论的,关于维护撤销日志,实施例可以定义指示业务操作完成的处理的撤销日志条目。例如,赋值器小撤销可以生成把变量恢复成其之前的值的动作,然后还添加验证器条目;撤销引擎随后将把业务-操作-边界(business-operation-boundary)条目添加到撤销日志,表示业务操作已经关于维护撤销日志而完全被处理了。这个业务-操作-边界条目表示单个业务操作的这些条目和与任何其它业务操作相关的那些条目之间的边界。
[0084] 类似地,实施例可以定义要包括在撤销日志中的业务-事务-边界条目。这个业务-事务-边界条目指示业务操作的所有操作已经录入到撤销日志中了。撤销日志中表示业务事务完成的信息会是有用的,尤其是在从诸如断电的严重故障中恢复时。如果检测到不具有业务-事务-边界条目的撤销日志,则业务-事务-边界条目的缺失指示整个业务事务过程没有成功完成。然后,可以作出适当的决定,基于这个信息,诸如决定撤销未完成的业务事务的所有改变。
[0085] 这里是具有这些附加类型条目的撤销日志的一个例子。每个条目都用一个数字标记,使得文字可以指这个撤销日志中的各个条目。
[0086] {动作[1]验证器[2]操作-边界[3]动作[4]动作[5]动作[6]验证器[7]操作-边界[8]业务-事务[9]}
[0087] 业务-事务[9]的存在显示业务事务已经完成。现在假定管理员想个别地撤销最后一个业务操作的动作。实施例可以提供一次一个地撤销业务操作的能力。经以上的撤销日志,本发明的实施例可以利用验证器[7]验证系统状态,然后应用动作[6]、动作[5]和动作[4]的动作。操作-边界[3]的存在表示用于不同业务操作的条目的开始,并且因此撤销引擎已经撤销了单个业务操作的更新。如果期望,则撤销引擎可以通过首先利用验证器[2]验证系统状态然后应用动作[1]继续去撤销第一业务操作的更新。
[0088] 这个例子说明总体上撤销日志中多清楚的边界允许从最后一个业务操作到倒数第二个等等一次一个地撤销个别业务操作的效果。在一个实施例中,其它边界或标记可以在撤销日志中实现。例如,“保存点”可以添加到撤销日志。保存点可以添加,以允许依靠那个保存点执行撤销操作。这对于测试目的是特别有用的。
[0089] 在一个实施例中,客户端可以对撤销会话具有明确的或者隐含的控制。例如,如果使用BPEL(业务过程执行语言)引擎,则过程的开始可以隐含地开始撤销会话。如果撤销命令在BPEL过程的上下文内部发布,则整个过程将被撤销(或者尝试被撤销)。如果使用客户端API,则客户端将提供开始撤销会话、结束撤销会话而不执行撤销操作以及在撤销会话内执行撤销操作的基础设施。
[0090] 在一个实施例中,撤销引擎120还使用会话逻辑230来管理客户端和服务器之间的异步请求。首先,客户端向撤销引擎120发消息。撤销引擎120采取适当的动作(例如,使用小撤销在撤销日志中生成撤销条目)。然后,撤销引擎120对服务器作出异步请求。撤销引擎120等待来自服务器的应答,诸如指示成功或失败的通知或回调,或者有效载荷中的其它信息。撤销引擎120基于响应采取适当的动作,并且向客户端返回响应。
[0091] 3.5撤销策略
[0092] 在一个实施例中,撤销策略用来处理撤销引擎120可能面对的预计场景。例如,撤销策略可以用来防止不能撤销的操作发生,诸如类型为不可撤销(NOT-UNDOABLE)的操作。通过定义指示撤销引擎120防止不可逆操作的执行的策略,为抵御对系统发生不可撤销的潜在灾难性改变提供了附加的安全性。虽然这个例子讨论了影响初始操作的策略,但是其它撤销策略也可以实现,来处理在请求履行之后或者在撤销请求过程中发生的场景。
[0093] 撤销策略可以用在许多情况下,诸如故障场景。例如,撤销引擎120可以接收撤销与会话123456关联的所有操作的请求,该会话包括六个操作。虽然对于每个操作都存在合适的撤销日志条目,但是与其中一个操作关联的撤销指令的执行可能失败。例如,验证操作可能由于不相关的请求造成与撤销会话关联的值改变而失败。虽然,如以上所描述的,可以使用用户接口为用户提供从中选择的选项,但是对于管理员来说,定义确定是否继续撤销请求的撤销策略可能更方便。例如,策略可以指示在撤销操作过程中发生的任何故障都将造成撤销操作停止并且生成询问用户操作是否应当继续的用户界面元素。不同的策略可以指示撤销命令总是要执行,并且失败的验证器在为那个会话生成的日志文件中报告。
[0094] 策略还可以用来指示撤销日志中所有验证器都要在撤销操作开始之前被检查。例如,撤销与会话123456关联的所有操作的请求可以由撤销引擎120接收。在一个实施例中,撤销引擎120首先执行所有验证器指令来确定与业务事务关联的数据的当前状态是否与事务之前的数据一致,或者没有其它操作改变该数据(例如,通过检查与数据关联的时间戳)。如果数据一致,则策略可以指示撤销操作继续。如果数据不一致,则策略可以指示撤销操作异常中止,并且通知用户。
[0095] 3.6挂起撤销引擎
[0096] 存在几种挂起撤销引擎的操作可能有用的情况。例如,系统管理员可以对多个系统作出改变,并且会感觉到他可以在没有撤销引擎120提供的安全性的情况下操作,并且将更喜欢通过禁用来释放由撤销引擎120使用的资源。在一个实施例中,撤销引擎120支持挂起或关掉撤销日志生成、其它特征或完全关闭撤销引擎120的请求。依赖于实现,被关掉的效果可以变化。如果撤销引擎实现为中间方,则它将简单地取得每个请求并且把它传递到目标。如果撤销引擎实现为嵌入式覆盖区(footprint),则它将更改其逻辑,使得嵌入式撤销引擎120组件完全不再被调用。在一个实施例中,不是整个撤销引擎120都需要挂起,而是挂起撤销引擎120的一部分。撤销引擎120的任何部分都可以为任何原因单独挂起。例如,在单用户/非并发环境中,挂起所有验证机制会是适当的,因为,当很少或者没有机会对系统做中间改变时,用验证步骤交换性能增加会让用户感到舒服。
[0097] 4.0实现机制–硬件概述
[0098] 根据一种实施例,本文所述的技术是由一个或多个专用计算设备实现的。专用计算设备可以为执行所述技术而硬连线,或者可以包括持久性编程为执行所述技术的诸如一个或多个专用集成电路(ASIC)或现场可编程阵列(FPGA)的数字电子设备,或者可以包括按照固件、内存、其它储存器或者其组合中的程序指令编程为执行所述技术的一个或多个通用硬件处理器。这种专用计算设备还可以结合具有实现所述技术的定制编程的定制硬连线逻辑、ASIC或FPGA。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者为了实现所述技术而结合硬连线和/或程序逻辑的任何其它设备。
[0099] 例如,图5是说明本发明实施例可以在其上实现的计算机系统500的框图。计算机系统500包括用于传送信息的总线502或者其它通信机制,以及与总线502耦合的、用于处理信息的硬件处理器504。硬件处理器504可以是例如通用微处理器
[0100] 计算机系统500还包括耦合到总线502用于存储信息和要由处理器504执行的指令的主存储器,诸如随机存取存储器(RAM)或者其它动态存储设备。主存储器506还可以用于在要由处理器504执行的指令的执行过程中存储临时变量或其它中间信息。当存储在处理器504可访问的存储介质中时,这种指令使计算机系统500成为定制成执行指令中所规定的操作的专用机器。
[0101] 计算机系统500还包括耦合到总线502的、用于存储用于处理器504的静态信息和指令的只读存储器(ROM)508或者其它静态存储设备。存储设备510,诸如磁盘或光盘,被提供并耦合到总线502,用于存储信息和指令。
[0102] 计算机系统500可以经总线502耦合到显示器512,诸如阴极射线管(CRT),用于向计算机用户显示信息。包括字母数字和其它键的输入设备514耦合到总线502,用于向处理器504传送信息和命令选择。另一种类型的用户输入设备是光标控制516,诸如鼠标轨迹球,或者光标方向键,用于向处理器504传送方向信息和命令选择并且用于控制显示器512上的光标运动。这种输入设备通常具有两个轴中的两个自由度,第一个轴(例如,x)和第二个轴(例如,y),这允许设备在平面中规定位置。
[0103] 计算机系统500可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑实现本文所述的技术,这些与计算机系统系统结合,使计算机系统500或者编程计算机系统500成为专用机器。根据一种实施例,响应于处理器504执行主存储器506中所包含的一条或多条指令的一个或多个序列,本文所述的技术由计算机系统500执行。这种指令可以从另一个存储介质,诸如存储设备510,读到主存储器506中。主存储器506中所包含的指令序列的执行使处理器504执行本文所述的步骤。在备选实施例中,硬连线的电路系统可以代替软件指令或者与之结合使用。
[0104] 如在本文中所使用的,术语“存储介质”指存储使机器以特殊方式操作的数据和/或指令的任何介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括,例如,光或磁盘,诸如存储设备510。易失性介质包括动态存储器,诸如主存储器506。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带、或者任何其它磁性数据存储介质,CD-ROM、任何其它光学数据存储介质,任何具有孔模式的物理介质,RAM、PROM及EPROM、FLASH-EPROM、NVRAM,任何其它存储器芯片或磁带盒。
[0105] 存储介质与传输介质不同但是可以与其结合使用。传输介质参与在存储介质之间传输信息。例如,传输介质包括同轴电缆线和光纤,包括包括总线502的电线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外线数据通信过程中生成的那些波。
[0106] 各种形式的介质可以在把一个或多个指令的一个或多个序列携带到处理器504以供执行的时候涉入其中。例如,指令可以最初在磁盘或远端计算机的固态驱动器上携带。远端计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。计算机系统500本地的调制解调器可以在电话线上接收数据并且使用红外线发送器把数据转换成红外线信号。红外线探测器可以接收在红外线信号中携带的数据并且合适的电路系统可以把数据放到总线502上。总线502把数据携带到主存储器506,处理器504从其检索并执行指令。在被处理器504执行之前或之后,主存储器506接收到的指令可以可选地存储在存储设备510上。
[0107] 计算机系统500还包括耦合到总线502的通信接口518。通信接口518提供耦合到网络链路520的双向数据通信,其中网络链路520连接到本地网络522。例如,通信接口518可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者向对应类型的电话线路提供数据通信连接的调制解调器。作为另一个例子,通信接口518可以是向兼容的LAN提供数据通信连接的局域网(LAN)卡。无线链路也可以实现。在任何这种实现中,通信接口518发送并接收携带代表各种类型信息的数字数据流的电、电磁或光信号
[0108] 网络链路520通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路520可以通过局域网522向主机计算机524或者向由互联网服务提供商(ISP)526运营的数据设备提供链接。ISP526又通过全球范围的分组数据通信网络,现在通常称为“互联网”528,提供数据通信服务。局部网522和互联网528都使用携带数字数据流的电、电磁或光信号。通过各种网络的信号和网络链路520上并且通过通信接口518的信号是传输介质的示例形式,其中通信接口把数字数据携带到计算机系统500并且从其携带数字数据。
[0109] 计算机系统500可以通过网络、网络链路520和通信接口518发送消息和接收数据,包括程序代码。在互联网例子中,服务器530可以通过互联网528、ISP526、局部网522和通信接口518发送所请求的用于应用程序的代码。
[0110] 所接收到的代码可以由处理器504在接收到的时候执行,和/或存储在存储设备510或其它非易失性储存器中,用于以后执行。
[0111] 在以上说明书中,已经参考众多具体细节描述了本发明的实施例,对于不同的实现,这些细节会有所变化。因此,说明书和附图要在说明性而不是约束性的意义上考虑。本发明范围的唯一和排它指示,以及本申请人预期要作为本发明范围的内容,是以权利要求发布的具体形式从本申请发布的权利要求集合的文字及其等效范围,包括任何后续的修正。应当指出,对各种实施例的修改和变化是预期的。修改可以基于,例如,不同期望的或所需的操作特性。变化可以包括所要求保护的特征的组合。
QQ群二维码
意见反馈