用于移动业务对象的基于消息的同步的制作方法

文档序号:6351756阅读:126来源:国知局

专利名称::用于移动业务对象的基于消息的同步的制作方法
技术领域
:本发明一般涉及数据库同步,且更具体地,涉及用于数据同步的通信方法。
背景技术
:无论何时(通常在用户指定的时机),当通过执行完整的同步事件而获得连通性时,移动设备传统地依赖于与企业系统的同步。例如在放置于对接架(dockingcradle)中时,移动设备可具有连通性。移动设备在对接后执行其数据的完整同步、上传和下载。然而,当上传的信息是过时的或当另一移动设备已在同一断开连接期间执行了更新时,这些传统的方法无法提供足够的信息来解决设备所依赖的数据方面的冲突。此外,传统方法不包括使得移动设备可以可靠地发送和接收这些更新的通信方法。因此,期望获得用于使来自移动设备的数据与企业系统同步的改进的方法。
发明内容本发明的实施方式包括一方法,该方法包括执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅;针对该更新的订阅运行该下载光标,以生成结果行;以及,在输入消息中将该结果行发送至客户端设备。本发明的实施方式另外包括一种计算机可读介质,其具有存储于其上的计算机可执行指令,若由计算设备执行,则该计算机可执行指令致使该计算设备实施包括下述步骤的方法执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅;针对该更新的订阅运行该下载光标,以生成结果行;以及,在输入消息中将该结果行发送至客户端设备。此外,本发明的实施方式另外包括一种系统,该系统包括存储器,其被设置为保存模块;该模块包括执行模块,其被设置为执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅;运行模块,其被设置为针对该更新的订阅运行该下载光标,以生成结果行;以及,发送模块,其被设置为在输入消息中将该结果行发送至客户端设备;所述系统还包括一个或者多个处理器,其被设置为处理该模块。此外,本发明另外包括一种方法,该方法包括从客户端接收消息,该消息包括客户端标识符、消息标识符和重放指令;搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于该客户端标识符和消息标识符的该消息之前是否已被接收过,一旦确定该消息之前未被接收过,则处理该消息;以及,将该客户端标识符和消息标识符添加到对应于之前接收到的消息的客户端标识符和消息标识符对的列表中。此外,本发明的实施方式包括一种计算机可读介质,其具有存储于其上的计算机可执行指令,若由计算设备执行,则该计算机可执行指令致使该计算设备实施包括下述步骤的方法接收来自客户端的消息,该消息包括客户端标识符、消息标识符和重放指令;搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于该客户端标识符和消息标识符的该消息之前是否已被接收过,一旦确定该消息之前未被接收过,则处理该消息;以及,将该客户端标识符和消息标识符添加到对应于之前接收到的消息的客户端标识符和消息标识符对的列表。此外,本发明的实施方式包括一种系统,该系统包括存储器,其被设置为保存模块;该模块包括接收模块,其被设置为从客户端接收消息,该消息包括客户端标识符、消息标识符和重放指令;搜索模块,其被设置为搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于该客户端标识符和消息标识符的该消息之前是否已被接收过,一旦确定该消息之前未被接收过,则处理该消息;以及,添加模块,其被设置为将该客户端标识符和消息标识符添加到对应于之前接收到的消息的客户端标识符和消息标识符对的列表中;该系统还包括一个或者多个处理器,其被设置为处理该模块。在下文中,参考附图详细描述本发明的其他特征和优点以及本发明的各实施方式的结构和操作。应指出,本发明不限于在此所描述的特定实施方式。在此,仅以说明为目的呈现这些实施方式。基于包含在此的教导,另外的实施方式对相关领域技术人员来说将是显而易见的。包括在本文中且构成说明书的一部分的附图示出了本发明的实施方式,其与说明书一起用于进一步解释本发明的原理且使得相关领域技术人员可以实施和使用本发明。图I是根据本发明的一实施方式的、示例性的企业网络。图2A是根据本发明的一实施方式的、示出了各步骤的流程图,其中,可通过这些步骤来操作移动设备的客户端应用程序,从而针对业务对象向同步服务器提交创建、更新或删除消息,用于传送至企业信息系统。图2B是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,企业信息系统处理所接收的创建、更新或删除消息。图3是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,移动设备上的客户端应用程序处理从同步服务器处接收到的同步事件。图4是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,客户端应用程序启动创建请求。图5是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,客户端应用程序启动更新操作。图6是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,客户端应用程序启动删除操作。图7是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤将客户端应用程序设置为对重放操作回调函数(replayoperationcallback)进行响应。图8是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤将同步服务器设置为检测和丢弃复本消息。图9是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,可以通过使用缓存表来执行基于复本的同步。图10是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,可以将缓存表和下载光标与实体订阅(entitysubscription)—起使用,以向请求更新的客户端应用程序有效地提供输入(import)消息。图11是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤,输入消息可以一起被分批处理。图12是根据本发明的一实施方式的、示出了各步骤的流程图,其中,通过这些步骤来完成由服务器启动的同步。图13示出了一示例计算机系统,可以在其中实施本发明的实施方式。现在,将参考附图描述本发明。通常,在附图中,相同的参考标记表示相同或功能相似的元件,此外,通常地,参考标记最左边的数字表示参考标记第一次出现的附图。具体实施例方式I介绍现在,将参考附图描述本发明。通常,在附图中,相同的参考标记表示相同或功能相似的元件,此外,通常地,参考标记最左边的数字表示参考标记第一次出现在其中的附图。如下所述地,对本领域技术人员来说显而易见的是,可以在软件、硬件、固件和/或附图中所示的实体中实施本发明。任何具有实施本发明的专用硬件控制的实际的软件代码并不用于限制本发明。因此,应理解,在本发明的范围和精神内能够进行实施方式的修改和变化,在这一前提下描述本发明的操作性能。对本说明书和权利要求中的模块的引用意味着以执行指定功能为目的的、对硬件或软件组件的任意组合。该模块不一定是刚性限定的实体,使得若干模块可以在功能上覆盖硬件和软件组件。例如,软件模块指的可以是程序中的单行代码,程序本身作为一个单独的软件模块。例如,相关领域的技术人员会理解,可以根据多种设计或性能优化技术来限定模块的功能。图I是根据本发明的一实施方式的示例性企业网络100。根据本发明的另一实施方式,企业网络100包括移动设备102。示例性地而非限制性地,移动设备102可包括例如加拿大安大略省滑铁卢市行动研究公司(ResearchInMotion)的黑莓(BlackBerry)或加利福尼亚州库比蒂诺苹果电脑公司(AppleComputer,Inc.)的苹果手机(AppleiPhone)的移动设备。相关领域技术人员将意识到,在此所描述的可用于移动设备102的技术通常也可以用于非移动设备,例如个人计算机。根据本发明的一实施方式,移动设备102可具有安装在其上的客户端应用程序104。根据本发明的一实施方式,客户端应用程序104可以与设备输入和输出(“1/0”)106接口,该设备输入和输出为例如监控器、键盘或触摸屏显示器。客户端应用程序104也可以与本地数据库108接口,该本地数据库存储供客户端应用程序104使用的数据集。根据本发明的一实施方式,移动设备102与同步服务器110通信。根据本发明的另一实施方式,类似地,额外的移动设备112a-c与同步服务器110通信。如可以被相关领域技术人员所理解的,可通过任何一个或多个通信通道将各种移动设备连接至同步服务器110。在一实施方式中,例如,移动设备102可以借助蜂窝通信网络和互联网上的通信跃点(communicationhops)与同步服务器110连接。各种通信跃点本身可以是公共或私有网络,且可以包括位于互联网以及各种私有内部网上的组件。根据本发明的一实施方式,同步服务器110位于一个或多个移动设备102、112a_c以及企业信息系统(“EIS”)114之间。同步服务器110有助于捕获由EIS114产生的对相关数据的更改,且将该更改提供给移动设备102和112a-c。同步服务器110也有助于捕获由移动设备102和112a-c产生的更改,且将该更改提供至EIS114。以这种方式,本地数据库108中可由移动设备102获得的数据可以与来自EIS114的相应数据存储以及企业数据系统116的数据同步。根据本发明的一实施方式,同步服务器110保持缓存,该缓存反映来自企业数据系统116的数据。根据本发明的一实施方式,EIS114连接至同步服务器110,以允许同步服务器110提供上述数据同步服务。如可以被相关领域技术人员所理解的,EIS114同样可以通过任何通信通道与同步服务器110通信。相关领域技术人员还将理解,EIS114与同步服务器110可以共享同一物理服务器或分布式服务器作为其中的独立软件组件,或者甚至可以被编译成一个组合应用程序。因此,应理解,EIS114与同步服务器110可以分布在企业网络100的多个不同位置上,在图I中以示例性方式显示为单独的计算设备,但不限于此。根据本发明的一实施方式,如前文中所述的,EIS114还包括企业系统116或以通信方式连接至企业系统116。根据本发明的另一实施方式,本地数据库108中的数据包括例如来自企业系统116的数据的子集。根据本发明的一实施方式,该数据可以为移动业务对象(“ΜΒ0”)的形式。MBO是一种可以在企业信息系统114与移动设备102之间被同步的业务对象。MBO可以由本地数据库108中的存储所保存,以允许在未连接至EIS114期间由移动设备102访问。在2009年7月15提交的名为“元数据驱动的移动业务对象(MetadataDrivenMobileBusinessObjects)”的12/503,573号美国专利申请(律师案号1933.0720001)中提供了MBO的示例,该文件通过引用方式整体并入于此,但本发明不限于此。相关领域技术人员将意识到,可通过多种不同的方式处理客户端应用程序104与同步服务器110之间的通信。根据本发明的一实施方式,通信框架直接嵌入如由代码生成器或开发者提供的客户端应用程序104中。根据本发明的一额外实施方式,可在移动设备102上配置助手应用程序,以管理该通信。II示例性业务对象模型根据本发明的一实施方式,可以使用被称为XML应用程序(“AFX”)的、基于公众可用XML的专用领域语言对MBO建模。相应领域技术人员将意识到,可通过不同的方式对MBO建模,包括通过使用可视化建模工具以图形方式建模或通过使用专用领域语言(如AFX文本)以文本方式建模。相应地,在此通过使用AFX所呈现和讨论的示例是示例性的而非限制性的。根据本发明的一实施方式,程序包定义(packagedefinition)提供了用于定义移动设备102内的本地数据库的名称的数据库定义、数据库类(database-class)定义以及零或多个实体定义。数据库类定义用于识别代表本地数据库108的类。若存在实体定义,则其每一个对应一个ΜΒ0。实体定义转而定义代表相应的MBO的类的名称。根据本发明的一实施方式,实体本身存储在本地数据库108中。根据本发明的另一实施方式,通过使用至少一个代理键(surrogatekey)和替代键(alternatekey)来键入实体。代理键是由移动设备102所使用的键值,以说明移动设备未能访问EIS'114的键创建过程的原因。若客户端发觉存在用于实体的EIS114键,则该键可用作替代键。根据本发明的另一实施方式,由同步服务器110将代理键提供至移动设备102,以作为将根据需要被分配的一批键。根据本发明的另一实施方式,实体定义包括对EIS114内的相应更改的操作定义。示例性地而非限制性地,该操作定义用于创建、更新或删除EIS114内的数据。根据本发明的一实施方式,实体定义也可提供命名查询,命名查询是可由移动设备102提出的针对本地数据库108的预定义查询。根据本发明的另一实施方式,实体定义还包括表示可将由移动设备102产生的更改公开给同步服务器110的定义,该定义还表示将EIS产生的更改订阅给移动设备102,以用于下载。结合上述要素的非限制性的示例性对象模型的内容如下〈packagename=”com·example.bank’·〉<databasenameJmy-bank,1/>〈database-classname="MyDatabase”/>〈entityname="Account”key-lfSiirrogateleynalternate-key="accountId*·>〈attributename=**surrogateKey"type=1,int1!generated="true”/>〈attributename="accountIdwtype=Mstring11/>〈attributename-,fcustomerId■,type=wStringri/>〈attributename="balance”type—ndecimaln/>〈operationname-,Tcreate,T><!——informationdescribingtheEISoperation——></operation>〈operationname="update"><!——informationdescribingtheEISoperation——></operation><operationname=·,deleteH><!——informationdescribingtheEISoperation—>〈/operation〉〈queryHame=^findByCustomeriitype=,1Account*,’〉〈parametername=,·id·,type-,fstringTI/><sql>selecta.*fromAccountawherea.customerld=;id</sql></query>〈publish/>〈subscribe/></entity></package>在上述示例性对象模型中,与由类“MyDatabase”表示的本地数据库108“my_bank”相关的程序包“com.example,bank”包含名为“Account”的单一实体。该实体由代理键来键入,具有由账户ID(accountID)定义的替代键,在此情况下该替代键是由EIS114的后台系统所使用的实际的唯一键。根据本发明的另一实施方式,账户实体也具有多个属性,包括上述代理键和账户名称,还包括对应于账户的用户ID和账户余额。账户实体也定义一查询“findByCustomer”,在MBO的情况下,其允许具有相应的用户ID的特定账号被查找并使用。此外,根据本发明的另一实施方式,账户实体定义多个操作,所述多个操作描述用于创建、更新和删除数据的EIS操作,其对应于来自企业数据系统116的实体。根据本发明的另一实施方式,代码生成器在程序包定义上运行,从而产生包含在客户端应用程序104中的代码。这允许客户端应用程序104的开发者快速激活客户端应用程序104,以协调移动设备102与同步服务器11之间的更改的下载与上传。根据本发明的另一实施方式,代码生成器也可生成用于在同步服务器110上执行的代码。基于上述示例性的程序包定义,可以对客户端应用程序104进行编码,以使用由代码生成器从程序包定义中派生的生成代码来执行特定功能。例如,可以调用由上述程序包定义所产生的代码,以解析来自客户端应用程序104的下列代码样本varaccounts=Account.findByCustomer(tlISSt*);for(varainaccounts)fprint(MAccount:M+a.accountId+balance:"+a.balance);}根据本发明的一实施方式,该代码对由代码生成器自动产生的类进行调用。例如,段Account.findByCustomer(^123^)利用命名查询〃findByCustomer〃将匹配的账户返回至"accounts〃变量中。然后,对于"accounts"中的每个结果〃a〃,可以显示相应的账户ID和余额。根据本发明的一实施方式,不使用命名查询"findByCustomer〃,终端用户可指定动态查询中的选择标准。代码生成器可指定多个选项,用于开发者在定义所需查询时从中进行选择。例如,可由开发者定制下列示范代码以搜索与特定属性匹配的账户varattribute-,··IlasktheuserforanattributenamevartestValue=·.·//asktheuserforacomparisonvalueirarquery=newQue-ry《};qiieiry.where《AttributeTest.equal(afccriDutei.testValue))■vaxaccountsaccount.findl-IitliQuerf(querf);for(varainaccounts)Iprint("*Account;**+a.accountld+*%balance;#f+a.balance)}根据本发明的一实施方式,可为开发者提供下拉式菜单或其他输入接口功能,以定制在上述示例中使用的属性和测试值。在上述示例中,每个账户代表一个MBO的实例。如上所述的,且如在示例性对象模型中所示出的,根据本发明的一实施方式,MBO可支持激活对EIS114的更改说明的功能。在一示例性实施方式中,这些更改是在MBO上执行的创建、更新或删除操作。继续以上述示例账户实体为例,但非限制性地,可以通过下述代码更新账户余额varaccount=·.·//lookupanaccount(e.g.,usingaquery)vardeposit=*“//specifyadepositamountaccount.balance=account.balance十deposit;account·update();该示例性的代码段选择待更改的账户,确定预存金额,且将其应用至账户余额。根据本发明的一实施方式,当准备应用该更改时,调用account,updateO方法。类似地,若创建新的账户,则调用account,createO方法,以将该账户提交给本地数据库108。account,deleteO方法可从本地数据库108中删除该账户。根据本发明的一实施方式,这些更改全部存储在本地数据库108内,作为挂起的更改。根据本发明的另一实施方式,本地数据库108保留更改之前的初始状态的拷贝。在因任何原因由EIS114针对企业数据系统116进行的数据重放失败时,如有需要,这允许恢复本地数据库108。根据本发明的一实施方式,当客户端应用程序104准备将挂起的更改提交给同步服务器110以用于对EIS114同步时,调用submitPendingO方法(例如account.submitPendingO),从而对挂起的更改排序以用于发送。根据本发明的另一实施方式,在消息中发送所述挂起的更改,这将下文中详细进行描述。根据本发明的另一实施方式,发送至同步服务器110的消息包括所述挂起的更改,也包括初始状态。通过提交挂起状态和初始状态,EIS114可以避免、删除或解决一些冲突。继续以先前的示例性实体为例,可在不知道其他更新的情况下,由两个移动设备更新同一账户的余额,以使各设备针对该更改的初始基础不一致。例如,按时间顺序设备I针对账户123下载100的余额。设备2针对账户123下载100的余额。设备I将余额更新至200,但不立即调用account.submitPendingO。设备2将余额更新至150,且调用account.submitPendingO。·EIS接收来自设备2的更新请求,且在企业数据系统上将当前余额更新至150。设备I此时调用account.submitPendingO以表示初始状态余额为100且挂起的更改为200。基于来自设备2的所应用的更新,EIS将初始状态余额100与其本身报告的当前余额150进行比较。识别出不匹配,EIS可以将接收到的挂起的余额与初始状态余额(例如200-100)的差应用到当前余额150。设备I和设备2都同步到新余额250。根据本发明的一实施方式,在EIS114不能解决冲突的情况下,或如果EIS114期望移动设备102解决该冲突,则EIS114可以向客户端应用程序104提供失败通知。根据本发明的另一实施方式,EIS114也可以为客户端104提供成功重放操作的通知。图2A是根据本发明的一实施方式的、示出了各步骤的流程图200,其中,可通过这些步骤来操作移动设备102的客户端应用程序104,从而针对业务对象向同步服务器110提交创建、更新或删除("CUD")消息,以用于传送至EIS114。该方法从步骤202开始进行至步骤204,其中产生MBO的创建、更新或删除。根据本发明的一实施方式,在步骤206中,CUD消息被提交给同步服务器110,该消息包括挂起的改变和初始状态两者。根据本发明的一实施方式,在步骤208中,客户端应用程序104接收回调函数(callback)。根据本发明的一实施方式,该回调函数可表示EIS'114针对企业数据系统116而重放CUD消息的尝试是成功还是失败。根据本发明的一实施方式,由代码生成器生成的客户端应用程序104的一部分负责接收通知并响应该通知而回调已注册的函数。根据本发明的另一实施方式,当接收到通知时,客户端应用程序104的额外部分注册回调处理器,以接收回调函数。步骤210描述了关于重放是否成功的确定流程。若该重放成功,则该方法在步骤218结束。根据本发明的一实施方式,另一方面,若该重放不成功,则在步骤212中执行冲突解决流程。在上述示例中,当两个设备发送相冲突的余额更新时,EIS114选择通过在第二员将领会到,需要在不同的冲突场景中以不同的方式来解决冲突,且该示例性冲突解决流程不能适用于所有情况。相应地,在此提供适当的灵活性,以允许开发者合适地处理冲突。例如,不试图基于在上述示例中从设备I接收到的数据来解决余额,相反,EIS114可拒绝应用第二次接收到的更新,且向设备I发出表示更新失败的通知。在步骤212中,当客户端应用程序104通过EIS114得知该重放失败时,如有需要,则可应用其本身的冲突解决方案。根据本发明的一实施方式,在步骤214中,确定是否重新提交CUD消息。若需要重新提交该消息,则在步骤206中进行所需要的更改以更正冲突且重新提交该消息。另外,根据本发明的另一实施方式,在步骤216中,通过删除来自本地数据库108的挂起状态数据来取消该更改。该方法在步骤218结束。图2B是根据本发明的一实施方式的示出了各步骤的流程图250,其中,通过这些步骤,EIS114处理所接收的CUD消息。该方法从步骤252开始,且进行至步骤254,在该步骤中接收到CUD消息,该消息包括挂起的更改和初始状态信息两者。在步骤256中,将存储在企业数据系统116内的相应的当前数据与在更改请求中指定的初始状态进行比较。在步骤258中确定当前数据是否与初始数据相同。若相同,则EIS114和客户端应用程序104清理同一初始状态基线,且可以容易地将挂起的更改应用到EIS114。因此,在步骤266中针对企业数据系统116重放挂起的更改,且在步骤268中调用任何已注册的重放成功处理器。另一方面,根据本发明的一实施方式,若当前数据和初始状态数据不同,则在步骤260中尝试冲突解决方案。例如,可以使用针对冲突账户余额更新的上述非限制性的示例性冲突解决流程。在步骤262中确定是否解决了冲突,若解决了冲突,则可在步骤266中重放数据,且在步骤268中确认回调处理器成功。例如,若EIS114选择使用前述解决流程来解决余额,则IES114将具有足够的信息来针对企业数据系统116重放挂起的更改,且在步骤268中发出成功信号。然而,根据本发明的一实施方式,若不能解决冲突,或若EIS114已经被设置为不尝试解决该冲突,则在步骤264中生成重放失败回调函数。该方法在步骤270结束。IV挂起状态管理技术虽然提供挂起的更改的这种能力与初始状态一起使得EIS114能够解决多个冲突,而且如有需要,也允许客户端应用程序104倒转所述挂起的更改,在这些更改通过EIS114运行其自己的进程的同时提供一种可靠地保持移动设备102上的所有信息的机制是有益的。根据本发明的一实施方式,直至EIS114指出企业数据系统116已被更新从而反映挂起的更改,才将由客户端应用程序104在本地数据库108内产生的挂起的更改视为是最终的(即,提交的)更改。相关领域的技术人员将意识到,对现存数据的更改可包括对本地数据库108中存在的MBO的一个或多个属性的更改。代码生成器可以被设置为协助管理该信息的。根据本发明的一实施方式,当代码生成器运行时,对于每个实体,在本地数据库108内生成两个表。根据本发明的一实施方式,这两个表称为“主表(maintable)”和“初始状态表(originalstatetable)”。根据本发明的一实施方式,主表用于反映由移动设备102所接收的数据的最新状态。根据本发明的另一实施方式,无论何时,当从同步服务器110接收到数据时,将该数据置于主表内作为最新已知的数据,通常将其视为反映企业数据系统116的当前状态。假定移动设备102存在间歇连通性的可能性,且还有最后的机会将移动设备102与同步服务器110同步,则主表中的数据可能是过时的。然而,在此描述的冲突解决处理流程,包括如有需要则可能删除更改,能够考虑到移动设备102将该可能过时的数据作为有效的最当前数据进行处理的这种情况。另外,无论何时,当客户端启动对现有数据的更改(通常通过执行更新或删除功能)时,则该数据的初始状态首先被保存在初始状态表中,且将挂起的更改添加至主表。在下文中,将参考图4、5和6进一步详细描述可将客户端应用程序104设置为处理创建、更新和删除请求的各种方式。继续以前述的实体示例为例,基于账户实体的主表可具有下述形式createtableAccount(surrogateKeyinteger,pendingFlagboolean,accountIdstring,customerIdstring,balancedecimal·pendingChangestring,replayCounterinteger,replayPendinginteger,replayFailureinteger,primarykey(surrogateKey,pendingFlag))基于账户实体的初始状态表可具有下述形式createtableAccount—os(surrogateKeyintegerraccountldstring,customerIdstring,balancedecimal,primarykey(surrogateKey))在上述不例性的主表中,根据本发明的一实施方式,与实体有关的属性可被创建作为该表中的列。此外,添加pendingFlag,并将其与surrogateKey结合使用,以作为账户表(Accounttable)的键。在下文中将进一步详细描述域pendingChange、replayCounter、replayPending和replayFailure。初始状态表保存初始属性,且其是通过使用代理键(surrogatekey)而键入的。通过将代理键和挂起的标识(pendingflag)结合使用来键入该主表,对于同一代理键可能存在两个实体。当挂起的标识为“假”时,这两个实体对应于该数据的最新下载版本,且当挂起的标识为“真”时,这两个实体对应于挂起的更改。相关领域的技术人员意识至IJ,存在其他用于管理挂起状态和所下载的状态数据的方法,所示出的设置是示例性的而非限制性的。图3是根据本发明的一实施方式的示出了各步骤的流程图300,其中,通过这些步骤,移动设备102上的客户端应用程序处理从同步服务器110处接收到的同步事件。相关领域的技术人员将意识到,基于在此的公开,可以多种方法来处理同步,包括传统的同步方法以及在此进一步详细描述的基于消息的同步。该方法从步骤302开始,进行到步骤304,其中,客户端应用程序104接收来自同步服务器110的更改。在步骤306中,确定特定类型的更改。根据本发明的一实施方式,这可以是创建308a、更新308b或删除308c请求。根据本发明的一实施方式,若该请求为创建308a请求,则在步骤310a中,客户端应用程序104通过对包含新接收的数据的主表添加一行来处理该请求。表示最新下载的状态的该数据具有被设定为“假”的挂起的标识。根据本发明的另一实施方式,若表中已经存在对应条目(例如,相同的代理键,其具有被设定为“假”的挂起的标识),则相反地,创建308a请求可被视为更新308b,以确保保持与EIS114同步。应用所述创建308a请求的示例性查询可为insertintoAccount(surrogateKey,pendingFlag,accountld,.CnstomerIdfbalance,pendingChange,replayCounter,replayPending,replayFailure)values(1000,false,^123'%irJimir,100,T,Qt0#0)所创建的行表示对应于代理键1000的新条目具有相应的属性值,该新条目不是挂起的更改(即,其为最新下载的状态)。根据本发明的一实施方式,在步骤308b中接收更新请求。在步骤310b中使用该数据对主表内具有相应的代理键和具有设定为“假”的挂起的标志的行进行更新。根据本发明的另一实施方式,若不存在要更新的相应的行,则该更新请求被视为创建308a。继续前述示例,应用该更新308b请求的示例性查询可为updateAccountsetbalance=150wheresurrogateKey=1000andpendingFlag=false此外,当通过同步服务器110接收到的更新请求表示最近下载的状态时,该更改应影响具有被设定为“假”的挂起的标志的条目。相反,若该请求为删除请求308c,则在步骤310c中,从主表中删除相应的条目。如前所述,根据本发明的一实施方式,该相应的条目可与代理键相匹配且具有被设定为“假”的挂起的标志。应用该删除308c请求的示例性查询可为、deletefromAccountwheresurrogateKey=1000andpendingFlag=false步骤312说明了对这些更改的处理。由通过同步服务器110从EIS114处接收的CUD消息引入的任何更改都被视为MBO的最新下载的状态。相关领域的技术人员将意识到,此处的特定实施方式优选为尽可能好地保持与企业数据系统116的同步,但也可以使用其他方法。该方法在步骤314结束。客户端应用程序104也可以启动CUD消息,需要通过同步服务器110将该消息与企业数据系统116中的数据同步。图4是根据本发明的一实施方式的示出了各步骤的流程图400,其中,通过这些步骤,客户端应用程序104启动创建请求。该方法从步骤402开始,进行到步骤404,其中,客户端应用程序104调用创建操作。在步骤406中,响应该调用,将挂起的行插入主表中,使其属性被设为期望属性,且挂起的标志被设定为“真”。另外地,根据本发明的一实施方式,将前述的pendingChange域设置为表示该更改为创建操作。根据本发明的另一实施方式,这通过将该域设置为“C”或者设置为其他被理解为表示创建操作的字符串而完成。客户端应用程序104调用操作(例如创建操作)与客户端应用程序104实际提交该操作之间产生了差别。对该操作的调用对应于上文中详细描述的updateO方法(例如account,update()),该方法将更改存储到本地数据库108中作为挂起的更改。根据本发明的一实施方式,该操作的提交(例如account.submitPendingO)表示通过同步服务器110对提交至EIS114的更改进行排序。在提交之前,客户端应用程序104可选择取消该更改(例如account,canceIPendingO),其简单地将挂起的更改从主表中删除。根据本发明的一实施方式,当客户端应用程序104调用创建操作时,replayCounter列被设置为唯一的非零值,其大于之前在本地数据库108中使用的任何replayCounter值。如随后可看到的,这提供了一种功能,该功能用于将来自EIS114的响应匹配到挂起的更改。相关领域技术人员将意识到,存在将挂起的更改与响应消息相关联的其他方法,且replayCounter(以及replayPending和replayFailure)域的使用是示例性的而非限制性的。继续前述示例,且非限制性的,对创建操作的调用可导致下述示例性的查询被执行insertintoAccount(surrogateKey,pendingFlag,accountld,customerId,balance,pendingChangePreplayCounter,repIayPending,replayFailure)values(1000,true,M123M#nJimn,300,WC'%20001,0,0)在该示例性的插入方法中,在主表中创建了具有代理键值1000的挂起的更改(其由为“真”的pendingFlag域指定)。挂起的更改被标记为针对创建的“C”,且重放计数器设为20001,其在该示例中是重放计数器值的向上计数序列中待使用的下一个数字。根据本发明的一实施方式,在步骤408中,当由客户端应用程序104将该创建操作提交至同步服务器110时,将更改请求列队至同步服务器,同步服务器包括待应用的挂起的更改。然后,replayPending列被设为指示客户端应用程序104正在等待对来自EIS114的请求的响应,使用下述示例性的查询updateAccountsetreplayPending=20001wheresurrogateKey=1000andpendingFlag=true通过设置replayPending域,能够将该挂起的更改匹配至接收自EIS114的回调函数,要么成功要么失败。该方法在步骤412结束。图5是根据本发明的一实施方式的示出了各步骤的流程图500,其中,通过这些步骤,客户端应用程序104启动更新操作。在步骤504中,客户端应用程序104调用更新操作。当使用上文中详细描述的创建操作时,这导致在主表中插入挂起的行。在一实施方式中,这通过使用下述示例性的查询完成insertintoAccount(surrogateKey,pendingFlag,accountld,CustomerIdrbalance,pendingChange,replayCounter,replayPending,replayFailure)values(1000,true,,r123'%"Jim",200,Tf20002,0,0)该操作具有将账户ID123的余额更新为200的效果。然而,并不是更改主表中最新下载的状态,而是创建挂起状态版本(pendingFlag=true),使用相同的代理键。在此,该更改标记为针对更新的“U”,且给出下一个唯一的replayCounter值20002。然而,也需要保存该MBO数据的初始状态,使得其可以在冲突解决中被使用。为此,示例性查询可以为insertintoAccount_os(surrogateKey,accountld,customerld,balance)values(1000,"123","Jim",100)通过在初始状态表中保存初始状态,在执行更新时保留关于MBO的初始状态的信息。尽管在执行上述查询后,插入初始状态表中的MBO数据很可能与主表中的被下载的状态数据相同,会发生能够更改被下载的状态数据的其他事件,例如从同步服务器110下载更新过的数据。在这样的事件中,仍需要知晓该初始状态,该挂起的更新是基于该初始状态的。根据本发明的一实施方式,若更新的MBO已经具有相关的挂起状态,则更新现有的挂起的行,而不是插入新的行。此外,前述被创建的初始状态将被保留,以作为用于随后的挂起的更改的基础。用于该更新的示例性查询可以为updateAccountsetbalance=200,pendingChange="U",replayCounter=20002wheresurrogateKey=1000andpendingFlag=true根据本发明的一实施方式,在步骤510中,客户端应用程序104提交挂起的更新操作。根据本发明的一实施方式,如上述创建操作,将改变请求列队至同步服务器,该同步服务器包括待应用的挂起的更改。然后,replayPending列被设为指示客户端应用程序104正在等待对来自EIS114请求的响应,使用下述示例性的查询updateAccountsetreplayPending=20002wheresurrogateKey=1000andpendingFlag=true通过设置replayPending域,能够再次将该挂起的更改匹配至接收自EIS114的回调函数,要么成功要么失败。该方法在步骤514结束。图6是根据本发明的一实施方式的示出了各步骤的流程图600,其中,通过这些步骤,客户端应用程序104启动删除操作。根据本发明的另一实施方式,删除操作的特性在许多方面类似于更新操作,不同的是,该操作在pendingChange域中被标记为针对删除的“D”。当使用更新时,在步骤604中,客户端应用程序104调用删除操作。其结果是,客户端应用程序104将该挂起的更改插入主表中,且在步骤606中适当地设置重放计数器。为此,示例性的查询可以为insertintoAccount(surrogateKey,pendingFlag,accountld^customerld^balance,pendingChangerreplayCounter,replayPending,replayFailure)values(1000,true,100,mBnf20003,Or0)同样地,在步骤608中,将对应于初始状态的数据插入初始状态表中。为此,示例性的查询可以为insertintoAccount_os(surrogateKey,accountld,customerld,balance)values(1000,"123","Jim",100)根据本发明的一实施方式,若被删除的MBO已经具有相关的挂起状态,则更新现有的挂起的行以指示删除,而不是插入新行。此外,前述被创建的初始状态将被保留,以作为用于随后的挂起的更改的基础。为此,该更新的示例性的查询可以为updateAccountsetpendingChange="D",replayCounter=20003wheresurrogateKey=1000andpendingFlag=true根据本发明的一实施方式,在步骤610中,客户端应用程序104提交删除操作,用于由EIS114通过同步服务器110处理。根据本发明的一实施方式,在此,如前所述,将更改请求列队至同步服务器,该同步服务器包括待应用的挂起的更改。然后,replayPending列被设为指示客户端应用程序104正在等待对来自EIS114请求的响应,使用下述示例性的查询updateAccountsetreplayPending=20003wheresurrogateKey=1000andpendingFlag=true通过设置replayPending域,能够再次将该挂起的更改匹配至从EISl14接收的回调函数,要么成功要么失败。该方法在步骤614结束。图7是根据本发明的一实施方式的示出说明各步骤的流程图700,其中,通过这些步骤将客户端应用程序104设置为对重放操作回调函数进行响应。相关领域技术人员将领会到,使用除回调函数之外的其他通知方法也可产生类似的效果,在此示出的回调函数是示例性而非限制性的。根据本发明的一实施方式,该方法从步骤702开始,且进行至步骤704,其中客户端应用程序104被告知重放操作的结果。如上所述,其可以是回调函数的形式。在上文中参考图2B的流程图250进一步详细讨论了在EIS114处的重放和所产生的回调函数的生成。在步骤706中,确定特定的挂起的更改的重放是否成功。根据本发明的一实施方式,使接收成功的回调处理器上的回调函数与接收失败的回调处理器上的回调函数这两个步骤分开,从而进行处理。若重放操作成功,则该方法运行至步骤708,其中将对应的挂起的行从主表中删除。根据本发明的一实施方式,只有当与成功重放相关的replayCounter值与挂起的行的replayPending值相匹配时,才发生该删除。根据本发明的另一实施方式,若不匹配,则忽略整个通知,以确保仅处理对最后提交的操作的响应。用于删除挂起的行的示例性查询可以为deletefromAccountwheresurrogateKey=1000andpendingFlag=true此外,根据本发明的一实施方式,在步骤710中,从初始状态表中删除对应的初始行。用于删除该初始状态行的示例性查询可为deletefromAccount_oswheresurrogateKey=1000根据本发明的一实施方式,在步骤712中,通知成功的回调处理器。根据本发明的一实施方式,在由代码生成器提供的、且由开发者并入客户端应用程序104中的代码中执行在流程图700中概述的步骤。客户端应用程序104的开发者可具有额外的操作,其是否应被执行取决于是成功还是失败,且可注册成功或失败的回调处理器,以执行任何额外的处理。若已经注册了一个这样的回调处理器,则在步骤712中通知,且在步骤718中将控制移交给用于额外处理的该回调处理器。根据本发明的一实施方式,相反地,若该重放操作失败,该方法运行至步骤714,其中,更新主表中的挂起的更改行,以反映该失败。如重放成功,仅当挂起的行的replayPending值和与成功重放相关的replayCounter值之间存在匹配时才执行这一操作。根据本发明的另一实施方式,若不匹配,则忽略整个通知,以确保仅处理对最后提交的操作的响应。相应地,用于更新挂起的行的示例性查询的内容可以为updateAccountsetrepIayPending=O,repIayFailure=20001wheresurrogateKey=1000andpendingFlag=true根据本发明的一实施方式,在步骤716中,若注册了一个回调处理器,则通知用于客户端应用程序104的失败回调处理器。然后,在步骤718中,由客户端应用程序104响应该回调来执行任何额外的处理。该方法在步骤720结束。V查询处理技术上述用于在同一主表中保持挂起状态的方法(其中可驻留下载状态)允许同一MBO能够有两个现有的行,例如当存在挂起的更新或删除操作时。相应地,针对主表所写入的查询必须对可能的复本作出解释。例如,如果对现有的MBO记录进行更新,则除了不存在挂起的更改之外,客户端应用程序104的开发者会遭遇下述难点varoidAccounts=Account.findByCustomer(^123*1);varfirstAccount=oidAccounts;firstAccount,balance=firstAccount,balance+100|firstAccount.update();//thiscreatesapendingchange此时,若运行同一查询来查找用户号123的账号,其将返回下载状态和挂起的更改两者,除非开发者的任务为解决该难点。varnewAccounts=Account.findByCustomer("123");assertnewAccounts.Iength==OIdAccounts.length;除非进行一些后台处理,从而在由开发者运行的程序接收到查询结果之前过滤该查询结果,否则上述声明将失效。与其由开发者负责解决在下载状态行与挂起的更改之间的区分问题,不如透明地处理该问题。根据本发明的一实施方式,使用代码生成器重写命名查询,以确保查询执行的结果能消除复本。根据本发明的另一实施方式,这通过返回针对结果的挂起的行(若存在)或返回下载的状态行而完成。这允许对存在挂起状态的行进行额外的更改,但不依赖于那个挂起状态数据,因此也不依赖于对应于那个挂起状态的初始状态。通过遵循该方法,在后来的更新和删除(其中存在挂起的更改)中不需要再次创建初始状态,因为它们本质上并不依赖于与第一挂起的更改相同的初始状态。使用前述讨论的命名查询Account,findByCustomerselecta.*fromAccountawherea.customerld=:id这一执行可返回两行,其中accountld=前一不例的firstAccount.accountld。一行具有pendingFlag=false,且另一行具有pendingFlag=true。在这样的情况下,由于上述原因,所期望的结果是具有pendingFlag=true的行。因此,可以通过使用针对初始状态表的相关子查询来重写该查询,例如,示例如下selecta.*fromAccountawhere(a.pendingFlag=trueornotexists(selecta_os·surrogateKeyfromAccount_osa_oswherea_os.surrogateKey=a.surrogateKey))anda.customerld=:id通过使用SQL外连语法实现上述查询重写。可替换地,可以针对主表而不是初始状态表生成相关子查询,但由于初始状态表所包含的行可能少于主表,可以通过使用上述查询而提高效率。相关领域技术人员将意识到,存在很多其他这样的重写,仅示例性地而非限制性地示出了上述查询。根据本发明的另一实施方式,还可过滤与主表一起使用的动态查询,其中下载的状态和挂起的更改可共存。在一非限制性示例实施方式中,客户端应用程序104的开发者可使用动态查询生成模块来指定动态查询,如"query,where(AttributeTest.equal(attribute,testValue))〃,以测试查询“where”句中的属性值。根据本发明的另一实施方式,所产生的生成查询被自动设计为选择相应的挂起的更改(若存在)或下载的状态,且因此不需要主动重写该查询。VI基于消息的同步前面提及的由客户端应用程序104通过同步服务器110发送至EIS114且由EIS114通过同步服务器110发送至客户端应用程序104的CUD消息可通过在此描述的消息系统通信。该消息同步方法被设计为支持前文中描述的挂起状态管理技术,且被设计为有效使用客户端资源和网络连接。然而,相关领域技术人员将意识到,在此描述的消息技术对于其他环境的适应性,所提供的对具有挂起状态管理的基于消息的同步的使用是示例性而非限制性的。基于消息的同步("MBS")提供了异步地执行同步的能力。这意味着,例如,移动设备102不需要为了执行完全同步而一直等到其与同步服务器110建立连接的时刻,而是在连接可用的时候间歇地从同步服务器110接收消息或向其发送消息。根据本发明的一实施方式,利用Jave消息服务("JMS")作为通信通道。根据本发明的另一实施方式,该消息是javax.jms.TextMessage类型的消息,其中文本内容为JavaScript对象符号("JS0N")。相关领域技术人员将领会到,可利用其它的通信手段,且在此提供的在JMS上对JSON的使用是示例性而非限制性的。根据本发明的一实施方式,消息被发送至JMS队列(例如mbs.N),其中N不大于同步服务器110中有效队列的数量。可使用多个队列,以允许同步服务器110处理来自多个客户端的同步请求。所述队列被设置为确保至少一次循序传送。对于相关领域技术人员来说显而易见的是,通过多次使用上述挂起状态管理技术来应用消息并不会导致不利影响,且因此其更实际地确保了至少一次传送,而非精确地一次传送。根据本发明的一实施方式,所述消息被指定为用于客户端至服务器或服务至客户端的通信中。每个消息指定一组报头,报头定义待发送的值与该消息的结合。对相关领域技术人员来说显而易见的是,在此示出的精确消息和所述报头是示例性的而非限制性的。例如,消息所使用的报头可多于或少于在这些示例性实施方式中示出的报头,或完全使用不同组的报头。此外,尽管在此示出的报头和消息旨在通过JMS使用,相关领域技术人员将领会到,可以在其他消息传送装置中使用这些技术。iJMS报头的用法权利要求1.一种方法,其包括执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅;针对所述更新的订阅运行所述下载光标,以生成结果行;以及在输入消息中将所述结果行发送至客户端设备。2.如权利要求I所述的方法,还包括生成用于所述业务对象的缓存表,其中,针对所述缓存表运行所述下载光标和通知查询。3.如权利要求I所述的方法,还包括针对所述更新的订阅,更新最后的下载时间。4.如权利要求I所述的方法,其中,所述通知查询被设置为基于识别订阅来确定所述更新的订阅,其中,所述订阅弓I用至少一个更新的实体。5.如权利要求I所述的方法,还包括创建批次消息,所述批次消息包括输入消息集,所述创建批次消息包括确定缓冲区是否具有用于来自所述输入消息集的下一个输入消息的额外空间,若存在额外的空间,则将所述下一个输入消息添加至所述缓冲区;当存在额外的空间时,重复上述确定步骤;以及发送所述批次消息。6.如权利要求I所述的方法,还包括将同步请求发送至客户端设备。7.一种计算机可读介质,其具有存储于其上的计算机可执行指令,如果由计算设备执行,则所述计算机可执行指令引起所述计算设备实施包括下述步骤的方法执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅;针对上述更新的订阅运行所述下载光标,以生成结果行;以及在输入消息中将所述结果行发送至客户端设备。8.如权利要求7所述的计算机程序产品,所述方法还包括生成用于所述业务对象的缓存表,其中,针对所述缓存表运行所述下载光标和通知查询。9.如权利要求7所述的计算机程序产品,所述方法还包括针对所述更新的订阅,更新最后的下载时间。10.如权利要求7所述的计算机程序产品,其中,所述通知查询被设置为基于识别订阅来确定所述更新的订阅,所述订阅引用至少一个更新的实体。11.如权利要求7所述的计算机程序产品,所述方法还包括创建批次消息,所述批次消息包括输入消息集,所述创建批次消息包括确定缓冲区是否具有用于来自所述输入消息集的下一个输入消息的额外空间,若存在额外的空间,则将下一个输入消息添加至所述缓冲区;当存在额外的空间时,重复上述确定步骤;以及发送所述批次消息。12.如权利要求7所述的计算机程序产品,所述方法还包括将同步请求发送至客户端设备。13.—种系统,其包括存储器,其被设置为存储模块,所述模块包括执行模块,其被设置为执行从用于业务对象的下载光标中获取的通知查询,以识别更新的订阅,运行模块,其被设置为针对所述更新的订阅运行所述下载光标,以生成结果行,以及发送模块,其被设置为在输入消息中将所述结果行发送至客户端设备;所述系统还包括一个或者多个处理器,其被设置为处理所述模块。14.一种方法,其包括从客户端接收消息,所述消息包括客户端标识符、消息标识符和重放指令;搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于所述客户端标识符和消息标识符的所述消息之前是否已被接收过;一旦确定所述消息之前未被接收过,则处理所述消息;以及将客户端标识符和消息标识符添加到所述对应于之前接收到的消息的客户端标识符和消息标识符对的列表中。15.如权利要求14所述的方法,还包括针对企业系统重放所述重放指令。16.如权利要求14所述的方法,其中,通过顺序传送所述消息以及应用所述对应于之前接收到的消息的客户端标识符和消息标识符对的列表,确保至少一次传送。17.一种计算机可读介质,其具有存储于其上的计算机可执行指令,如果由计算设备执行,则所述计算机可执行指令引起所述计算设备实施包括下述步骤的方法接收来自客户端的消息,所述消息包括客户端标识符、消息标识符和重放指令;搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于所述客户端标识符和消息标识符的所述消息之前是否已被接收过;一旦确定所述消息之前未被接收过,则处理所述消息;以及将所述客户端标识符和消息标识符添加到所述对应于之前接收到的消息的客户端标识符和消息标识符对的列表中。18.如权利要求17所述的计算机程序产品,所述方法还包括针对企业系统重放所述重放指令。19.如权利要求17所述的计算机程序产品,其中,通过顺序传送所述消息以及应用所述对应于之前接收到的消息的客户端标识符和消息标识符对的列表,确保至少一次传送。20.—种系统,其包括存储器,所述存储器被设置为保存模块,所述模块包括接收模块,其被设置为从客户端接收消息,所述消息包括客户端标识符、消息标识符和重放指令,搜索模块,其被设置为搜索对应于之前接收到的消息的客户端标识符和消息标识符对的列表,以确定对应于所述客户端标识符和消息标识符的所述消息之前是否已被接收过,一旦确定所述消息之前未被接收过,则处理所述消息,以及添加模块,其被设置为将所述客户端标识符和消息标识符添加到所述对应于之前接收到的消息的客户端标识符和消息标识符对的列表中;所述系统还包括一个或者多个处理器,其被设置为处理所述模块。全文摘要本申请提供了一种系统、方法和计算机程序产品,用于执行从用于业务对象的下载光标中获取的通知查询,以确定更新的订阅,从而在输入消息中将更新提供至客户端设备。提供额外的系统、方法和计算机程序产品,用于确保消息的至少一次传送。文档编号G06F9/44GK102741829SQ201080060198公开日2012年10月17日申请日期2010年12月14日优先权日2009年12月30日发明者埃文·爱尔兰,大卫·克里格,张国平,赫摩尔·潘迪亚,迈克尔·弘申请人:赛贝斯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1