事务变换
背景技术
当构建应用时,软件开发者通常通过使用诸如C#的开放语言来编写“命令代码”来创建软件组件。在创建命令代码、即对软件组件给出其函数的软件代码中,开发者必须在通过调用或其它构件在所有部件之间创建链接。对于由应用提供的任何功能,软件开发者通常为执行应用专用函数的所有不同软件组件创建代码并对彼此依赖以完成任务的软件组件之间的互连进行手动编码。软件开发者创建用户接口、数据构件和所有所需操作用于用户和应用之间的交互。
在大多数应用中,用户接口、操作和数据构件是应用专用的。因此,为了创建应用,软件开发者通常创建大量代码来实现特定用户接口、操作和/或其它构件。此外,软件开发者通常在不同软件片段之间组织和创建所有相互关系。结果,为了创建任何应用,软件开发者必须能非常熟练地使用用于创建应用的下层语言。
在处理事务时出现特别复杂的应用开发问题。事务相关于客户端与服务器之间或者如本文预期的数据客户端和数据存储之间的通信(以及通常的数据转移),其中,数据客户端是允许对一个或多个数据存储中数据进行访问的UI元件。通过事务操控这种数据的应用经常使用“原子”事务(atomictransaction)。原子事务是遵循“全有或全无”原则的一组操作,其中要么成功执行全部操作,要么没有操作被执行。例如,在进行金钱转移的系统中,必须确保信息被全部更新。如果在两个账户之间转移资金,则在一账户没有借出等量资金的情况下另一个账户不能存入。因此,记录存入并记录相应的借出需要原子、“全有或全无”的操作委托(committal)。
以前,为了进行原子事务,通常应用依赖于两阶段提交模型。在这种情况下,对委托暂时保持/缓冲数据。在第一阶段,寻找所缓冲的数据可原子地提交给保持该数据的所有数据存储的保证。在第二阶段,如果收到保证,则保持该数据的所有数据存储将提交改变。如果数据存储的一个或多个不能提交,则操作被中止且数据视图中的更新丢失,其中数据视图是提供对数据库中的数据进行读和/或写访问的一种类型的数据客户端。丢失这种数据使用户不得不再次输入数据,浪费时间和资源。
本发明正是针对这些因素和其它因素作出的。
发明概述
提供发明概述来以简化形式引入在以下详细描述中将进一步描述的概念选择。发明概述不旨在标识权利要求的主题的关键特征或本质特征。
根据本发明,提供用于在应用中维护隔离数据的计算机实现方法。接收该数据以及与执行相关于该数据的控制操作的请求。执行控制操作,并更新关于该数据以及控制操作的状态信息。
根据其它方面,本发明涉及一种可由计算系统访问且编码有用于构建能够隔离局域化数据的应用的计算机程序的计算机可读介质。接收应用规范、标识需要隔离的一个或多个数据实体、并对各个数据实体实现一个或多个事务变换。
根据再其它方面,本发明涉及应用中数据隔离的系统。控制模块执行各种控制操作。缓冲模块存储缓冲数据并维护相关于该缓冲数据以及相关于控制操作的状态信息。可任选地,策略模块允许缓冲和/或控制操作性能的进一步精细化。
通过阅读以下详细描述和关联附图的评述,表征本发明的这些和各种其它特征以及优点将变得显而易见。
附图说明
图1示出其中已实现本发明一实施方式的应用环境示例。
图2示出可在其上实现本发明一实施方式的适当计算系统环境的示例。
图3是示出根据本发明一实施方式的XML应用框架(XAF)应用的示例性实施方式的功能图,其中应用组件连接于一个或多个UI和一个或多个数据存储。
图4示出在本发明一实施方式中执行的操作的操作流程。
图5示出在本发明一实施方式中执行的操作的操作流程。
图6示出在本发明一实施方式中执行的操作的操作流程。
详细描述
可通过使用一个或多个“事务变换”将数据客户端中的数据选择性地与数据存储隔离。图1示出其中已实现事务变换114的应用环境示例。事务变换114包括存储隔离数据和关于该数据的状态信息的缓冲模块116以及结合缓冲模块116使用两阶段提交协议使得失败的提交不造成数据丢失的控制模块118。以下更加详细地描述缓冲模块116和控制模块118。
数据存储102和104包含数据库服务器上或计算机可读介质上的数据。可向数据存储读写数据。可由连接到给定数据存储的代理向给定数据存储发送检查或某些其它请求来查看是否有可能向该数据存储写入数据。如果有可能写入数据,则肯定指示被传送回该代理。类似地,如果不可能或不知道是否可能写入数据,则否定指示被传送回该代理。
数据连接器106和108将数据变换110、112和114连接到数据存储102和104。在一实施方式中,在数据连接器106和108内实施协议用于处理一种或多种类型的数据存储。每个协议处理一种或多种类型的数据存储,诸如使用特定格式编码的数据库文件。数据连接器协议原子地提交从数据客户端122和124接收的数据更改或改变。
在一实施方式中,数据连接器106和108通过悲观并发(pessimisticconcurrency)实现原子性(atomicity)。悲观并发涉及在数据存储处锁住数据子集(例如一个或多个记录)以防止客户端以影响其它客户端的方式更改数据。在悲观并发模型中,当客户端执行施加锁的动作时,其它客户端不能进行与该锁冲突的动作直到拥有该锁的客户端释放该锁。该模型可用于其中存在对数据的高度争用和/或其中用锁保护数据的成本比在发生并发冲突时回退事务的成本更低的环境。当加锁时间较短时在诸如记录的程序化处理中最好使用悲观并发。
在另一实施方式中,数据连接器106和108使用具有补偿动作的乐观并发(optimisticconcurrency)来实现原子性。乐观并发不使用锁。当第一客户端需要更新记录时,协议判定自该记录上次由第一客户端读取以来另一客户端是否已对其进行了改变。乐观并发在较少数据争用的环境中很有用。补偿动作是补偿事务影响的动作。例如,对从账户A到账户B的资金银行转移影响的补偿是等量的资金从账户B转移回账户A。类似地,对预定旅馆房间的补偿动作是取消保留。补偿动作允许事务“回退”或者收回而无延迟副作用或其它负面结果。当两个客户端之间发生冲突时(例如第一客户端读取数据值,然后第二客户端在第一客户端尝试更改该值之前更改该数据值),补偿动作可用于回退事务。在一实施方式中,数据连接器106和108分别从数据存储102和104高速缓存数据。如果数据客户端请求的数据被数据连接器高速缓存,则不需要向对应数据存储查询所请求的数据。在以下结合图3更详细地描述数据连接器。
数据变换110、112、114和120根据预定规则编码和/或解码数据。数据变换110、112、114和120实现能够执行任意复杂处理的函数。数据变换112和120彼此串联。因此,由数据变换112实现的函数的结果被用作由数据变换120实现的函数的输入,反之亦然。在一实施方式中,可将数据变换串联连接以缓冲先前变换的结果,并且允许更容易和模块化地实现复杂函数。类似地,可对视图内的数据子集进行提交或刷新(参看下文)而不影响视图中数据的剩余部分。
数据变换114是公知为事务变换的一种特殊数据变换,并且诸如包含缓冲模块116和控制模块118。在一实施方式中,事务变换允许隔离数据被原子地提交并以在数据存储之间数据一致的方式被原子地提交。缓冲模块116保持来自数据客户端122和124的隔离数据。在一示例中,数据客户端122和124是用于编辑数据存储104中的数据的对话框。对数据的编辑基本上如该编辑被做出时一样地被存储在缓冲模块116中。在另一实施方式中,事务变换将针对其输出的编辑请求映射回针对其输入的编辑请求。结果,当做出编辑时,输入/请求实体将这种编辑识别成完成。此外,这些事务变换使用它们的缓冲116来实现这种编辑的延迟和受控映射,如下所述。
若干类型的控制操作可由事务变换执行。当用户期望提交数据客户端122和数据客户端124中的数据时(例如当激活与数据客户端关联的“Apply(应用)”按钮时),控制模块118从该数据客户端接收提交控制操作并尝试使用两阶段并发协议来提交数据,如下结合图6所述。在一实施方式中,一旦缓冲模块116中的缓冲数据被成功提交,可将其删除。当用户期望刷新缓冲器中的数据(以及因此的在相应数据客户端中显示的数据)时,控制模块118从该数据客户端接收刷新控制操作并刷新缓冲模块116中的数据。可将被刷新的数据传递到数据客户端使得用户可访问所更新的数据。刷新隔离数据的能力可用于代替在常规两阶段并发模型中终止提交,如下结合图6所述。
在某些情况下,更新缓冲器中的数据而不损坏一个或多个用户使用一个或多个数据客户端已做出的未提交更改是有利的。在这种情形中,同步控制操作可由数据客户端发放。当控制模块118从数据客户端接收同步控制操作时,基于数据存储中的最近版本更新缓冲模块116中的隔离数据,且将对隔离数据的未提交更改与更新数据合并。对数据的两组或两组以上的更改的同步过程是本领域中公知的,且同步可用于各种环境中。如何在给定上下文中实现同步的细节对该上下文是极其专用的。例如,在产品数据库的上下文中,将产品线合并到数据库中是可以接受的,但是组合产品名称更改的两个版本是不可接受的。其它上下文对同步还有其它规则,这些规则中任一个或全部可与本发明结合使用。解决冲突也是公知的。在冲突情形中提供并遵循预定规则,并由更新进行管理。其它实施方式可提醒用户解决这种冲突。
缓冲模块116维护可基于当前进行的操作类型而改变的状态信息。例如,如果提交正在进行,则状态信息包括提交是否挂起、是成功或是失败。或者,如果刷新正在进行,则状态信息可包括刷新是否挂起或完成。如果同步操作正在进行,则状态信息包括同步是否挂起、是成功或失败。以下结合图5和6更详细地描述特定控制操作。
数据客户端可访问的某些数据不需要隔离。例如,对金融数据库的更改(诸如用于追踪银行账户)通常被立即提交。在一实施方式中,给定数据视图可包括隔离数据和未隔离数据两者。在另一实施方式中,给定数据客户端可包括不能在数据客户端内编辑的只读数据。
其它实施方式同样可以预期。在一实施方式中,本发明与阶段和域结合使用以限制操作的次序。阶段和域在题为“ApplicationFrameworkPhasingModel(应用框架阶段模型)”的律师档案号14917.0258USU2/MS310224.01、序列号为No.11/360,455的申请以及题为“MultithreadingwithConcurrencyDomains(并发域的多线程化)”的律师档案号14917.0258USU1/MS310186.01、序列号为No.11/360,454的申请中阐述,两个申请都已授让给Microsoft公司并且通过引用整体结合于此。
考虑到本发明可实现为计算机系统,提供图2来示出可实现本发明实施方式的适当计算系统环境的示例。在其最基本配置中,系统200包括至少一个处理单元202和存储器204。取决于计算设备的确切配置和类型,存储器204可以是易失性(诸如RAM)、非易失性(诸如ROM、闪存等)或两者的组合。该最基本配置在图2中由虚线206示出。
除了存储器204之外,该系统还包括至少一个其它形式的计算机可读介质。计算机可读介质可以是能由系统200访问的任何可用介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。
计算机存储介质包括能以存储诸如计算机可读指令、数据结构、存储模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器204、可移动存储208和不可移动存储210都是计算机存储介质的示例。计算机存储介质包括,但不局限于RAM、ROM、EPROM、EEPROM、闪存或其它存储技术、CD-ROM、数字多功能盘(DVD)或其它光学存储、盒式磁带、磁带、磁盘存储或其它磁性存储设备、或可用于存储所需信息并可由系统200访问的任何其它介质。任何这种计算机存储介质都可以作为系统200的一部分。
系统200还包括允许该系统与其它设备通信的通信连接212。通信连接212是通信介质的一个示例。通信介质通常体现为在诸如载波或其它传输机制的调制信号中的计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传输介质。术语“调制信号”表示使其一个或多个特征以在信号中编码信息的方式设置或更改的信号。作为示例而非限制,通信介质包括诸如有线网络或直接接线连接的有限介质以及诸如声学、RF、红外和其它无线介质的无线介质。本文所用的术语计算机可读介质包括存储介质和通信介质。
根据一实施方式,系统200包括诸如输入设备214和/或输出设备216的外围设备。示例性输入设备214包括,但不局限于键盘、计算机鼠标、笔、或书写笔、语音输入设备、触觉输入设备等。示例性输出设备216包括,但不局限于诸如显示器、扬声器和打印机的设备。为了本发明的目的,该显示器可以是主输出设备。各个这些设备是本领域中公知的,因此在此不再赘述。
本发明的实施方式可在XML应用框架(XAF)环境中实现。XAF框架允许应用的创建和更改,如题为“XMLApplicationFramework(XML应用框架)”的律师档案号14917.0258USU3/MS311586.01、序列号No.11/360,457的相关申请中阐述,该申请已授让给Microsoft公司并且通过引用整体结合于此。图3是示出根据本发明的XAF应用的示例性实施方式,其中应用组件连接到一个或多个UI和一个或多个数据存储。
示例性XML应用框架(XAF)302在图3中示出。XAF302可用于执行和管理诸如应用304的应用的执行。在XAF302内执行的应用304包括一个或多个UI连接器306、一个或多个动作308和一个或多个数据连接器310。在某些实施方式中,应用304还包括一个或多个访问器312、或一个或多个数据变换314和/或316。应用304内的组件用于将UI事件变换成数据变化以及将数据变化变换成UI事件。这样,UI连接器306被耦合到一个或多个UI318和/或320。在XAF302内,应用304中的数据事件或数据表示是以标准格式。例如,数据事件和数据表示是以XML的。
UI连接器306提供应用304与一个或多个UI318和/或320之间的连接。在一实施方式中,UI318和/或320是向用户显示信息的图形用户界面。图形用户界面可以是窗口系统,诸如MicrosoftWindows操作系统。UI连接器306示出并支持应用用户编辑XAF302内的数据的能力。UI连接器306映射XAF数据层(由数据连接器310、数据变换314和316以及数据存储322和/或324表示)与具体UI318和/或320之间的数据。此外,UI连接器306将来自UI318和/或320的UI事件映射到数据连接器310内的数据编辑操作。
UI连接器306专门针对UI318和/或320中的UI元素类型。因此,对于UI318和/或320内数据项目的各个UI表示,存在对应的UI连接器306。在一示例中,在UI318和/或320中显示的诸如电子数据表内单元值的数据元素将具有耦合到数据元素的专用UI连接器306,它将用户对数据元素的更改转换成UI事件并映射到动作308。因此,UI连接器306将具体UI事件转换成在XAF应用304内一般表示的XAF动作。在一实施方式中,将应用304内的所有数据变化表示成XML数据变化。在另一示例中,用户可操作用户接口控件,诸如滚动条。滚动条中的变化在UI318和/或320的状态中创建变化。UI状态变化也可表示成数据变化。因此,UI连接器306可接收例如滚动条操作的UI事件并将该UI事件转换成XAF数据层的XML数据变化事件。
UI连接器306将UI事件转换/映射到动作308。动作308是XAF数据层中数据变化的说明性语句。例如,用户对滚动条的操作可创建“点击滚动条”事件。UI连接器306对该UI事件进行转换并将其映射到动作308,诸如“将滚动条下拉一个位置”。在一实施方式中,数据变化动作在XML中表示。
数据连接器310向外部数据存储322和/或324配置数据或从其配置数据。类似于UI连接器306,数据连接器310在不同外部数据存储322和/或324中的内部XAF数据表示和外部数据类型之间转换。因此,对各个类型的外部数据都存在数据专用数据连接器310。数据连接器310接收动作308并将标准格式的XAF数据动作308转换成数据存储专用动作来作用于数据存储322和/或324内的数据。在一实施方式中,数据连接器310将XML数据动作转换成数据存储专用动作。例如,可将由标准格式的XML语句表示的滚动条操作转换成接口状态专用数据变化并将其发送到存储专用接口状态数据的数据存储322或324。
此外,数据连接器310将数据存储322和/或324转换成标准格式的XAF数据表示,并将其发送到UI连接器306。UI连接器306将标准格式的XAF数据表示转换成UI事件,并将其发送到UI318和/或320。因此,对于UI318和/或320内的任何变化,UI连接器306将用户接口事件转换/映射到动作308。动作308被发送到数据连接器310,该连接器将动作308转换成数据连接器310内的事件专用变化。一旦数据被更改,则数据连接器310将数据存储322和/或324中的已更改数据转换成标准格式的XAF数据表示。数据连接器310将XAF数据表示发送回UI连接器306,该连接器将XAF数据表示转换成UI专用显示事件。UI连接器306将UI专用显示事件发送到UI318和/或320以供显示,其中UI318和/或320显示从UI事件创建的已更改数据。
应用304可继续对应用304内发生的任一动作和所有动作处理数据与UI事件之间的这些循环变化。在某些实施方式中,数据存储322和/或324内数据的变化强制UI318和/或320中的变化而无需发生用户事件,即用户更改或改变事件元素的事件。这是其中从用户控制之外的另一操作强制的数据变化。
应用304内的某些可任选组件包括访问器312和数据变换314和/或316。访问器312允许用于数据连接器310中的数据类型的数据客户端一侧的映射并且将314和316转换成对数据客户端有用的数据类型或从其转换。为了访问确定数据存储322和/或324中确定类型的数据,动作308可指定访问器312或“访问模型”来用于该数据。访问器312允许应用304访问不统一的专用数据类型,诸如JPEG、MPEG等。因此,不论与对数据客户端有用的数据类型相比数据存储322和/或324内的数据类型如何,应用304都接口并改变该数据。访问器312确保数据连接器310可管理任何类型的数据,包括并未设计出或开发出的数据类型。在另一实施方式中,数据客户端可进一步注册访问器类型,且数据连接器310和变换314和316无需得知这些类型。
在其它实施方式中,一个或多个数据变换314和/或316在数据连接器310与UI连接器306之间。数据变换314和/或316将来自数据连接器310的输出改变成UI连接器306用于显示所需的UI定制格式。例如,如果UI连接器306需要列表中的数据,则数据变换314和/或316可通过一个或多个简单变化(各个简单变化由单个数据变换314和/或316实现)将表格数据更改成数据列表。因此,可通过一个或多个规范数据变换314和/或316将由数据连接器310输出的任何形式的数据转换成UI连接器306可接受并可使用的形式。数据连接器和变换可引入新的数据类型。这种扩展类型可用于通过得知这些新的数据类型而建立的下游变换。
响应于从应用开发者接收应用规范,本发明的一实施方式标识本发明的哪一部分应用需要隔离数据并按需实现事务变换。图4示出这些操作的操作流程。
接收操作402接收应用规范。在一实施方式中,应用规范指定XAF应用,包括哪些数据应被隔离,且标识操作404标识并标记应用内将被隔离的相应数据实体。
实现操作406实现被标记为待隔离数据实体的各个数据实体的一个或多个事务变换。然后以与数据变换基本上相同的方式连接和激活事务变换。
图5示出根据本发明一实施方式控制操作如何进行。接收操作502从数据客户端接收控制操作请求。在一实施方式中,该请求通过用户单击与该数据客户端关联的UI控件而触发。判定操作判定控制操作请求是否请求提交操作。如果控制操作请求是为了提交操作,则流程跳到“是”分支的发放操作608(图6)。如果控制操作请求不是为了提交操作,则流程跳到“否”分支的判定操作506。
判定操作506判定该控制操作请求是否请求同步操作。如果控制操作请求是为了同步操作,则流程跳到“是”分支的保存操作508。如果控制操作请求不是为了同步操作,则流程跳到“否”分支的刷新操作510。
如果同步操作被请求,则保存操作508保存对缓冲数据的任何未提交更改。可将未提交更改保存到计算机可读介质上的文件、易失性或非易失性存储器、或其它形式的计算机存储,或者将其提交到外部数据库或类似服务。然后流程进行到刷新操作510。
刷新操作510检索数据存储中存在的缓冲数据的最近副本,并将其置于与事务变换关联的缓冲器中。刷新操作510需要查询若干数据存储以判定哪个数据存储包含最近更新的数据副本。在另一实施方式中,刷新操作510可选择地或附加地检查与各个数据存储关联的数据连接器以查看数据连接器是否包含缓冲数据的高速缓存副本。
判定操作512判定控制操作请求是否请求同步操作。在一实施方式中,判定操作512简单地检查判定操作506的结果。如果控制操作请求是为了同步操作,流程跳到“是”分支的合并操作514。如果控制操作请求不是为了同步操作,则流程跳到“否”分支的操作流程的结束。
如果同步操作被请求,则合并操作514合并由保存操作508保存的对缓冲数据的更改,其中缓冲数据在刷新操作510中被刷新。合并两个版本数据体的规则随应用上下文而改变。某些示例性规则结合图1示出。在一实施方式中,可将来自不同数据客户端的多个变化一起合并以在各个数据客户端中实现同步。
图6示出根据本发明一实施方式的如何处理提交请求。接收操作602从数据客户端接收数据。在一实施方式中,数据客户端是应用用户通过其输入数据的对话框,且当激活与该对话框关联的UI控件时传送该数据。然后,缓冲操作604将该数据缓冲在一个或多个事务变换内或与其关联的存储器中。
当接收操作606收到对提交操作的请求时,调用经更改的两阶段提交协议。首先,发放操作608将提交请求发放到与数据存储关联的多个数据连接器。在一实施方式中,提交请求包括待提交的数据。提交请求由已高速缓存该数据的一个或多个数据连接器接收和/或由保持该数据的一个或多个数据存储接收,并且作为对确保该数据被原子地提交的请求对待。接收操作610从保持该数据的数据连接器和/或数据存储接收响应。一旦已收到所有响应,则判定操作612判定是否对提交请求的所有接收者都同意提交。如果所有接收者都同意,则流程跳到“是”分支的发送操作614。如果不是所有接收者都同意,则流程跳到“否”分支的发送操作616。
如果所有接收者同意提交该数据,则发送操作614向发放操作608中发放的提交请求的所有接收者发送提交命令。接收者提交该数据(即用变化更新它们拥有的数据)。
如果不是所有的接收者都同意提交该数据,则发送操作616向接收者发送中止命令。因此,使接收者得知所提出的提交将不发生,并且丢弃与该提交关联的任何数据。在一实施方式中,发送操作616仅向同意提交该数据的接收者发送中止命令,而不同意提交该数据的接收者自动丢弃该数据而无需明确命令。之后,刷新操作618执行刷新控制操作来刷新缓冲数据。在一实施方式中,刷新操作618取而代之地执行同步控制操作来同步缓冲数据。
本发明的其它实施方式也是可预期的。在一实施方式中,各个事务变换可包括履行同步规则的策略模块。在另一实施方式中,策略模块设定用于刷新和同步的并发策略。示例性并发策略包括悲观并发(其中总是制作所有缓冲数据的完整副本)和乐观并发(其中仅按需将数据拷贝到缓冲器中)。策略模块还允许模块化地附加策略来处理本文未描述的其它类型的控制操作。
在另一实施方式中,事务变换可用于与查询语言结合地访问和操作数据。SQL(结构化查询语言)就是广泛使用的一种这样的查询语言。XQuery是另一种这样的查询语言。结合本发明使用其它查询语言也是可以预期的。
在又一实施方式中,数据连接器310可影响并在某种程度上管理缓冲器的部分,例如图1的缓冲器和逻辑116。在这种情形中,连接器具有访问和/或操控缓冲数据以控制该数据的刷新和/或同步数据成分的逻辑。
以上所述的各个实施方式仅通过说明方式提供并不应解释为对本发明的限制。本领域技术人员很容易认识到可对本发明进行各种更改和改变而不依照本文示出和描述的示例实施方式和应用并且不背离所附权利要求书中阐述的本发明的真实精神和范围。