为移动应用缓存数据的系统和方法

文档序号:6410252阅读:239来源:国知局

专利名称::为移动应用缓存数据的系统和方法
技术领域
:本发明涉及计算机系统领域。更特别地,本发明提供用于在移动设备上缓存数据的系统和方法。
背景技术
:在移动设备上(例如膝上型计算机、个人数字助理、移动电话)运行的应用通常已经被设计用于联机使用或者脱机使用。两种类型的移动应用倾向于使用浏览器的某种形式与用户交互。联机应用喜欢连续访问企业服务器(例如,中央数据库服务器)。相反,脱机应用操作与企业服务器有最少的或者没有接触。更特别地,只要需要,联机移动应用就能访问企业服务器上的数据,从而可能不需要在本地存储数据。然而,由于联机移动应用的“总是连接的”的特性,连接费用(例如,用于无线发射时间)相当高。同样,联机移动应用通常要忍受无法预测的等待时间。当联机应用向服务器发送请求时,除了在服务器上的任何拥塞外,响应时间还取决于移动设备的无线网络的使用水平。此外,取决于无线网络的范围,联机应用的使用可能受地域限制,且在一些位置可能是被禁止的(例如,飞机、医院)。更进一步,联机移动应用经常访问成组的数据,例如,整个网页、数据表等等。当数据项需要替换时,可能替换整个数据集而不是仅仅替换一个项。这会效率低且增加操作应用的成本。移动应用倾向于访问成组数据(例如,整个网页)的一个原因是数据紧紧地与数据显示相结合。特别地,当为移动应用拷贝或下载数据到客户设备上时,每个数据集合(例如,表、一组数据库的行或者字段)典型地在将在显示该数据集合的页面内传送。这样,除了能在那个网页内显示,数据不能在客户端显示。因为每个数据组或者集合可能用完整的显示页面存储,并且除了它们封装的数据以外许多页面可能是一样的,所以可能浪费在客户端上的许多存储空间。与联机应用形成对比,脱机移动应用不喜欢连续访问由企业服务器保持的数据。来自企业服务器的一些数据(例如,瞬像)可以拷贝到或者复制到移动设备上。虽然脱机应用可能总是可用的(例如,当从服务器脱机时),但它不总是有最新的数据,而且它只能访问拷贝给它的数据。使用数据瞬像的脱机移动应用通常要求不时的或者定期的(例如,每天一次)把它存储的脱机数据与企业服务器同步。同步的频率通常与在移动设备上访问或修改数据项的频率无关。因此,可能使用失时效的数据在移动设备上执行许多事务处理或操作。同步可能引起高的开销,因为要经常交换大量的数据——即使是还没有改变的且不需要刷新的数据。例如,即使在网页内只有一个数据项需要更新,也可能下载或者交换整个网页或者网页组。由于数据同步不频繁,所以脱机移动应用不适合用于高度动态的数据。此外,脱机移动应用经常需要保持所有由应用做的数据更改的事务日志,以便于同步。通常,用于移动应用的存储在移动设备上的企业数据可能有不同的寿命。一些数据点或项可能是长时期有效的(例如,产品描述、地址);其它数据点或项可能在仅仅相对短时期之后无效(例如,股票报价、货币兑换比率)。典型地不配置现有的移动应用和客户数据库来识别或考虑下载数据的寿命。此外,那些尝试为用户提供重要功能的移动客户应用倾向于需要强有力的软件和/或硬件配置(例如,Java虚拟机、HTTP监听器、服务引擎)。这样的需要避免了例如个人数字助理(PDA)或者智能电话一样的更小的、限制更多的客户设备的使用,也增加了客户操作的开销。
发明内容在本发明的一个实施例中,提供用于细粒度缓存数据的系统和方法,这些数据由在移动(例如,无线)设备上执行的应用使用,移动设备被配置用于第三代无线网络或其它企业网络。在这个实施例中,设备不需要总是访问数据的中央源或主源(例如,数据、网络或应用服务器)并且能在联机或脱机模式下使用缓存的数据。在设备和数据源之间的传统的同步操作是不必要的,因为在移动设备上缓存的数据在需要的时候可以被选择地刷新。因此,获得两种操作模式的好处(例如,刷新的数据、可接受的连接成本)。在本发明的实施例中,数据在缓存表中缓存,缓存表被实现为移动设备的本地DBMS(数据库管理系统)的一部分。在这个实施例中,缓存表的内容在要求时从服务器检索并根据与内容相关联的缓存控制指令进行本地缓存。缓存表的列(或属性)的子集被指定为缓存表的“访问参数”。为了从缓存表检索数据,为访问参数中的每一个提供一个值。这些值构成用于缓存表的一个实例的自变量。如果那些自变量值的行(或多个行)不在本地数据库中或者已经过期,DBMS会与相应的服务器联系以检索并缓存这些行。例如,如果缓存表被配置成报告关于不同仓库位置的库存数字,响应指定的零件号,缓存表的列可以包括零件号、仓库号、存储在相应仓库中的零件的数量。被提供作为查询部分的零件号可以是缓存表的访问参数。对于每一个唯一的零件号,缓存表的单独实例包括报告存储在每个仓库中的零件数量的一组行(结果集)。在本发明的实施例中,通过在缓存表内封装数据缓存策略,数据缓存与应用逻辑分离。这使应用开发者不需要把缓存策略编码成应用逻辑的一部分,并允许数据库管理者定义缓存策略。在本发明的另一个实施例中,提供了一种算法以定义缓存表的数据和事务型语义,其方式与数据库事务处理的ACID(原子性、一致性、孤立性和持久性)特性是一致的。特别地,存储在缓存表中的数据有相关联的有效期,该有效期可以由数据来源的数据源指定。数据也可以有相关联的缓存控制信息,如果没有可用的到服务器的连接,该信息指出在变为无效之后数据是否可以使用和可以使用多久。当本地数据库的操作影响缓存表时,应用该算法以确定是否使用缓存数据或是否尝试从数据源刷新数据。该算法可能考虑是否有可用的到数据源的连接、数据是否被同一个或者另一个事务处理锁定、数据是否是无效的、当数据无效时,相关联的缓存控制信息是否允许使用数据等等。例证性地,本发明的实施例使移动设备和应用能够脱机访问本地数据并且在需要时选择性地刷新特定数据(例如,缓存表结果集)。因此,连接成本(例如,到数据源)和对失时效数据的使用减到最少。由于缓存表是一个表,所有的移动数据库应用不必在应用逻辑中写额外的代码就能得到由缓存表提供的益处。图1是描述适合实现本发明实施例的移动计算环境的框图。图2是依照本发明实施例被配置在移动计算设备上缓存数据的客户设备框图。图3A-B包括图示依照本发明实施例的使用和刷新缓存表的一个方法的流程图。图4描述依照本发明实施例的配备有智能客户代理的移动客户设备。图5A是演示依照本发明实施例在智能客户代理内操作分配器以处理请求页面的方法的流程图。图5B-C包括演示依照本发明实施例的脚本引擎可以在智能客户代理内组合页面的方法的流程图。图6描述根据本发明一个实施例的缓存表。图7-11演示根据本发明的一个实施例用于在操作缓存表的客户设备与和缓存表相关联的数据源之间通信的例证性形式。具体实施例方式以下的描述使得本领域任何技术人员能够制造和使用本发明,且随后的描述是在本发明的特定应用和它们需要的环境下提供的。对公开实施例的各种修改对本领域技术人员来说很明显,且在不偏离本发明范围的情况下,这里定义的一般原理可以应用到其它实施例和应用中。因此本发明并不打算限于显示出的实施例,而是与这里公开的原理和特征一致的最宽范围一致。在其中执行本发明当前实施例的程序环境结合了通用目的的计算机或者专用目的的设备例如移动计算机、PDA(个人数字助理)、电话等等。为了清楚,可以忽略对这种设备(例如,处理器、存储器、数据存储器、显示器)的详细描述。也应该理解可以使用多种技术实现本发明的方法。例如,这里描述的方法可以在计算机系统上执行的软件中实现,或者在利用微处理器或其它特别设计的应用特定的集成电路、可编程逻辑设备的组合或它们的各种组合的硬件中实现。特别地,这里描述的方法可以通过驻留在适合的计算机可读介质上的一系列计算机可执行指令来实现。适合的计算机可读介质可以包括易失的(例如RAM)和/或永久的(例如ROM、磁盘)存储器、载波和传输介质(例如,铜线、同轴电缆、光纤介质)。典型的载波可以表现为沿着局域网、例如因特网一样的可公开访问的网络或者其它通信链路传导数字数据流的电的、电磁的或光信号形式。引言在本发明的一个实施例中,提供一种系统和方法用于在移动设备上细粒度缓存在该设备上执行的应用所使用的数据。在这个实施例中,应用数据存储在包括一个或多个缓存表的数据库(例如DBMS)中,缓存表被配置以监控缓存数据的有效性和/或可用性。在这个实施例中,缓存表不仅缓存一个或多个数据行,而且存储描述数据的有效性、在哪儿或怎样得到数据的新鲜拷贝等等的缓存控制信息,或者与这种缓存控制信息相关联。当应用访问缓存表时,本地DBMS检查想要的数据,如果数据仍然有效,就提供服务。如果缓存的数据不再有效,如果有可用的到服务器的连接,本地DBMS就从服务器请求更新的数据。为了更新单个(无效的)数据行不是检索一大组的数据,而是可能仅仅检索那个行。在本发明的实施例中,缓存表是那些在需要时能从数据源(例如,企业服务器、数据库服务器、web服务器、应用服务器)检索到并存储在本地(例如,移动的)设备上的数据的数据库表。在服务器与设备之间的通信可以使用任何适合的协议,例如HTTP(超文本传输协议)、SOAP(简单对象访问协议)、WAP(无线访问协议)等等。容纳数据源的服务器可以被配置执行CGI(公共网关接口)程序、小服务程序(servlet)、applet、Java方法或其它模块以实现与这里描述的缓存表说明相关联的接口。在本发明的一个实施例中,缓存表与数据库编程模式兼容,以便移动应用能通过例如ODBC(开放式数据库互接)或JDBC(Java数据库互接)这样的标准接口访问缓存的数据。因而能使用通常的数据库模型和接口来写使用缓存表的本地数据库的移动应用。数据库通过它的缓存表管理数据的有效性、为无效数据检索更新等等。缓存表的数据和事务型语义可以被设计成遵循工业标准事务型语义。因为移动设备不可能总是有效地与企业服务器(或其它中央的/主要的数据源)通信,并且因为数据检索能被限定到仅仅那些无效的数据项,所以连接成本能保持相对的低。由于那些必须访问服务器的访问数量有限,所以由不可预测的等待时间引起的不稳定性能的问题更少了。在本发明的另一个实施例中,提供智能客户代理用于增强在移动计算设备(例如,个人数字助理(PDA)、膝上型电脑或笔记本电脑、智能电话)上执行的脱机应用的操作。在这个实施例中,客户代理通过选择性地进行联机访问和把应用内容与该内容的显示格式分开来增强脱机应用的操作。通过把数据(例如,缓存表、瞬像或规则的数据库表)和应用页面的显示描述或格式分开存储可以把内容和显示格式分开。当脱机应用需要页面时,客户代理从存储在本地数据库中的显示描述和数据重建应用页面。客户代理可以联机去检索易失的数据和/或失时效的数据;客户代理也可以帮助客户瞬像与服务器同步。此外,客户代理可以使服务器把信息推进到客户缓存表或数据库(例如,使用推进式监听器)并且也可以支持与客户应用的基于语音的交互。图1描述可以实现本发明实施例的示例性的移动计算/通信环境。在这个实施例中,通过直接的无线链路130和/或可能包括因特网的网络140可以访问企业服务器150,因此移动设备102a-102d的用户直接地或通过一系列的通信链路访问服务器150。用户的移动设备可以是膝上型电脑或者其它的便携计算机、PDA、电话、双向寻呼机或其它设备。在本发明的一个实施例中,除了所有缓存表以外,客户数据库或DBMS还可以包括一个或多个服务器数据的瞬像。在这个实施例中,缓存表存储可能从任何地方(例如,客户、任何远程服务器或其它系统)产生的数据,连同存储关于数据有效性的信息。瞬像存储来自服务器或者其它明确同步于服务器的来源的数据。示例性地,当脱机时瞬像数据可以始终是可用的,而依赖于数据的有效性,缓存表可以或者不可以脱机使用。最后,规则的数据库表可以用于存储由客户产生的和/或仅仅由客户使用的数据。缓存表概念图2是适合用本发明实施例实现的移动客户设备的框图。设备200包括移动应用210、数据库220和通信模块230。移动应用210是使用或利用存储在数据库220中的数据的应用。数据库220可以被配置成存储由应用210使用的任何类型的数据(例如,文本的、数字的、图形的、视频的)。数据库220包括一个或多个用于缓存数据的缓存表,例如缓存表222。数据库220也包括相关联的缓存控制信息224。下面提供关于缓存表和缓存控制信息的进一步详述。通信模块230被配置成访问那些存储缓存在数据库220中的数据的当前或主要版本的服务器或数据源。因此,如以下所描述的,为了下载新的数据、刷新的数据、对缓存数据的更新等等,数据库220可以通过通信模块230定期访问服务器。通信模块230可以由数据库直接操作,或者数据库可以通过应用210、操作系统或其它实体来访问通信模块230。这样,除了可以连接到数据库220以外或者不连接到数据库220,通信模块230也可以连接到移动应用210上。在这里描述的本发明的实施例中,数据库220是由Oracle公司提供的DBMS(数据库管理系统)产品,例如Oracle9iLite。在本发明的实施例中,缓存表特征可以以<S,C,O,P>形式的四元组表示。在这个形式中,S定义缓存表的模式或结构,C定义缓存表上的约束,O表示一组支持的操作,P表示用于更新或检索缓存表内容的一组协议(例如,当移动设备连接到或间歇地连接到数据源时)。缓存表模式在本发明的一个实施例中,缓存表的模式S由三种事件定义缓存表的名称、描述缓存表结构的列定义的列表和访问参数列表。缓存表名称可以遵守SQL(结构化查询语言)数据库的表命名惯例。列定义包括标识符和相关联的数据类型。每一个标识符与缓存表的列名相对应,并可遵循列命名的惯例。访问参数列表是缓存表的列标识符子集的有序列表。因为缓存表模式S描述缓存表的结构,它也可以定义缓存表的每一个实例的结构。在本发明的这个实施例中,缓存表实例包括那些对于访问参数的访问参数列有相同值的缓存表的所有行。自变量包括值的列表——缓存表的每个参数有一个值。这样,一个实例是有相同自变量的缓存表的一组行。缓存表实例的结果集包括该实例的一组行,每行包括那些不在访问参数中的列的列表。换句话说,结果集是在缓存表的非访问参数列上的缓存表实例的投影。缓存表的特定实例可以由后面跟着相应自变量值的缓存表名称来表示。图6描述根据本发明一个实施例的示例性的缓存表。Inventory(库存)缓存表600包括3个列Part#(零件#)602、Warehouse#(仓库#)604和QOH(现有的数量)606。在这个缓存表中,访问参数仅仅包括零件#602。这样,显示了两个自变量值1234和9876。基于两个自变量,显示了库存缓存器的两个实例。一个实例包括有零件#1234的三行,另一个实例包括有零件#9876的两行。不是访问参数部分的缓存表600的列构成两个实例结果集。在本发明的这个实施例中,示例性的缓存表可以根据以下的SQL(结构化查询语言)句法来定义<createcachetable>::=CREATECACHETABLE<表名>(<列列表>[,ACCESSPARAMETERS(<访问参数列表>)])USING<内容说明>Where<accessparameterlist>::=<访问参数名>[{,<访问参数>}...]使用这个示例性的SQL句法,样本缓存表可以如下定义CREATECACHETABLEInventory(part#char(4),warehousechar(8),qtynumber(10)),PRIMARYKEY(part#,warehouse),ACCESSPARAMETERS(part#))USINGInventoryTDPTYPEupdateableATMyCompanyDS;该示例性缓存表的模式S是“Inventory(part#char(4),warehousechar(8),qtynumber(10))”。指定一个访问参数part#。该缓存表的结果集包括一组行,这些行中的每一行包含两列仓库标识符和存储在仓库中的指定零件的数量。随后的从属部分更详细地描述这个样本缓存表定义的部分。通常缓存表T的模式可以写为T(a1,...am,r1...rn),这里T是缓存表的名称,a1,...am是访问参数列表,r1...rn是缓存表的结果集的列。这样,样本缓存表可以表示为Inventory(part#,warehouse,qty)缓存表的实例可以写为T(v1,...,vm),这里vi是访问参数ai的值。在这个实例中,元组<v1,...,vm>构成特定缓存表实例的自变量,相应结果集的每一行是<r1,...,rn>的形式。结果集的每一行可以被认为是单独的结果。在这里术语“缓存表”可以用于指有特殊结构(模式)的缓存表,或那个缓存表的实例。缓存表的一组实例可以称为缓存表的“扩展”。缓存表的扩展被定义成包括存储在本地数据库或DBMS中的缓存表的所有实例。缓存表T的扩展可以写为E(T)。对于缓存表,关于其扩展的每一行定义两个谓词“isValid(是有效的)”和“isUsable(是可用的)”。如下面进一步描述的,“isValid”谓词可以用于确定行是否是有效的(例如,在查询执行的时候),而“isUsable”可以用于确定行是否是可用的。示例性地,如果行是有效的,那么它是可用的,但是如果行是无效的,它可能是可用的或可能是不可用的。在本发明的一个实施例中,缓存表可以以多种方式用于SQL语句中。单独对缓存表名称的引用(例如,Inventory)可以解释为对缓存表扩展的引用。这样,SQL语句“Select*fromInventory”将返回当前存储在本地数据库的缓存表Inventory的所有实例的所有结果集的所有行。本地DBMS可能不检查行的有效性和可用性,也不做任何刷新缓存表实例的尝试。例证性的,这个类型的引用可能被限定于查询,可能对于更新是不可用的。可以认为它是缓存表的“脏读(dirtyread)”。对包括一整组访问参数的自变量值(例如,常数)的缓存表的引用将返回缓存表的一个实例。这样,语句Select*fromInventory(‘P123’)将返回关于零件号‘P123’的“零件#”、“仓库”和“数量”数据的表。有了这个类型的引用,如果需要,本地DBMS将使用以下描述的图3A和3B中示出的流程图来刷新实例。在SQL句子内的对缓存表的另一个引用可能在自变量中包括至少一个变量。如果该引用(例如,在查询中)是有效的(例如,值能受变量的束缚),这个类型的引用返回缓存表的一个或多个实例。这样,语句Selectp#,partName,warehouse,qtyFrompartP,Inventory(P.p#)能用于获得零件表中零件号的库存的结果集。如果没有值能受变量的约束,则认为查询是无效的。用这种类型的引用,如果需要,本地DBMS将使用图3A和3B中示出的流程图来刷新实例。前述的例子演示缓存表访问参数是怎样能受到另一个表的列或表达式的限制的,包括另一个缓存表的结果集。例证性地,缓存表列的完全有限制的列的详细说明可以使用缓存表名称的别名。如下面的SELECTP.p#,P.pname,Inv.qtyFROMP,Inventory(P.p#)InvWHEREInv.qty>100约束在本发明的实施例中,可以在任何缓存表扩展(例如,一组缓存表实例)上定义约束。因此缓存表的列列表能用于定义缓存表上的约束。例如,主关键字或外关键字的约束可以在缓存表的列定义中定义(例如,如果它们是单一的属性关键字),或者可以在缓存表定义的约束部分中的PrimaryKey(主关键字)或ForeignKey(外关键字)子句中定义。上述定义的样本库存(Inventory)缓存表包括一个约束,由part#(零件#)和warehouse(仓库)组成的主关键字。这意味着对于指定的part#,结果集可以包括许多行或者结果,但是在结果集中不会有两行有相同的仓库值。当定义缓存表的约束C时,有几种选择。例如,单一的主关键字可以定义为所有访问参数的组合或者可以定义为所有访问参数和一些结果集标识符的组合。例证性地,如果库存缓存表的访问参数‘part#’被定义为该缓存表的主关键字,那么为‘part#’的特定值返回的数据能包含至多一个单行。相反地,如果主关键字被定义为‘part#’和‘warehouse’的组合,那么能为‘part#’的给定值返回多个行。但是对于‘part#’的每一个值,‘warehouse’的值将是唯一的。对于在本发明的一个实施例中的每一个缓存表,非空系统约束是自动为每一个访问参数定义的。附加的约束可以在缓存表的扩展上定义。只要从数据源接收到结果集和从这些约束构造实例,DBMS就将基于这些约束执行数据完整性检查。完整性约束也可以用于最优化缓存表的存储。例如,如上所述的,如果在缓存表的任何(或所有)访问参数上定义主关键字,那么每一个结果集将至多包含关于自变量的一行,且缓存表的扩展可以存储在一个物理的表中。概念地,对缓存表T的约束是在E(T)上定义的约束。在本发明的实施例中,如果主关键字被定义在缓存表的任何(或所有)访问参数上,则DBMS可以在单一的物理表中存储E(T)。所有在那个缓存表上定义的约束可以认为是关于E(T)的约束。示例性地,刷新缓存表实例包括从数据源的相应TDP(表数据处理器——在下面描述)检索实例的结果集、为每一个结果从自变量产生行、和把行插入E(T)。为了在E(T)上的插入、删除和更新操作,约束检查可以以正规的方式进行。当缓存表有引用主关键字的外关键字时,该主关键字包括另一个缓存表的全部自变量,DBMS可以通过在第二个缓存表实例上打开游标来检查外关键字约束。如果该实例存在并且是有效的或锁定的,那么认为约束是满足条件的。如果该实例不存在或是无效的,那么DBMS将设法从数据源检索或刷新结果集。如果数据源返回结果,则它是被缓存的并认为约束是满足条件的。如果没有到数据源的连接,则报告错误。操作在本发明的实施例中,为缓存表支持的操作O可以在缓存表定义的“Using(使用)”子句中定义。例证性地,Using子句可以指定数据源的名称、表数据处理器(TDP)的名称和TDP的类型。缓存器操作的执行存在于服务器上或者在容纳数据源并且移动应用可定期访问的其它位置上。当相应操作在缓存表上执行时由本地DBMS调用该执行。作为选择,一些操作执行可以存在于移动设备上。在本发明的一个实施例中,缓存表形成的Using子句部分可以使用以下的SQL句法USING<表数据处理器名称>TYPE{read-only|updateable|insertable|deletable(只读|可更新的|可插入的|可删除的)}AT<数据源名称>在本发明的这个实施例中,支持两种类型的TDP只读的和可修改的。可修改的TDP可以是可插入的、可删除的和可更新的组合。可插入的TDP允许把行插入到缓存表扩展内并实现在行插入到了缓存表实例内以后DBMS将调用的插入方法。相似地,可删除的TDP实现删除方法并允许从缓存表中删除行,可更新的TDP实现更新方法并允许更新行(例如,改变列的值)。如上所述,TDP建模那些能在缓存表上执行的操作。例证性地,只读TDP只实现“选择”方法,其采用自变量(即缓存表访问参数的一组值)并返回包括结果集的一组行。可能使用的协议在随后的部分中描述。相反,取决于在相应Using子句中声明的TDP的类型,可修改的TDP必须实现“插入”、“删除”和/或“更新”方法以及“选择”方法。在本发明的实施例中,当客户设备或者应用尝试更新缓存表时,本地数据库首先确定内容是否仍然有效(如以下描述的)。如果有效,则更新内容并调用在TDP上的相应方法,如果该方法返回失败,则更新退回到在该操作开始之前的点。如果内容是无效的,则数据库向TDP发送请求(例如,插入、删除、更新)并指示应返回新的结果集。“数据源名称”字段指的是可以从本地数据库分离的数据源。数据源被配置成向本地DBMS提供足够的信息以使DBMS能理解该源的容量和协议。数据源也可以指定缓存表实例的结果集的有效期和/或可用性周期。例证性地,数据源可以包括web服务器、应用服务器、数据库服务器或其它源。数据源可以实现一个或多个TDP,每一个TDP提供一个或多个方法以便于在代表缓存表的数据源上的操作。在本发明的这个实施例中,当由客户DBMS调用时,每个TDP负责提供缓存表实例的结果集。TDP可以实现执行插入、删除、更新和/或其它操作的逻辑。与上面描述的样本缓存表形成(缓存表“Inventory”)相关联,数据源可以使用以下的扩展SQL句法来定义<createdatasource>::=CREATEDATASOURCE<数据源名称>TYPE<类型名称>PROTOCOL<协议名称><目的地>where<类型名称>::=local|basic|auch|database<协议名称>::=omc|http|https|SOAP<认证>::={USING|USER}{CURRENTUSER|<用户名>}{IDENTIFIEDBY|PASSWORD}<密码><目的地>::=AT<URI>在数据库模式中“数据源名称”字段将是唯一的。数据源TYPE字段定义数据源的能力(例如,本地的、基本的、认证、数据库)。例证性地,“本地”数据源可以是在客户(移动)设备上实现的数据服务器,可以用于访问PIM(个人信息管理)数据库、电子邮件、地址簿等等。本地DBMS可以为指定的客户设备预载本地数据源。在这个实施例中,用于本地数据源的协议(在上述“协议名称”字段中指定)是OMC(Oracle移动客户)。“基本”数据源是能接受http、web服务请求或相似请求的简单数据源。它通常是较少会话(session-less)服务器,可能不认证请求器和支持事务处理。因此,对于基本的数据源可以忽略<认证>子句。在这个实施例中,“认证”数据源是需要客户认证的数据源(例如,客户必须登陆并获得会话对象)。认证数据源的<认证>子句提供用于登陆数据源的用户名和密码。提供认证数据源的服务器将支持登陆和注销方法,登陆方法将返回会话对象。“数据库”数据源是可以支持例如“beginTransaction(开始处理)”、“prepareToCommit(准备提交)”、“commit(提交)”和“rollback(回退)”的数据库操作的认证数据源。如果服务器容纳至少一个支持缓存表更新(例如,在缓存表内的行的插入、删除或更新)的TDP,则数据源可能是事务型的。与上面举例说明的缓存表形成有关,在缓存表形成的Using子句中被标识的数据源MyCompanyDS可以定义如下CREATEDATASOURCEMyCompanyDSTYPEbasicPROTOCOLhttpAT‘MyCompany.com/DS’;协议在本发明的实施例中,用于在本地DBMS与数据源或TDP之间通信的协议在缓存表四元组的P部分定义。特别地,P识别一个或多个协议(例如,SOAP、HTTP等等)、附加的XML标记或在来自数据源或TDP的响应中使用的其它设计(例如,HTML标记)。客户DBMS可以使用支持的协议中的任何一个与数据源通信。不管使用什么协议,在本发明的一个实施例中客户DBMS可以与数据源交换表1的任何或所有的数据项。表1如果使用的协议是HTTP,缓存表实例的自变量可以作为POST方法的部分在XML文件中发送。选择方法的结果可以是包含报头和正文的XML(可扩展标识语言)文件。报头可以包含缓存控制信息,正文可以包含构成结果集的一组行。例证性地,正文可以根据OMC缓存表结果集格式被编码为XML文件,或者它可以编码为更紧凑的OracleLiteCSV(逗号分隔值)文件。插入和删除方法可以接受自变量(例如,一组访问参数值)和表示那些客户想要插入缓存表或以前插入缓存表的单行的一列值。更新方法可以采用自变量和表示一个旧行的一列值以及表示更新的另一列。使用HTTPPOST方法,用于所有方法的所有数据作为XML文件被发送。在本发明的一个实施例中,请求格式是HTTPPOST请求,使用的URL是数据源的URL。用户代理串是“OracleLite”。那么,例如获得自变量‘p123’的Inventory缓存表实例的HTTP请求可以如下POSThttp//MyCompany.com/DS\r\ncontent-length...\r\nUser-AgentOracleLite\r\n...\r\n\r\n......<xCACHETABLEREQUESTop=“select”TDP=“InventoryTDP”><!--Handlemultipleinstances--><xINSTANCE><xARG><PART#>P123</PART#></xARG></xINSTANCE></xCACHETABLEREQUEST>请求报头可以包含一些附加的信息。例如If-Modified-Since。对请求的响应是包含报头和正文的XML文件。响应的格式在附录B中描述。在本发明实施例中的响应的报头可以包含任意的或所有的以下的信息响应日期(ResponseDate)——根据数据源时钟的3HTTP格式(例如,RFC1123)的响应的日期;最后的修改(Last-Modified)——在数据源上最后修改数据时的日期(也是以HTTP日期格式);期满(或期满日期(ExpiresorExpirationDate))——在此之前数据应被认为是有效的日期;使用期限(Time-To-Live)——有多长时间能认为数据是有效的,以秒表示;失时效(Staleness)——大于零的整数,表示如果没有到刷新结果集的网络连接失时效的(期满的)结果集是否能使用和能使用多久。失时效值1是默认的,表示失时效的结果集根本不能使用。如果失时效值是n,则表示该失时效的结果集能使用直到n倍的使用期限值。如表1中描述的,图7-11演示能用于客户设备与数据源之间通信的XML文件的样本格式。图7A-B演示样本响应文件格式702、704。每一个格式包括报头和正文。报头可以包括服务器标志、客户标志、缓存器信息(例如,最后修改日期、期满、使用期限、失时效)、TDP名称、结果集的自变量、缓存表模式、日期格式等等。正文包含一个或多个行组,这些行组中的每一个可以识别行组格式、动作(例如,替换、插入、删除、更新)、分隔器字符等等。响应格式702的正文是XML格式,而响应格式704的正文是CSV格式。图8演示样本选择请求文件800。图9演示样本插入请求文件900。图10演示样本删除请求文件1000。图11演示样本更新请求文件1100。缓存表操作如上所述,在本发明的一个实施例中,当客户应用发起涉及缓存表的操作(例如查询)时,本地数据库或DBMS确定有指定访问参数组的缓存表实例是否已经被缓存和是否仍然有效。如果是,缓存的结果集可以用于操作。否则,如上面刚刚说明的,为了检索结果集,数据库将调用在TDP上为缓存表定义的选择方法。来自TDP的响应可以包括报头,它包含在前面的小节中提及的任何或所有的缓存控制参数。图3A-B包括演示根据本发明的一个实施例用于确定是否更新、检索或刷新缓存表实例的算法的流程图。在这个算法中,当前日期指的是在客户机器上的当前日期/时间。在图3A-B的算法中,如果在期满(例如,由使用期限或期满日期参数定义的)之前被使用,缓存表的缓存实例可以被认为是“有效的”。如果(1)实例是“有效的”,(2)它由事务处理锁定,或(3)如果该实例已经期满,但是在它失时效(如从失时效参数计算的)之前正在被使用(因为到数据源的通信链路是不可用的),则可以认为该实例对于事务处理是“可用的”。更正式地可用的=有效的OR锁定的OR(没有到数据源的连接AND(响应日期+(使用期限*失时效)>=当前日期))在状态300中,操作(例如,查询)由本地数据库或DBMS(数据库管理系统)接收。该操作涉及到数据库被配置存储的一个或多个缓存表实例。在状态302中,DBMS确定这是否是涉及被提供作为操作部分的自变量的第一个操作。更通常地,DBMS可以确定它是否有对应于自变量的结果集,而不管结果集是否是有效的、可用的、失时效的、或处于其它某个状态。如果这是关于这个自变量的第一个操作(例如,数据库不包含与该自变量相关联的结果集),则这个图示的方法在状态304继续;否则,该方法前进到状态310。在状态304,DBMS向数据源发出请求,请求被指向与缓存表相关联的表数据处理器,以获得与自变量相对应的结果集。在状态306,在DBMS中为结果集产生新的缓存表实例,且新的缓存表实例被用于满足操作。示例性地,缓存报头可以存储在客户设备上。然后该方法结束。如果不能接通数据源以获得结果集(例如,在状态304),则由数据库来显示错误。在状态310中,关于自变量的以前的结果集位于缓存表中,DBMS确定目前它是否由当前的事务处理锁定。在本发明的这个实施例中,如果当前事务处理的事务处理隔离级是“可重复读取的(RepeatableRead)”或“可连续的(Serializable)”(这将导致结果集被锁定),DBMS将不会为当前的事务处理刷新结果集。如果当前的事务处理已经锁定结果集,则图示的方法前进到状态316。否则,在状态312中,DBMS确定当前的事务处理在缓存的结果集上是否有活动的游标。在本发明的这个实施例中,如果当前事务处理的事务处理隔离级是“提交了读取(ReadCommitted)”(这将导致活动的游标和没有锁定),DBMS将不更新结果集,以便提供读取的连贯性和游标的稳定性。如果当前的事务处理有在结果集上打开的活动游标,该方法前进到状态316。否则,在状态314中,DBMS确定缓存的结果集是否有效。如上所详述的,如果还没有超过结果集的使用期限参数或期满日期(例如,响应日期+使用期限>=当前日期),则可以认为结果集是有效的。如果缓存的结果集不是有效的,图示的方法在状态316继续;否则,该方法前进到状态322。在状态316,DBMS确定到与缓存表相关联的数据源(例如TDP)的连接是否可用,如果连接是可用的,则方法前进到状态324。在状态318,没有可用的到数据源的连接,且知道缓存的结果集是无效的,这样数据库确定结果集是否是可用的或失时效的。例证性地,如果(响应日期+(使用期限*失时效)<当前日期),则可以认为结果集是失时效的。如果缓存的数据还不是失时效的,那么该方法继续到状态322。否则,缓存的结果集是无效的和失时效的,且没有可用的到能刷新缓存表实例的数据源的连接。因此,在状态320中DBMS显示错误,该方法结束。在状态322中,DBMS中存在的结果集用于满足当前的操作。然后程序结束。在状态324中,已经认为目前缓存的结果集是无效的,但是到数据源的连接是可用的,那么请求刷新操作。例证性地,刷新请求可以包括反映以前的结果集刷新的最后修改日期的If-Modified-Since报头。如果不能从最后的刷新或更新得到最后修改日期值,那么使用响应日期作为代替。在状态326中,DBMS确定是否在对请求的响应中接收了任何更新。例证性地,如果TDP(通过数据源)发现自从结果集最后一次被提供到本地DBMS之后还没有更新结果集,那么将不发送更新。如果接收了任何的更新,则图示的方法进入状态330。否则,没有接收到更新,这样在状态328中缓存控制信息被适当地更新,且缓存的结果集被用于当前的操作。例证性地,和响应一起接收到的任何缓存控制信息将被用于更新或重写存在的缓存控制信息。该方法然后结束。在状态330中,DBMS确定缓存的结果集当前是否由另一个事务处理使用。在状态332中,正在使用结果集,这样DBMS拷贝该结果集并把该拷贝标记为该结果集最近的版本。除了最近的版本,其他拷贝可以被标记成当事务处理停止使用它们时被删除。然后,在状态324中,DBMS根据从数据源接收的更新来更新结果集,并把更新的结果集用于当前操作。然后该图示的方法结束。在本发明的一个实施例中,本地时钟与服务器(数据源)时钟的同步是个问题,本地日期值可以计算并用于代替响应日期。响应日期和期满日期也可以用于计算使用期限值(如果不包括在响应中)。只读缓存表在本发明的一个实施例中,当查询或其它的缓存表操作仅仅通过名称(例如,没有自变量)引用缓存表T时,游标在E(T)(即缓存表的扩展)上打开。游标在E(T)内的每个实例的最近版本中迭代,而不考虑实例是否是可用的。本地DBMS不会尝试刷新或锁定实例。然而如果某个其它的事务处理在E(T)内的实例上打开游标,则可以刷新E(T)内的实例。应该记得更新操作必须提供自变量,因此将不会单独通过名称引用缓存表。当查询引用特定的缓存表实例时,例如T(v1,...,vm),这里每个vi是常数,DBMS将检查该实例是否是可用的。如果是,则在该实例上打开游标;如果不是,DBMS将设法刷新它。如果没有可用的到必要的数据源的连接,则可能返回错误。在本发明的实施例中,如果向高速缓存器发出查询的事务处理处于“提交了读取”的隔离级,且该查询包括自变量,则不会有锁定应用到受影响的缓存表实例。如果事务处理处于“可重复读取”的隔离级,则读取锁被应用到实例。如果事务处理处于“可连续的”隔离级,则读取锁可能应用到实例和E(T)。如果指定的事务处理关闭在缓存表上的游标然后再打开它,那么刷新策略可能取决于事务处理的隔离级。例证性地,如果事务处理的隔离级是提交了读取,那么如果高速缓存器在游标被重新打开之前变得不可用则将刷新缓存的内容。如果事务处理级是可重复读取或者是可连续的(读取锁应用到实例),那么相同的内容可以用于重新打开的游标,不管该内容是否已经期满。对于缓存表T,不同的实例可以有不同的有效期。例如,缓存表实例T1(v1,...,vm)的有效期可能是一小时,而缓存表T2(u1,...,um)的有效期可能是三十分钟。在这个例子中,(v1,...,vm)和(u1,...,um)是自变量。例证性地,实例的有效期由从其获得结果集的数据源来设置。客户DBMS可能不刷新那些仍然有效的缓存表内容。在本发明的实施例中,本地DBMS产生关于结果集有效期的ClosedWorld(关闭世界)假设,如果缓存表内容仍然有效,将不会刷新任何缓存表内容(结果集)。也假定在刷新过程中从数据源获得的任何内容包括已经在数据源提交的数据。可更新的缓存表对于可更新的缓存表,在本发明的一个实施例中,每次只有一个事务处理可以更新缓存表实例。在这个实施例中,写锁被应用到可更新的缓存表实例。当事务处理更新可更新的缓存表实例时,如果该缓存表实例仍然有效或已经被这个事务处理锁定,则更新首先应用到结果集。然后在数据源调用TDP的相应的更新方法。例证性地,如果该方法失败则更新失败。如果当更新缓存表实例时没有到数据源的连接是可用的,则报告错误。如果在更新的应用过程中有任何错误,DBMS将回退在数据源的事务处理。缓存表T的实例是用于查询的读取连贯性、游标的稳定性的单元,且在这个实施例中缓存表T是能够为可更新缓存表的并发控制锁定的最小目标。正式地,缓存表实例是E(T)的子集,其中在子集中的所有行有相同的自变量T(v1,...,vm)≡{x|x∈NE(T)∧x.a1=v1∧...∧x.am=vm}当且仅当在由响应日期和使用期限之和表示的时期结束之前在该实例上打开的游标被打开,那么缓存表实例在这个实施例中是有效的IsValid(T(v1,...,vm))(ResponseDate(T(v1,...,vm))+Time-To-Live(T(v1,...,vm)))>=CurrentDate当且仅当如果缓存表实例的结果集是(1)有效的,(2)为了更新由事务处理锁定,或者(3)当游标在实例上打开时,没有可用的到数据源的连接,且实例还没有通过它的失时效界限,则缓存表实例的结果集在这个实施例中是可用的IsUsable(T(v1,...,vm))IsValid(T(v1,...,vm))∨hasLock(T(v1,...,vm))∨(-isReachable(DataSource(T))∧ResponxeDate(T(v1,...vm))+(Time-to-Live(T(v1,...,vm))*Staleness(T(v1,...vm))))>=CurrentDate)在本发明的实施例中,只要游标位于实例的行上,实例就不能被修改。如果另一个事务处理尝试打开在相同的实例上游标,本地DBMS将从数据源中检索关于那个实例的结果集并产生新的实例。新的实例变成实例的最近版本,当它们的游标移动时所有其它的版本将被清除。智能客户代理在本发明的一个实施例中,提供智能客户代理用于方便移动客户设备上的脱机操作或移动应用。更特别地,在这个实施例中,客户代理增强了移动应用的一个或多个特征,例如,与用户的语音交互、把数据从服务器推进到客户、和选择性的联机访问远端数据(即,存储在除客户端以外的地方的数据)。客户代理也可以使得将要显示给用户的内容与显示内容的格式相分离。例证性地,后者的益处允许客户端从指定的显示格式和能使用该格式显示的一个或多个数据组中实时产生页面。然后可以通过合适的客户浏览器显示页面。例如,在为涉及库存数据访问的移动应用实现的本发明的实施例中,客户代理允许数据的显示描述或格式与库存数据分开存储。这样,显示格式可以被配置为指定的零件号显示例如零件名称、描述、价格、现有的数量等等的信息。数据可以存储在数据库、高速缓存器、缓存表或其它结构中。当用户提供特定的零件号时,相应的数据被检索并与显示格式相结合用于显示给用户。例证性地,显示格式或显示描述页面可以容纳变量、字段名称或其它表示数据或内容项的占位符,也容纳能用于控制本地数据库中的数据如何能用于替换占位符的脚本语言中的命令。智能客户代理的脚本引擎执行在页面中的脚本语言以在页面返回到浏览器之前用实际值替换占位符。本领域技术人员会理解以前的移动应用或脱机应用被配置以存储把内容与显示格式结合起来的静态的、一致的页面。因此每一组内容被存储为单独的页面,从而需要更大的存储容量并提供更小的灵活性。例如,如果只有存储页面内的一个数据项需要更新,则不得不检索包含那个项的整个页面。如果那个数据项是多个页面的部分,则不得不检索每一个那些页面。在移动客户设备中实现智能客户代理连同缓存表促进了混合联机/脱机应用的发展和使用,其在本地访问数据(例如,脱机),但是也有利于它自己联机访问选择的(例如,非常易失的)数据。移动设备也可以完全脱机操作并在返回到联机时提交数据的改变、完成的表格和其它信息。更进一步的,内容和应用可以被动态下载甚至可以被推进到客户端(例如,新的旅行路线,一组任务的改变)。在本发明的实施例中,存储在移动客户设备上的内容可以依照预定的模式存储。根据该模式,内容可以存储在数据库表、数据服务器内容的瞬像、缓存表或其它结构中。例如,在数据库中存储数据使客户代理能容易地并明确地装载和刷新数据。在瞬像中存储数据便于把新的/更新的数据从服务器推进到客户(如下面进一步描述的)。在缓存表中存储数据,如以前的小节描述的,允许使用用于数据的智能刷新政策,也允许在要求时从实际的任何源(例如,服务器)装载。该模式可以包括URL(统一资源定位符)或与URL相关联,这里URL表示要被检索、装载、更新等等的数据的位置。如上面提到的,除把内容与内容的显示格式分开以外,客户代理的实施例允许用户使用语音与移动应用交互。在上述的例子中。例如,用户可以说出零件号,移动应用可以通过说出相关联的库存数据进行响应。当用户操作车辆时或以其它的方式不能从另一个任务转移他的眼睛或手时,这可能是个特别的值。在客户代理的这个实施例中,语音应用程序或者语音到文本和文本到语音的转换器(例如,语法检查器、音位)的部件可以安装作为客户设备操作系统的一部分或者作为移动应用的一部分。为本发明实施例配置客户设备的过程可能涉及把一组应用页面或模块、用于应用的内容或数据、模式页面、应用程序(例如,语音应用或实用程序)、浏览器等等下载到设备。设计的从用户得出数据或内容或者为用户提供数据或内容的应用页面可以表示为显示描述或格式(如上面描述的)。对于根据本发明实施例配置的移动应用,下载页面可以识别一些或者所有的应用页面(显示格式)、语音文件、模式页面等等。装载或浏览下载页面可以自动地触发装载或检索每一个部件。在本发明的实施例中,下载页面包括以适当的脚本语言写的程序。该程序包括特殊的标签或标记(例如,“import”、“schema”)以识别要下载的数据项和要采取的动作。因此,下载页面不仅仅是要缓存的页面或其它内容的纯粹的列表。图4描述根据本发明的一个实施例配备有智能客户代理的移动客户设备。在这个实施例中,客户设备400可以是PDA、智能电话、手机、膝上型电脑或笔记本电脑或某个其它的移动计算设备。客户400包括数据库420、客户代理440和浏览器。客户浏览器可以与HTML(超文本标识语言)、XML(可扩展标识语言)或现在不知道或者以后开发的任何其它标识语言相兼容。使用下面描述的合适的协议识别和处理配置浏览器。客户代理440使用ODBC(开放式数据库互连)、JDBC(Java数据库互连)或某个其它的接口与数据库420交互。虽然客户代理440可以频繁地以脱机模式操作,但是当需要的时候(例如,如以下描述的)它也可以联机操作,在那时它可以通过无线(或有线)网络与一个或多个服务器接口。客户代理440可以为本发明的一个或多个实施例如下面描述的一样操作,而不需要在客户400上的Java虚拟机器(VM)。数据库420包括一个或多个以前小节中描述的缓存表422和相应的缓存控制信息424。数据库也可以包括一个或多个从服务器拷贝的数据的瞬像426和数据表428。例证性地,数据库420可以是Oracle9I,9iLite,或由Oracle公司提供的另一个DBMS。在图示的本发明实施例的一个实施中,数据库表例如表428在本地包含与数据服务器不同步的有用数据。瞬像426包含可以与数据服务器定期同步的数据(来自数据服务器)的子集。缓存表422包括有指定有效期的数据并且可以如以前小节中描述的那样被刷新(例如,当请求的缓存表内容是失时效时)。客户代理440的高速缓存器442被配置存储要由浏览器显示的页面的显示描述或格式。如上所述,当需要时显示格式可以容纳多种不同组的内容,从而不需要存储每一个组合的页面。高速缓存器442也可以缓存从数据库420中选择的数据。分配器444实现由浏览器定义的接口以把它自己注册为协议处理器。分配器从浏览器接收网页请求并把组合的页面传给浏览器。在本发明的一个实施例中,分配器444仅仅接收对应于一个或多个专用协议的页面请求。例如,浏览器可以被配置以为Oracle移动客户(OMC)协议发送页面请求到分配器;这样的请求可以包括“omc//www.oracle.com”形式的URL。例证性地,正规的HTTP(超文本传输协议)请求(例如,http//www.oracle.com)可以由分配器444提交到服务器(例如,通过无线网络)。如果请求页被缓存,分配器444将把组合的页面转递到浏览器;如果请求页没有被缓存,则可以把该请求转递到远程服务器。发送到远程服务器的请求可以由请求器450处理和/或通过队列452处理。分配器可以在把页面提供给浏览器之前检查包含在请求中的和包含在页面,例如MIME(多用途因特网邮件扩展)类型的页面的报头中的信息,并调用适当的请求处理器。请求处理器将采取适当的动作,该动作可以以浏览器支持的标识语言产生有效页面,然后分配器把该有效页面给浏览器。客户代理440可以用OTL(脱机标签库)页面的请求处理器配置,OTL页面使用那些可能包含引用数据库表、瞬像和/或缓存表的SQL(结构话查询语言)标签的标签。在图4中,脚本引擎446可以包括用于OTLMIME类型的处理器。在图示的本发明实施例中,脚本引擎446组合将要通过浏览器(即,不是通过语音)图示地显示给用户的页面。当脚本引擎接收关于缓存页面的请求时(例如,从分配器444),它检索页面的显示格式(例如,来自高速缓存器442)和适当的数据(例如,来自数据库420)。然后该数据与相应变量或显示格式的占位符结合以产生组合页。然后组合页返回到分配器并传给客户浏览器。脚本引擎446被配置成与语音引擎448一起工作。当脚本引擎遇到例如<say...>或<prompt...>这样的语音标签时,它给语音引擎的适当方法准备自变量并调用该方法。然后语音引擎在听觉上响应该方法调用并返回控制和该方法调用的结果到脚本引擎。页面请求器450可以处理与远程系统(例如,数据服务器)的交互以检索请求的页面(例如,显示格式)和/或那些不在本地存储的或在本地存储但是失时效的内容。队列452可以存储请求和/或要与远程系统交换的其它通信。推进式监听器454可以被配置监听推进的内容、页面(例如,显示格式)、下载的页面、应用页面、和/或其它项。推进可以作为SMS(短消息业务)通信或以客户400可识别的其它格式被接收。正如推进的一个例子,数据服务器可以推进包含一系列SQL语句的SMS消息。推进式监听器454可以执行这些语句或把它们推进到分配器444或客户代理440的某个其它部件以执行。例证性地,这些语句可能导致新的或更新的数据存储在数据库420中。图5A-C描述根据本发明的一个实施例用智能客户代理操作移动应用的方法。在这个实施例中,移动应用在移动的或便携的(例如,无线的)计算设备(例如图4的客户设备400)上执行。移动应用被配置用于脱机操作(例如,没有任何的到远程服务器或其它计算机系统的有效连接),但是利用可用的连接来检索那些失时效的或不可用的数据(例如,没有存储在移动设备上的)。图5A演示操作分配器(例如,图4的分配器444)的方法。图5B-C演示操作脚本引擎(例如,图4的脚本引擎446)的方法。在图5A的状态502中,智能客户代理(例如,图4的分配器444)从调用者,典型的是客户浏览器,接收请求。例证性地,该请求可以按与客户代理相关联的一组预定协议(例如,OMC)中的一个协议提交。在状态504中,分配器确定请求的页面或其它项当前是否被缓存。特别地,分配器可以检查客户代理高速缓存器(例如,图4中的高速缓存器442)以确定它是否包含关于请求页面的显示描述或格式。如果请求页的格式在高速缓存器中,那么图示的方法进入状态510。否则,如果没有被缓存,那么在状态506中客户代理把请求转递到请求器(例如,图4的请求器450)以传给远程系统。如果移动设备当前是脱机的,该状态可以使请求排队直到连接是可用的。在状态508,从远程服务器返回的页面(例如,显示页面)被放进高速缓存器。在状态510中,分配器确定是否应把请求的页面照原来的样子返回给调用者(例如,浏览器)或确定是否应把请求页面发送到处理器之一以进行进一步的处理。例证性地,如果页面是OTL页面,分配器将调用脚本引擎,脚本引擎起到OTL页面处理器的作用。如果不需要进一步的处理,图示的方法进入状态516。在状态512中,分配器调用处理器(例如,脚本引擎)来处理页面。图5B演示脚本引擎根据其操作的一种方法。在状态514中,分配器检查以了解处理器是否已经返回页面。如果没有,该方法前进到状态518。在状态516中,请求的页面被递送给调用者。然后图示的分配器方法结束。在状态518中,分配器可能显示错误,这样结束该方法。或者,分配器可能为由处理器提供的页面等待额外的一段时间,或者重试该操作。根据本发明的一个实施例,图5B描述了OTL处理器例如图4的脚本引擎446的操作。在这个实施例中,脚本引擎接收OTL页面作为输入。OTL页面典型地包含页面的显示格式。显示格式可以起到一种页面模板的作用。然而不是包含真实数据,数据由它们的变量、字段或列名称、表名称或其它占位符来表示。OTL页面可以包含下载其它页面或资源(例如,图像文件)的标签、如果需要就形成数据库模式的标签、与语音引擎交互的标签、执行SQL语句并把结果与变量绑定的标签、把变量值写到输出文件的标签、和提供需要的流程控制以编程产生输出网页的标签。在状态530中,OTL处理器产生空的输出页面。当图示的方法前进时,输出页面将容纳来自输入页面的内容和/或其它内容。在状态532中,它开始扫描输入的页面或内容。例证性地,扫描可以逐个标签地执行。在状态534中,检查标签以了解该标签是否是OTL标签。如果是OTL标签,该方法在状态540继续。否则,在状态536,标签不是OTL标签,这样脚本引擎把字符从输入页面拷贝到输出页面,直到在输入中遇到OTL标签或者到达页面的末端。如果遇到OTL标签,该方法前进到状态540。否则,如果到达输入的末端,在状态538中输出页面被关闭并被返回到调用者(例如,分配器),该方法结束。输出页面可能是空的。在状态540,脚本引擎检验标签以了解它是否是“下载“标签。如果不是,该方法在状态544继续。但是,如果该标签是下载标签,那么在状态542中脚本引擎调用分配器以在URL下载页面,该URL被指定为下载标签的属性。在图示的本发明的实施例中,不在这个点上解析或执行下载的页面。在下载页面后,脚本引擎返回状态532。在状态544中,检验标签以了解该标签是否是“输入”标签。如果不是,该方法前进到状态548。否则,如果标签是输入标签,在状态546中调用分配器以输入带有URL的页面,该URL被提供作为输入的标签属性。例证性地,脚本引擎把输入模式设置为“开”。把输入模式转到“开”表示分配器正在处理输入页面,并且可能表示脚本引擎(如果分配器调用脚本引擎)正在处理输入的页面。然后脚本引擎产生到分配器的递归调用并提供要被输入的页面的URL。当分配器返回控制给脚本引擎时,输入模式被设置为“关”,图示的方法在状态532重新开始。在状态548中,如果标签不是“输入”标签,那么脚本引擎检验标签以了解该标签是否是“模式”标签。如果不是模式标签,该方法前进到状态554。在状态550,脚本引擎检查本地数据库以了解该模式是否已经存在,如果存在,该方法返回到状态532。否则,在状态552脚本引擎调用调度器以处理在由“模式”标签给出的URL的页面。在状态552之后,方法返回到状态532。在状态640,脚本引擎确定输入模式是开还是关。如果输入模式是开,这表示正被处理的页面是下载页面。因此,脚本引擎不会尝试处理该页面中其它的标签,而是从状态520开始重新操作。例证性地,这帮助保证了不立刻执行输入的页面并且也下载或输入它们依赖的任何页面和产生它们依赖的任何模式。在状态556中,检查OTL标签以了解该标签是否是“SQL”标签。如果不是,该方法进入状态562。否则,在状态558中脚本引擎访问客户DBMS以执行伴随标签的查询。然后,在状态560中脚本引擎把查询结果(例如,表)绑定到包括在“SQL”标签中的变量。然后该方法返回到状态532,在那里继续扫描输入页面。在状态562中,如果遇到的标签不是“提交”标签,脚本引擎前进到状态566。否则,在状态564,脚本引擎通过把输出页面提交到队列(例如,图4的队列452)来响应该提交的标签,该队列将把页面转送到指定的服务器。在本发明的这个实施例中,提交标签至少有三个属性。第一个属性是页面要提交到的服务器的URL。第二个属性识别表示成功提交的从服务器返回的编码。第三个是如果从服务器返回的编码是除了在第二个属性中识别的编码以外的任何编码则将要被访问的那个页面的URL。当队列有到服务器的连接时,它将提交任何排队的请求。如果有错误,它将访问错误处理页面并把服务器的URL和返回的编码传递给错误处理页面。在状态566,检查标签以了解它是否是语音标签。如果不是,图示的方法前进到状态570。否则,如果它是语音标签,在状态568引擎脚本从脚本的变量中准备参数值以调用必要的语音引擎方法。作为调用方法的结果,语音引擎将向用户说出一个消息(如果语音标签是“说(say)”标签)或在听觉上提示用户输入(如标签是“提示(prompt)”标签)。如果标签是提示,那么语音引擎将接受听觉上的输入然后试图识别它并把它转变为文本串。这个文本串作为方法的结果被返回。然后脚本引擎返回到状态532继续扫描输入的页面。在状态570,脚本引擎检验标签以了解标签是否是“out”标签。“out”标签告诉脚本引擎输出值(常数或与变量结合的值)。如果标签是“out”标签,在状态572中脚本引擎把值写到输出页面然后返回到状态532。如果标签不是“out”标签,那么在状态574中脚本引擎把该标签作为它支持的语句之一进行处理,然后返回到状态532。在执行图5B-C的方法时,脚本引擎为请求的页面检索数据。例如,如果数据当前存储在客户数据库中(例如,在表、缓存表或瞬像中)并且是有效的,则可以在状态558的过程中从数据库检索数据。然而,如果任何数据项当前都不在数据库中,或者如果必要的数据项是失时效的,那么客户引擎可以发起到远程系统的连接以检索一个或多个数据项。在本发明的这个方法中,可以指出的是通过仅仅检索必要的数据,到远程系统的连接减到最少。特别地,客户引擎可以避免下载其它的数据(例如,那些本地提供的和不失时效的数据)和请求页面的非数据部分(例如,显示描述或格式)。仅仅为了说明和描述的目的,已经介绍了前面的本发明实施例。前面的描述并不是详尽的,且也不打算把本发明限定到所公开的形式。因此,上述公开的内容不用于限定本发明;本发明的范围由附加的权利要求来限定。权利要求1.一种便于在用不连续的可用通信链路连接到数据源的移动计算设备上缓存来自数据源的数据的方法,包括在移动计算设备上的数据库中配置缓存表,其中所述缓存表包括访问参数,包括在数据源上的数据集的第一组列;结果列,包括与数据集的第一组列不同的数据集的第二组列;在数据库内产生所述缓存表的一个或多个实例,其中每一个所述缓存表的实例包括一组行,其中每一个所述行包括自变量,所述自变量包括访问参数的每一列的值;和结果集,包括结果列的每一列的值,其中,在一组行中的每一行包括相同的自变量。2.如权利要求1所述的方法,进一步包括对于每一个所述缓存表的实例,存储一个或多个参数,用于确定所述缓存表实例的所述结果集是否可以用于数据操作。3.如权利要求2所述的方法,其中所述参数包括表示何时从数据源接收到所述结果集的响应日期。4.如权利要求2所述的方法,其中所述参数包括表示何时在数据源最后修改所述结果集的最后修改日期。5.如权利要求2所述的方法,其中所述参数包括被配置以表示在其期间所述结果集是有效的第一个时段的使用期限参数;其中所述结果集在所述第一个时段的末尾变成无效的。6.如权利要求5所述的方法,其中如果所述结果集是有效的,则所述结果集用于所述数据操作,而不管不连续的可用通信链路是否是可用的。7.如权利要求5所述的方法,其中只有当所述结果集是无效时,从数据源检索所述结果集的替换结果集。8.如权利要求5所述的方法,其中只有当所述结果集是无效时,从数据源检索所述结果集的更新。9.如权利要求5所述的方法,其中所述参数包括被配置以表示跟在所述第一个时段之后的第二个时段的失时效参数,在第二个时段期间所述结果集是可用的;和其中所述结果集在所述第二个时段的末尾变成失时效的。10.如权利要求9所述的方法,其中如果所述结果集是可用的并且不连续的可用通信链路是不可用的,则所述结果集被用于所述数据操作。11.如权利要求9所述的方法,进一步包括接收涉及第一个缓存表实例的第一个数据操作,和如果(a)所述第一个缓存表实例的所述结果集是有效的;或(b)所述第一个缓存表实例的所述结果集是无效的并且(1)所述第一个缓存表实例的所述结果集是可用的;和(2)不连续的可用通信链路是不可用的;则使用所述第一个缓存表实例的所述结果集。12.如权利要求11所述的方法,进一步包括只有当所述第一个缓存表实例的所述结果集是无效时,为所述第一个缓存表实例的所述结果集检索更新。13.如权利要求11所述的方法,进一步包括只有当所述第一个缓存表实例的所述结果集是无效时,为所述第一个缓存表实例的所述结果集检索替换结果集。14.如权利要求11所述的方法,进一步包括如果所述第一个缓存表实例的所述结果集是无效的;所述第一个缓存表实例的所述结果集是失时效的;且不连续的可用通信链路是不可用的,则显示错误。15.如权利要求1所述的方法,其中所述数据集是数据库表和视图中的一个。16.一种存储指令的计算机可读存储介质,当所存指令由计算机执行时,引起计算机执行便于在用不连续的可用通信链路连接到数据源的移动计算设备上缓存来自数据源的数据的方法,该方法包括在移动计算设备上的数据库中配置缓存表,其中所述缓存表包括访问参数,包括在数据源上的数据集的第一组列;结果列,包括与数据集的第一组列不同的数据集的第二组列;在数据库内产生所述缓存表的一个或多个实例,其中每一个所述缓存表的实例包括一组行,其中每一个所述行包括自变量,所述自变量包括访问参数的每一列的值;和结果集,包括结果列的每一列的值,其中,在一组行中的每一行包括相同的自变量。17.一种便于在不连续地连接到数据服务器的移动计算设备上缓存数据的方法,该方法包括识别在数据服务器上的一个或多个逻辑数据表;对于每一个逻辑数据表,维持表数据处理器,其被配置以提供从移动计算设备到逻辑表的访问;在数据服务器上接收来自移动计算设备的自变量,其中自变量包括第一逻辑表的一个或多个列的值;识别第一逻辑表的一组行,其中该组行中的每一行包含所述自变量;过滤该组行,其中所述过滤包括排除自上次从移动计算设备接收自变量以来还没有被修改的任何行;和从行中去掉与所述自变量相对应的一个或多个列;和把过滤的一组行返回到移动计算设备,响应所述自变量。18.一种存储指令的计算机可读存储介质,当所存指令由计算机执行时,引起计算机执行一种便于在不连续地连接到数据服务器的移动计算设备上缓存数据的方法,该方法包括识别在数据服务器上的一个或多个逻辑数据表;对于每一个逻辑数据表,维持表数据处理器,其被配置以提供从移动计算设备到逻辑表的访问;在数据服务器上接收来自移动计算设备的自变量,其中自变量包括第一逻辑表的一个或多个列的值;识别第一逻辑表的一组行,其中该组行中的每一行包含所述自变量;过滤该组行,其中所述过滤包括排除自上次从移动计算设备接收自变量以来还没有被修改的任何行;和从行中去掉与所述自变量相对应的一个或多个列;和把过滤的一组行返回到移动计算设备,响应所述自变量。19.一种在移动计算设备上缓存数据的方法,其中移动计算设备通过不连续的可用无线链路可连接到数据源,该方法包括接收涉及在移动计算设备上缓存的第一组数据的第一个操作;确定所述第一组数据是否是有效的;如果所述第一组数据是无效的,确定所述不连续的可用无线链路是否是可用的;如果所述第一组数据是无效的并且所述不连续的可用无线链路是不可用的,确定所述第一组数据是否是可用的;和只有当所述第一组数据是无效的;和所述不连续的可用无线链路是可用的时候,从数据源检索用于所述第一组数据的更新。20.如权利要求19所述的方法,进一步包括确定所述第一组数据是否由第一事务处理锁定;其中所述第一个操作是由所述第一事务处理发起的。21.如权利要求19所述的方法,进一步包括确定活动游标是否由第一事务处理在所述第一组数据上打开;其中所述第一个操作是由第一事务处理发起的。22.如权利要求19所述的方法,其中确定所述第一组数据是否是有效的包括访问与所述第一组数据相关联的有效性参数,其中所述有效性参数被配置以表示所述第一组数据变为无效时的第一时间;和比较所述第一个操作的时间和所述第一时间;其中所述第一组数据在所述第一时间之前是有效的。23.如权利要求22所述的方法,其中确定所述第一组数据是否是可用的包括访问与所述第一组数据相关联的失时效参数,其中所述失时效参数被配置以表示在所述第一时间之后的当所述第一组数据变为失时效时的第二时间;比较所述第一个操作的时间和所述第二时间;其中所述第一组数据在所述第一时间与所述第二时间之间是可用的。24.如权利要求19所述的方法,进一步包括,在所述接收第一个操作之前在移动计算设备上配置用于缓存数据的缓存表,数据包括所述第一组数据,其中所述缓存表由包括在数据源上的数据集的第一组列的一组访问参数;和该数据集的第二组列来定义。25.如权利要求24所述的方法,进一步包括,在所述接收第一个操作之前产生所述缓存表的一个或多个实例,其中每一个所述缓存表的实例包括自变量,包括所述访问参数组的独特的一组值;和结果集,包括所述第二组列的值,其中,所述第一组数据包括第一个缓存表实例的第一个结果集。26.如权利要求19所述的方法,进一步包括如果所述第一组数据是有效的;或所述第一组数据是无效的,并且所述不连续的可用无线链路是不可用的且所述第一组数据是可用的,则所述第一组数据用于所述第一个操作。27.一种存储指令的计算机可读存储介质,当指令由计算机执行时,引起计算机执行一种在移动计算设备上缓存数据的方法,其中移动计算设备通过不连续的可用无线链路可连接到数据源,该方法包括接收涉及在移动计算设备上缓存的第一组数据的第一个操作;确定所述第一组数据是否是有效的;如果所述第一组数据是无效的,确定所述不连续的可用无线链路是否是可用的;如果所述第一组数据是无效的并且所述不连续的可用无线链路是不可用的,确定所述第一组数据是否是可用的;和只有当所述第一组数据是无效的;和所述不连续的可用无线链路是可用的时候,从数据源检索所述第一组数据的更新。28.一种用于在移动设备上缓存数据的数据库,该数据库包括一个缓存表,由与通过无线通信连接可访问的数据源的第一组属性相对应的一组访问参数;和该数据源的第二组属性定义;其中该数据库通过无线通信连接不连续地连接到中央数据源;和所述缓存表的一个或多个实例,其中每个所述缓存表的实例包括自变量,所述自变量包括所述访问参数的独特的一组值;和结果集,包括所述第二组属性的值;和对于每一个所述缓存表的实例,用于确定在其期间所述结果集在移动设备上是可用的时段的信息。29.如权利要求28所述的数据库,其中,在其期间所述结果集是可用的时段包括在其期间所述结果集是有效的第一时段。30.如权利要求29所述的数据库,其中,所述数据库被配置以在所述第一时段期间不从中央数据源检索所述结果集。31.如权利要求29所述的数据库,其中,在其期间所述结果集是可用的所述时段进一步包括在其期间所述结果集是无效的但还没有失时效的第二时段;其中所述第二时段紧接着第一时段。32.如权利要求31所述的数据库,其中所述结果集在所述第二时段之后是不可由数据库事务处理使用的,除非所述结果集被该数据库事务处理锁定;或该数据库事务处理有在所述结果集上打开的活动游标。33.如权利要求28所述的数据库,其中所述信息包括被配置以表示何时所述结果集变为无效的第一参数;和被配置以表示何时所述结果集变为失时效的第二参数。34.如权利要求28所述的数据库,进一步包括被配置以在把操作发送到数据源之前在所述一个或多个缓存表实例上存储操作的队列;其中,当通过无线通信连接不可访问数据源时,所述操作存储在所述队列中。35.一种用于在通过无线链路可连接到中央数据源的移动计算设备上缓存数据的系统,包括被配置以选择性地相对于中央数据源以联机模式或脱机模式操作的数据库;在该数据库内,由一组对应于数据源的第一组属性的访问参数;和中央数据源的第二组属性定义的缓存表,在该数据库内,所述缓存表的一个或多个实例,其中所述缓存表的实例包括自变量,包括所述访问参数中每一个的值;和一组结果,其中每一个所述结果包括数据源的所述第二组属性中每一个的值;和对于每一个所述缓存表的实例,用于确定所述结果集是否是可用的信息。36.如权利要求35所述的系统,其中用于所述第一缓存表实例的第一结果集的所述信息包括响应日期参数,其被配置以表示何时从数据源向数据库最后一次提供所述第一结果集;最后修改日期参数,其被配置以表示所述第一结果集何时在数据源上最后一次被修改;使用期限参数,其被配置以表示在其期间所述第一结果集是有效的第一时段,其中如果所述第一结果集是有效的,则所述结第一果组是可用的;和失时效参数,其被配置以表示在所述第一时段期满时开始的第二时段,在第二时段期间所述第一结果集可能是可用的。37.如权利要求36所述的系统,其中涉及第一缓存表实例的第一个操作在时间O被接收;所述第一时段在时间V结束;所述第二时段在时间U结束;和如果O早于V,或O晚于V,O早于U,且所述数据库是相对于数据源以脱机模式操作的,则所述结果集对于所述第一个操作是可用的。38.如权利要求35所述的系统,其中,只有当所述第一结果集不存在于数据库中;或所述第一结果集存在于数据库中,但是不可用时,所述数据库相对于中央数据源以联机模式操作以接收第一缓存表实例的第一结果集。39.如权利要求35所述的系统,其中;如果所述第一缓存表实例的第一结果集是有效的,所述数据库在涉及所述第一缓存表实例的操作过程中以脱机模式操作,而不管到中央数据源的无线链路是否是可用的。40.一种用于在移动计算设备上缓存数据的系统,其中移动计算设备被配置用于不连续地连接到中央数据源,该系统包括缓存表,被配置以在移动计算设备上缓存来自中央数据源的数据;在所述缓存表中的一个或多个项,每一个所述项包括来自中央数据源的一组数据;有效性参数,对于在所述缓存表中的每一个项,用于确定在其期间所述数据组是有效的时段;可用性参数,对于在所述缓存表中的每一个项,用于确定在其期间所述数据组是有效的所述时段之后所述数据组是否可用;和通信模块,被配置以不连续地连接移动计算设备到中央数据源。41.如权利要求40所述的系统,其中所述有效性参数被配置以识别所述数据组变为无效时的第一时间;其中,在所述第一时间以前,所述数据组被用于涉及所述缓存表项目的操作,而不管移动计算设备是否连接到中央数据源。42.如权利要求42所述的系统,其中所述可用性参数被配置以识别所述数据组变为失时效时的第二时间;其中,在所述第一时间之后和所述第二时间之前,只有当移动计算设备没有连接到中央数据源时,所述数据组被用于涉及所述缓存表项目的操作。43.如权利要求40所述的系统,其中所述通信模块被配置以为了每次一个缓存表项操作的最大值把移动计算设备连接到中央数据源。44.如权利要求43所述的系统,其中对于涉及有效的缓存表项目的操作,移动计算设备不连接到中央数据源。全文摘要一种缓存表包括一组访问参数和一组数据列。缓存表的一个或多个实例存储在移动计算设备上。每个实例包括自变量(访问参数的独特的一组值)和结果集(数据列的一组值)。这样,在结果集中的每个结果包括自变量和相应的列值。缓存的结果集有指定的有效期,其在变成无效之后可能是可用的或可能是不可用的。可以使用有效的缓存数据而不管是否有可用的到数据源(例如,数据或应用服务器)的连接。如果没有可用的到数据源的连接,无效数据则可以使用一段时间。可以从数据源选择性地更新缓存表中的数据,而不用同步整个的本地数据库。文档编号G06F12/00GK1659548SQ03812644公开日2005年8月24日申请日期2003年6月25日优先权日2002年7月17日发明者R·阿哈德,J·蒋,O·科伯威,R·普拉卡萨,S·瑞曼申请人:欧里科国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1