專利名稱::用于移動(dòng)業(yè)務(wù)對(duì)象的基于消息的同步的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及數(shù)據(jù)庫(kù)同步,且更具體地,涉及用于數(shù)據(jù)同步的通信方法。
背景技術(shù):
:無(wú)論何時(shí)(通常在用戶指定的時(shí)機(jī)),當(dāng)通過(guò)執(zhí)行完整的同步事件而獲得連通性時(shí),移動(dòng)設(shè)備傳統(tǒng)地依賴于與企業(yè)系統(tǒng)的同步。例如在放置于對(duì)接架(dockingcradle)中時(shí),移動(dòng)設(shè)備可具有連通性。移動(dòng)設(shè)備在對(duì)接后執(zhí)行其數(shù)據(jù)的完整同步、上傳和下載。然而,當(dāng)上傳的信息是過(guò)時(shí)的或當(dāng)另一移動(dòng)設(shè)備已在同一斷開連接期間執(zhí)行了更新時(shí),這些傳統(tǒng)的方法無(wú)法提供足夠的信息來(lái)解決設(shè)備所依賴的數(shù)據(jù)方面的沖突。此外,傳統(tǒng)方法不包括使得移動(dòng)設(shè)備可以可靠地發(fā)送和接收這些更新的通信方法。因此,期望獲得用于使來(lái)自移動(dòng)設(shè)備的數(shù)據(jù)與企業(yè)系統(tǒng)同步的改進(jìn)的方法。
發(fā)明內(nèi)容本發(fā)明的實(shí)施方式包括一方法,該方法包括執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱;針對(duì)該更新的訂閱運(yùn)行該下載光標(biāo),以生成結(jié)果行;以及,在輸入消息中將該結(jié)果行發(fā)送至客戶端設(shè)備。本發(fā)明的實(shí)施方式另外包括一種計(jì)算機(jī)可讀介質(zhì),其具有存儲(chǔ)于其上的計(jì)算機(jī)可執(zhí)行指令,若由計(jì)算設(shè)備執(zhí)行,則該計(jì)算機(jī)可執(zhí)行指令致使該計(jì)算設(shè)備實(shí)施包括下述步驟的方法執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱;針對(duì)該更新的訂閱運(yùn)行該下載光標(biāo),以生成結(jié)果行;以及,在輸入消息中將該結(jié)果行發(fā)送至客戶端設(shè)備。此外,本發(fā)明的實(shí)施方式另外包括一種系統(tǒng),該系統(tǒng)包括存儲(chǔ)器,其被設(shè)置為保存模塊;該模塊包括執(zhí)行模塊,其被設(shè)置為執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱;運(yùn)行模塊,其被設(shè)置為針對(duì)該更新的訂閱運(yùn)行該下載光標(biāo),以生成結(jié)果行;以及,發(fā)送模塊,其被設(shè)置為在輸入消息中將該結(jié)果行發(fā)送至客戶端設(shè)備;所述系統(tǒng)還包括一個(gè)或者多個(gè)處理器,其被設(shè)置為處理該模塊。此外,本發(fā)明另外包括一種方法,該方法包括從客戶端接收消息,該消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令;搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的該消息之前是否已被接收過(guò),一旦確定該消息之前未被接收過(guò),則處理該消息;以及,將該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表中。此外,本發(fā)明的實(shí)施方式包括一種計(jì)算機(jī)可讀介質(zhì),其具有存儲(chǔ)于其上的計(jì)算機(jī)可執(zhí)行指令,若由計(jì)算設(shè)備執(zhí)行,則該計(jì)算機(jī)可執(zhí)行指令致使該計(jì)算設(shè)備實(shí)施包括下述步驟的方法接收來(lái)自客戶端的消息,該消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令;搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的該消息之前是否已被接收過(guò),一旦確定該消息之前未被接收過(guò),則處理該消息;以及,將該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表。此外,本發(fā)明的實(shí)施方式包括一種系統(tǒng),該系統(tǒng)包括存儲(chǔ)器,其被設(shè)置為保存模塊;該模塊包括接收模塊,其被設(shè)置為從客戶端接收消息,該消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令;搜索模塊,其被設(shè)置為搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的該消息之前是否已被接收過(guò),一旦確定該消息之前未被接收過(guò),則處理該消息;以及,添加模塊,其被設(shè)置為將該客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表中;該系統(tǒng)還包括一個(gè)或者多個(gè)處理器,其被設(shè)置為處理該模塊。在下文中,參考附圖詳細(xì)描述本發(fā)明的其他特征和優(yōu)點(diǎn)以及本發(fā)明的各實(shí)施方式的結(jié)構(gòu)和操作。應(yīng)指出,本發(fā)明不限于在此所描述的特定實(shí)施方式。在此,僅以說(shuō)明為目的呈現(xiàn)這些實(shí)施方式?;诎诖说慕虒?dǎo),另外的實(shí)施方式對(duì)相關(guān)領(lǐng)域技術(shù)人員來(lái)說(shuō)將是顯而易見的。包括在本文中且構(gòu)成說(shuō)明書的一部分的附圖示出了本發(fā)明的實(shí)施方式,其與說(shuō)明書一起用于進(jìn)一步解釋本發(fā)明的原理且使得相關(guān)領(lǐng)域技術(shù)人員可以實(shí)施和使用本發(fā)明。圖I是根據(jù)本發(fā)明的一實(shí)施方式的、示例性的企業(yè)網(wǎng)絡(luò)。圖2A是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,可通過(guò)這些步驟來(lái)操作移動(dòng)設(shè)備的客戶端應(yīng)用程序,從而針對(duì)業(yè)務(wù)對(duì)象向同步服務(wù)器提交創(chuàng)建、更新或刪除消息,用于傳送至企業(yè)信息系統(tǒng)。圖2B是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,企業(yè)信息系統(tǒng)處理所接收的創(chuàng)建、更新或刪除消息。圖3是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,移動(dòng)設(shè)備上的客戶端應(yīng)用程序處理從同步服務(wù)器處接收到的同步事件。圖4是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,客戶端應(yīng)用程序啟動(dòng)創(chuàng)建請(qǐng)求。圖5是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,客戶端應(yīng)用程序啟動(dòng)更新操作。圖6是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,客戶端應(yīng)用程序啟動(dòng)刪除操作。圖7是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟將客戶端應(yīng)用程序設(shè)置為對(duì)重放操作回調(diào)函數(shù)(replayoperationcallback)進(jìn)行響應(yīng)。圖8是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟將同步服務(wù)器設(shè)置為檢測(cè)和丟棄復(fù)本消息。圖9是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,可以通過(guò)使用緩存表來(lái)執(zhí)行基于復(fù)本的同步。圖10是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,可以將緩存表和下載光標(biāo)與實(shí)體訂閱(entitysubscription)—起使用,以向請(qǐng)求更新的客戶端應(yīng)用程序有效地提供輸入(import)消息。圖11是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟,輸入消息可以一起被分批處理。圖12是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖,其中,通過(guò)這些步驟來(lái)完成由服務(wù)器啟動(dòng)的同步。圖13示出了一示例計(jì)算機(jī)系統(tǒng),可以在其中實(shí)施本發(fā)明的實(shí)施方式?,F(xiàn)在,將參考附圖描述本發(fā)明。通常,在附圖中,相同的參考標(biāo)記表示相同或功能相似的元件,此外,通常地,參考標(biāo)記最左邊的數(shù)字表示參考標(biāo)記第一次出現(xiàn)的附圖。具體實(shí)施例方式I介紹現(xiàn)在,將參考附圖描述本發(fā)明。通常,在附圖中,相同的參考標(biāo)記表示相同或功能相似的元件,此外,通常地,參考標(biāo)記最左邊的數(shù)字表示參考標(biāo)記第一次出現(xiàn)在其中的附圖。如下所述地,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見的是,可以在軟件、硬件、固件和/或附圖中所示的實(shí)體中實(shí)施本發(fā)明。任何具有實(shí)施本發(fā)明的專用硬件控制的實(shí)際的軟件代碼并不用于限制本發(fā)明。因此,應(yīng)理解,在本發(fā)明的范圍和精神內(nèi)能夠進(jìn)行實(shí)施方式的修改和變化,在這一前提下描述本發(fā)明的操作性能。對(duì)本說(shuō)明書和權(quán)利要求中的模塊的引用意味著以執(zhí)行指定功能為目的的、對(duì)硬件或軟件組件的任意組合。該模塊不一定是剛性限定的實(shí)體,使得若干模塊可以在功能上覆蓋硬件和軟件組件。例如,軟件模塊指的可以是程序中的單行代碼,程序本身作為一個(gè)單獨(dú)的軟件模塊。例如,相關(guān)領(lǐng)域的技術(shù)人員會(huì)理解,可以根據(jù)多種設(shè)計(jì)或性能優(yōu)化技術(shù)來(lái)限定模塊的功能。圖I是根據(jù)本發(fā)明的一實(shí)施方式的示例性企業(yè)網(wǎng)絡(luò)100。根據(jù)本發(fā)明的另一實(shí)施方式,企業(yè)網(wǎng)絡(luò)100包括移動(dòng)設(shè)備102。示例性地而非限制性地,移動(dòng)設(shè)備102可包括例如加拿大安大略省滑鐵盧市行動(dòng)研究公司(ResearchInMotion)的黑莓(BlackBerry)或加利福尼亞州庫(kù)比蒂諾蘋果電腦公司(AppleComputer,Inc.)的蘋果手機(jī)(AppleiPhone)的移動(dòng)設(shè)備。相關(guān)領(lǐng)域技術(shù)人員將意識(shí)到,在此所描述的可用于移動(dòng)設(shè)備102的技術(shù)通常也可以用于非移動(dòng)設(shè)備,例如個(gè)人計(jì)算機(jī)。根據(jù)本發(fā)明的一實(shí)施方式,移動(dòng)設(shè)備102可具有安裝在其上的客戶端應(yīng)用程序104。根據(jù)本發(fā)明的一實(shí)施方式,客戶端應(yīng)用程序104可以與設(shè)備輸入和輸出(“1/0”)106接口,該設(shè)備輸入和輸出為例如監(jiān)控器、鍵盤或觸摸屏顯示器??蛻舳藨?yīng)用程序104也可以與本地?cái)?shù)據(jù)庫(kù)108接口,該本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)供客戶端應(yīng)用程序104使用的數(shù)據(jù)集。根據(jù)本發(fā)明的一實(shí)施方式,移動(dòng)設(shè)備102與同步服務(wù)器110通信。根據(jù)本發(fā)明的另一實(shí)施方式,類似地,額外的移動(dòng)設(shè)備112a-c與同步服務(wù)器110通信。如可以被相關(guān)領(lǐng)域技術(shù)人員所理解的,可通過(guò)任何一個(gè)或多個(gè)通信通道將各種移動(dòng)設(shè)備連接至同步服務(wù)器110。在一實(shí)施方式中,例如,移動(dòng)設(shè)備102可以借助蜂窩通信網(wǎng)絡(luò)和互聯(lián)網(wǎng)上的通信躍點(diǎn)(communicationhops)與同步服務(wù)器110連接。各種通信躍點(diǎn)本身可以是公共或私有網(wǎng)絡(luò),且可以包括位于互聯(lián)網(wǎng)以及各種私有內(nèi)部網(wǎng)上的組件。根據(jù)本發(fā)明的一實(shí)施方式,同步服務(wù)器110位于一個(gè)或多個(gè)移動(dòng)設(shè)備102、112a_c以及企業(yè)信息系統(tǒng)(“EIS”)114之間。同步服務(wù)器110有助于捕獲由EIS114產(chǎn)生的對(duì)相關(guān)數(shù)據(jù)的更改,且將該更改提供給移動(dòng)設(shè)備102和112a-c。同步服務(wù)器110也有助于捕獲由移動(dòng)設(shè)備102和112a-c產(chǎn)生的更改,且將該更改提供至EIS114。以這種方式,本地?cái)?shù)據(jù)庫(kù)108中可由移動(dòng)設(shè)備102獲得的數(shù)據(jù)可以與來(lái)自EIS114的相應(yīng)數(shù)據(jù)存儲(chǔ)以及企業(yè)數(shù)據(jù)系統(tǒng)116的數(shù)據(jù)同步。根據(jù)本發(fā)明的一實(shí)施方式,同步服務(wù)器110保持緩存,該緩存反映來(lái)自企業(yè)數(shù)據(jù)系統(tǒng)116的數(shù)據(jù)。根據(jù)本發(fā)明的一實(shí)施方式,EIS114連接至同步服務(wù)器110,以允許同步服務(wù)器110提供上述數(shù)據(jù)同步服務(wù)。如可以被相關(guān)領(lǐng)域技術(shù)人員所理解的,EIS114同樣可以通過(guò)任何通信通道與同步服務(wù)器110通信。相關(guān)領(lǐng)域技術(shù)人員還將理解,EIS114與同步服務(wù)器110可以共享同一物理服務(wù)器或分布式服務(wù)器作為其中的獨(dú)立軟件組件,或者甚至可以被編譯成一個(gè)組合應(yīng)用程序。因此,應(yīng)理解,EIS114與同步服務(wù)器110可以分布在企業(yè)網(wǎng)絡(luò)100的多個(gè)不同位置上,在圖I中以示例性方式顯示為單獨(dú)的計(jì)算設(shè)備,但不限于此。根據(jù)本發(fā)明的一實(shí)施方式,如前文中所述的,EIS114還包括企業(yè)系統(tǒng)116或以通信方式連接至企業(yè)系統(tǒng)116。根據(jù)本發(fā)明的另一實(shí)施方式,本地?cái)?shù)據(jù)庫(kù)108中的數(shù)據(jù)包括例如來(lái)自企業(yè)系統(tǒng)116的數(shù)據(jù)的子集。根據(jù)本發(fā)明的一實(shí)施方式,該數(shù)據(jù)可以為移動(dòng)業(yè)務(wù)對(duì)象(“ΜΒ0”)的形式。MBO是一種可以在企業(yè)信息系統(tǒng)114與移動(dòng)設(shè)備102之間被同步的業(yè)務(wù)對(duì)象。MBO可以由本地?cái)?shù)據(jù)庫(kù)108中的存儲(chǔ)所保存,以允許在未連接至EIS114期間由移動(dòng)設(shè)備102訪問(wèn)。在2009年7月15提交的名為“元數(shù)據(jù)驅(qū)動(dòng)的移動(dòng)業(yè)務(wù)對(duì)象(MetadataDrivenMobileBusinessObjects)”的12/503,573號(hào)美國(guó)專利申請(qǐng)(律師案號(hào)1933.0720001)中提供了MBO的示例,該文件通過(guò)引用方式整體并入于此,但本發(fā)明不限于此。相關(guān)領(lǐng)域技術(shù)人員將意識(shí)到,可通過(guò)多種不同的方式處理客戶端應(yīng)用程序104與同步服務(wù)器110之間的通信。根據(jù)本發(fā)明的一實(shí)施方式,通信框架直接嵌入如由代碼生成器或開發(fā)者提供的客戶端應(yīng)用程序104中。根據(jù)本發(fā)明的一額外實(shí)施方式,可在移動(dòng)設(shè)備102上配置助手應(yīng)用程序,以管理該通信。II示例性業(yè)務(wù)對(duì)象模型根據(jù)本發(fā)明的一實(shí)施方式,可以使用被稱為XML應(yīng)用程序(“AFX”)的、基于公眾可用XML的專用領(lǐng)域語(yǔ)言對(duì)MBO建模。相應(yīng)領(lǐng)域技術(shù)人員將意識(shí)到,可通過(guò)不同的方式對(duì)MBO建模,包括通過(guò)使用可視化建模工具以圖形方式建?;蛲ㄟ^(guò)使用專用領(lǐng)域語(yǔ)言(如AFX文本)以文本方式建模。相應(yīng)地,在此通過(guò)使用AFX所呈現(xiàn)和討論的示例是示例性的而非限制性的。根據(jù)本發(fā)明的一實(shí)施方式,程序包定義(packagedefinition)提供了用于定義移動(dòng)設(shè)備102內(nèi)的本地?cái)?shù)據(jù)庫(kù)的名稱的數(shù)據(jù)庫(kù)定義、數(shù)據(jù)庫(kù)類(database-class)定義以及零或多個(gè)實(shí)體定義。數(shù)據(jù)庫(kù)類定義用于識(shí)別代表本地?cái)?shù)據(jù)庫(kù)108的類。若存在實(shí)體定義,則其每一個(gè)對(duì)應(yīng)一個(gè)ΜΒ0。實(shí)體定義轉(zhuǎn)而定義代表相應(yīng)的MBO的類的名稱。根據(jù)本發(fā)明的一實(shí)施方式,實(shí)體本身存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)108中。根據(jù)本發(fā)明的另一實(shí)施方式,通過(guò)使用至少一個(gè)代理鍵(surrogatekey)和替代鍵(alternatekey)來(lái)鍵入實(shí)體。代理鍵是由移動(dòng)設(shè)備102所使用的鍵值,以說(shuō)明移動(dòng)設(shè)備未能訪問(wèn)EIS'114的鍵創(chuàng)建過(guò)程的原因。若客戶端發(fā)覺(jué)存在用于實(shí)體的EIS114鍵,則該鍵可用作替代鍵。根據(jù)本發(fā)明的另一實(shí)施方式,由同步服務(wù)器110將代理鍵提供至移動(dòng)設(shè)備102,以作為將根據(jù)需要被分配的一批鍵。根據(jù)本發(fā)明的另一實(shí)施方式,實(shí)體定義包括對(duì)EIS114內(nèi)的相應(yīng)更改的操作定義。示例性地而非限制性地,該操作定義用于創(chuàng)建、更新或刪除EIS114內(nèi)的數(shù)據(jù)。根據(jù)本發(fā)明的一實(shí)施方式,實(shí)體定義也可提供命名查詢,命名查詢是可由移動(dòng)設(shè)備102提出的針對(duì)本地?cái)?shù)據(jù)庫(kù)108的預(yù)定義查詢。根據(jù)本發(fā)明的另一實(shí)施方式,實(shí)體定義還包括表示可將由移動(dòng)設(shè)備102產(chǎn)生的更改公開給同步服務(wù)器110的定義,該定義還表示將EIS產(chǎn)生的更改訂閱給移動(dòng)設(shè)備102,以用于下載。結(jié)合上述要素的非限制性的示例性對(duì)象模型的內(nèi)容如下〈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>在上述示例性對(duì)象模型中,與由類“MyDatabase”表示的本地?cái)?shù)據(jù)庫(kù)108“my_bank”相關(guān)的程序包“com.example,bank”包含名為“Account”的單一實(shí)體。該實(shí)體由代理鍵來(lái)鍵入,具有由賬戶ID(accountID)定義的替代鍵,在此情況下該替代鍵是由EIS114的后臺(tái)系統(tǒng)所使用的實(shí)際的唯一鍵。根據(jù)本發(fā)明的另一實(shí)施方式,賬戶實(shí)體也具有多個(gè)屬性,包括上述代理鍵和賬戶名稱,還包括對(duì)應(yīng)于賬戶的用戶ID和賬戶余額。賬戶實(shí)體也定義一查詢“findByCustomer”,在MBO的情況下,其允許具有相應(yīng)的用戶ID的特定賬號(hào)被查找并使用。此外,根據(jù)本發(fā)明的另一實(shí)施方式,賬戶實(shí)體定義多個(gè)操作,所述多個(gè)操作描述用于創(chuàng)建、更新和刪除數(shù)據(jù)的EIS操作,其對(duì)應(yīng)于來(lái)自企業(yè)數(shù)據(jù)系統(tǒng)116的實(shí)體。根據(jù)本發(fā)明的另一實(shí)施方式,代碼生成器在程序包定義上運(yùn)行,從而產(chǎn)生包含在客戶端應(yīng)用程序104中的代碼。這允許客戶端應(yīng)用程序104的開發(fā)者快速激活客戶端應(yīng)用程序104,以協(xié)調(diào)移動(dòng)設(shè)備102與同步服務(wù)器11之間的更改的下載與上傳。根據(jù)本發(fā)明的另一實(shí)施方式,代碼生成器也可生成用于在同步服務(wù)器110上執(zhí)行的代碼?;谏鲜鍪纠缘某绦虬x,可以對(duì)客戶端應(yīng)用程序104進(jìn)行編碼,以使用由代碼生成器從程序包定義中派生的生成代碼來(lái)執(zhí)行特定功能。例如,可以調(diào)用由上述程序包定義所產(chǎn)生的代碼,以解析來(lái)自客戶端應(yīng)用程序104的下列代碼樣本varaccounts=Account.findByCustomer(tlISSt*);for(varainaccounts)fprint(MAccount:M+a.accountId+balance:"+a.balance);}根據(jù)本發(fā)明的一實(shí)施方式,該代碼對(duì)由代碼生成器自動(dòng)產(chǎn)生的類進(jìn)行調(diào)用。例如,段Account.findByCustomer(^123^)利用命名查詢〃findByCustomer〃將匹配的賬戶返回至"accounts〃變量中。然后,對(duì)于"accounts"中的每個(gè)結(jié)果〃a〃,可以顯示相應(yīng)的賬戶ID和余額。根據(jù)本發(fā)明的一實(shí)施方式,不使用命名查詢"findByCustomer〃,終端用戶可指定動(dòng)態(tài)查詢中的選擇標(biāo)準(zhǔn)。代碼生成器可指定多個(gè)選項(xiàng),用于開發(fā)者在定義所需查詢時(shí)從中進(jìn)行選擇。例如,可由開發(fā)者定制下列示范代碼以搜索與特定屬性匹配的賬戶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)}根據(jù)本發(fā)明的一實(shí)施方式,可為開發(fā)者提供下拉式菜單或其他輸入接口功能,以定制在上述示例中使用的屬性和測(cè)試值。在上述示例中,每個(gè)賬戶代表一個(gè)MBO的實(shí)例。如上所述的,且如在示例性對(duì)象模型中所示出的,根據(jù)本發(fā)明的一實(shí)施方式,MBO可支持激活對(duì)EIS114的更改說(shuō)明的功能。在一示例性實(shí)施方式中,這些更改是在MBO上執(zhí)行的創(chuàng)建、更新或刪除操作。繼續(xù)以上述示例賬戶實(shí)體為例,但非限制性地,可以通過(guò)下述代碼更新賬戶余額varaccount=·.·//lookupanaccount(e.g.,usingaquery)vardeposit=*“//specifyadepositamountaccount.balance=account.balance十deposit;account·update();該示例性的代碼段選擇待更改的賬戶,確定預(yù)存金額,且將其應(yīng)用至賬戶余額。根據(jù)本發(fā)明的一實(shí)施方式,當(dāng)準(zhǔn)備應(yīng)用該更改時(shí),調(diào)用account,updateO方法。類似地,若創(chuàng)建新的賬戶,則調(diào)用account,createO方法,以將該賬戶提交給本地?cái)?shù)據(jù)庫(kù)108。account,deleteO方法可從本地?cái)?shù)據(jù)庫(kù)108中刪除該賬戶。根據(jù)本發(fā)明的一實(shí)施方式,這些更改全部存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)108內(nèi),作為掛起的更改。根據(jù)本發(fā)明的另一實(shí)施方式,本地?cái)?shù)據(jù)庫(kù)108保留更改之前的初始狀態(tài)的拷貝。在因任何原因由EIS114針對(duì)企業(yè)數(shù)據(jù)系統(tǒng)116進(jìn)行的數(shù)據(jù)重放失敗時(shí),如有需要,這允許恢復(fù)本地?cái)?shù)據(jù)庫(kù)108。根據(jù)本發(fā)明的一實(shí)施方式,當(dāng)客戶端應(yīng)用程序104準(zhǔn)備將掛起的更改提交給同步服務(wù)器110以用于對(duì)EIS114同步時(shí),調(diào)用submitPendingO方法(例如account.submitPendingO),從而對(duì)掛起的更改排序以用于發(fā)送。根據(jù)本發(fā)明的另一實(shí)施方式,在消息中發(fā)送所述掛起的更改,這將下文中詳細(xì)進(jìn)行描述。根據(jù)本發(fā)明的另一實(shí)施方式,發(fā)送至同步服務(wù)器110的消息包括所述掛起的更改,也包括初始狀態(tài)。通過(guò)提交掛起狀態(tài)和初始狀態(tài),EIS114可以避免、刪除或解決一些沖突。繼續(xù)以先前的示例性實(shí)體為例,可在不知道其他更新的情況下,由兩個(gè)移動(dòng)設(shè)備更新同一賬戶的余額,以使各設(shè)備針對(duì)該更改的初始基礎(chǔ)不一致。例如,按時(shí)間順序設(shè)備I針對(duì)賬戶123下載100的余額。設(shè)備2針對(duì)賬戶123下載100的余額。設(shè)備I將余額更新至200,但不立即調(diào)用account.submitPendingO。設(shè)備2將余額更新至150,且調(diào)用account.submitPendingO?!IS接收來(lái)自設(shè)備2的更新請(qǐng)求,且在企業(yè)數(shù)據(jù)系統(tǒng)上將當(dāng)前余額更新至150。設(shè)備I此時(shí)調(diào)用account.submitPendingO以表示初始狀態(tài)余額為100且掛起的更改為200?;趤?lái)自設(shè)備2的所應(yīng)用的更新,EIS將初始狀態(tài)余額100與其本身報(bào)告的當(dāng)前余額150進(jìn)行比較。識(shí)別出不匹配,EIS可以將接收到的掛起的余額與初始狀態(tài)余額(例如200-100)的差應(yīng)用到當(dāng)前余額150。設(shè)備I和設(shè)備2都同步到新余額250。根據(jù)本發(fā)明的一實(shí)施方式,在EIS114不能解決沖突的情況下,或如果EIS114期望移動(dòng)設(shè)備102解決該沖突,則EIS114可以向客戶端應(yīng)用程序104提供失敗通知。根據(jù)本發(fā)明的另一實(shí)施方式,EIS114也可以為客戶端104提供成功重放操作的通知。圖2A是根據(jù)本發(fā)明的一實(shí)施方式的、示出了各步驟的流程圖200,其中,可通過(guò)這些步驟來(lái)操作移動(dòng)設(shè)備102的客戶端應(yīng)用程序104,從而針對(duì)業(yè)務(wù)對(duì)象向同步服務(wù)器110提交創(chuàng)建、更新或刪除("CUD")消息,以用于傳送至EIS114。該方法從步驟202開始進(jìn)行至步驟204,其中產(chǎn)生MBO的創(chuàng)建、更新或刪除。根據(jù)本發(fā)明的一實(shí)施方式,在步驟206中,CUD消息被提交給同步服務(wù)器110,該消息包括掛起的改變和初始狀態(tài)兩者。根據(jù)本發(fā)明的一實(shí)施方式,在步驟208中,客戶端應(yīng)用程序104接收回調(diào)函數(shù)(callback)。根據(jù)本發(fā)明的一實(shí)施方式,該回調(diào)函數(shù)可表示EIS'114針對(duì)企業(yè)數(shù)據(jù)系統(tǒng)116而重放CUD消息的嘗試是成功還是失敗。根據(jù)本發(fā)明的一實(shí)施方式,由代碼生成器生成的客戶端應(yīng)用程序104的一部分負(fù)責(zé)接收通知并響應(yīng)該通知而回調(diào)已注冊(cè)的函數(shù)。根據(jù)本發(fā)明的另一實(shí)施方式,當(dāng)接收到通知時(shí),客戶端應(yīng)用程序104的額外部分注冊(cè)回調(diào)處理器,以接收回調(diào)函數(shù)。步驟210描述了關(guān)于重放是否成功的確定流程。若該重放成功,則該方法在步驟218結(jié)束。根據(jù)本發(fā)明的一實(shí)施方式,另一方面,若該重放不成功,則在步驟212中執(zhí)行沖突解決流程。在上述示例中,當(dāng)兩個(gè)設(shè)備發(fā)送相沖突的余額更新時(shí),EIS114選擇通過(guò)在第二員將領(lǐng)會(huì)到,需要在不同的沖突場(chǎng)景中以不同的方式來(lái)解決沖突,且該示例性沖突解決流程不能適用于所有情況。相應(yīng)地,在此提供適當(dāng)?shù)撵`活性,以允許開發(fā)者合適地處理沖突。例如,不試圖基于在上述示例中從設(shè)備I接收到的數(shù)據(jù)來(lái)解決余額,相反,EIS114可拒絕應(yīng)用第二次接收到的更新,且向設(shè)備I發(fā)出表示更新失敗的通知。在步驟212中,當(dāng)客戶端應(yīng)用程序104通過(guò)EIS114得知該重放失敗時(shí),如有需要,則可應(yīng)用其本身的沖突解決方案。根據(jù)本發(fā)明的一實(shí)施方式,在步驟214中,確定是否重新提交CUD消息。若需要重新提交該消息,則在步驟206中進(jìn)行所需要的更改以更正沖突且重新提交該消息。另外,根據(jù)本發(fā)明的另一實(shí)施方式,在步驟216中,通過(guò)刪除來(lái)自本地?cái)?shù)據(jù)庫(kù)108的掛起狀態(tài)數(shù)據(jù)來(lái)取消該更改。該方法在步驟218結(jié)束。圖2B是根據(jù)本發(fā)明的一實(shí)施方式的示出了各步驟的流程圖250,其中,通過(guò)這些步驟,EIS114處理所接收的CUD消息。該方法從步驟252開始,且進(jìn)行至步驟254,在該步驟中接收到CUD消息,該消息包括掛起的更改和初始狀態(tài)信息兩者。在步驟256中,將存儲(chǔ)在企業(yè)數(shù)據(jù)系統(tǒng)116內(nèi)的相應(yīng)的當(dāng)前數(shù)據(jù)與在更改請(qǐng)求中指定的初始狀態(tài)進(jìn)行比較。在步驟258中確定當(dāng)前數(shù)據(jù)是否與初始數(shù)據(jù)相同。若相同,則EIS114和客戶端應(yīng)用程序104清理同一初始狀態(tài)基線,且可以容易地將掛起的更改應(yīng)用到EIS114。因此,在步驟266中針對(duì)企業(yè)數(shù)據(jù)系統(tǒng)116重放掛起的更改,且在步驟268中調(diào)用任何已注冊(cè)的重放成功處理器。另一方面,根據(jù)本發(fā)明的一實(shí)施方式,若當(dāng)前數(shù)據(jù)和初始狀態(tài)數(shù)據(jù)不同,則在步驟260中嘗試沖突解決方案。例如,可以使用針對(duì)沖突賬戶余額更新的上述非限制性的示例性沖突解決流程。在步驟262中確定是否解決了沖突,若解決了沖突,則可在步驟266中重放數(shù)據(jù),且在步驟268中確認(rèn)回調(diào)處理器成功。例如,若EIS114選擇使用前述解決流程來(lái)解決余額,則IES114將具有足夠的信息來(lái)針對(duì)企業(yè)數(shù)據(jù)系統(tǒng)116重放掛起的更改,且在步驟268中發(fā)出成功信號(hào)。然而,根據(jù)本發(fā)明的一實(shí)施方式,若不能解決沖突,或若EIS114已經(jīng)被設(shè)置為不嘗試解決該沖突,則在步驟264中生成重放失敗回調(diào)函數(shù)。該方法在步驟270結(jié)束。IV掛起狀態(tài)管理技術(shù)雖然提供掛起的更改的這種能力與初始狀態(tài)一起使得EIS114能夠解決多個(gè)沖突,而且如有需要,也允許客戶端應(yīng)用程序104倒轉(zhuǎn)所述掛起的更改,在這些更改通過(guò)EIS114運(yùn)行其自己的進(jìn)程的同時(shí)提供一種可靠地保持移動(dòng)設(shè)備102上的所有信息的機(jī)制是有益的。根據(jù)本發(fā)明的一實(shí)施方式,直至EIS114指出企業(yè)數(shù)據(jù)系統(tǒng)116已被更新從而反映掛起的更改,才將由客戶端應(yīng)用程序104在本地?cái)?shù)據(jù)庫(kù)108內(nèi)產(chǎn)生的掛起的更改視為是最終的(即,提交的)更改。相關(guān)領(lǐng)域的技術(shù)人員將意識(shí)到,對(duì)現(xiàn)存數(shù)據(jù)的更改可包括對(duì)本地?cái)?shù)據(jù)庫(kù)108中存在的MBO的一個(gè)或多個(gè)屬性的更改。代碼生成器可以被設(shè)置為協(xié)助管理該信息的。根據(jù)本發(fā)明的一實(shí)施方式,當(dāng)代碼生成器運(yùn)行時(shí),對(duì)于每個(gè)實(shí)體,在本地?cái)?shù)據(jù)庫(kù)108內(nèi)生成兩個(gè)表。根據(jù)本發(fā)明的一實(shí)施方式,這兩個(gè)表稱為“主表(maintable)”和“初始狀態(tài)表(originalstatetable)”。根據(jù)本發(fā)明的一實(shí)施方式,主表用于反映由移動(dòng)設(shè)備102所接收的數(shù)據(jù)的最新狀態(tài)。根據(jù)本發(fā)明的另一實(shí)施方式,無(wú)論何時(shí),當(dāng)從同步服務(wù)器110接收到數(shù)據(jù)時(shí),將該數(shù)據(jù)置于主表內(nèi)作為最新已知的數(shù)據(jù),通常將其視為反映企業(yè)數(shù)據(jù)系統(tǒng)116的當(dāng)前狀態(tài)。假定移動(dòng)設(shè)備102存在間歇連通性的可能性,且還有最后的機(jī)會(huì)將移動(dòng)設(shè)備102與同步服務(wù)器110同步,則主表中的數(shù)據(jù)可能是過(guò)時(shí)的。然而,在此描述的沖突解決處理流程,包括如有需要?jiǎng)t可能刪除更改,能夠考慮到移動(dòng)設(shè)備102將該可能過(guò)時(shí)的數(shù)據(jù)作為有效的最當(dāng)前數(shù)據(jù)進(jìn)行處理的這種情況。另外,無(wú)論何時(shí),當(dāng)客戶端啟動(dòng)對(duì)現(xiàn)有數(shù)據(jù)的更改(通常通過(guò)執(zhí)行更新或刪除功能)時(shí),則該數(shù)據(jù)的初始狀態(tài)首先被保存在初始狀態(tài)表中,且將掛起的更改添加至主表。在下文中,將參考圖4、5和6進(jìn)一步詳細(xì)描述可將客戶端應(yīng)用程序104設(shè)置為處理創(chuàng)建、更新和刪除請(qǐng)求的各種方式。繼續(xù)以前述的實(shí)體示例為例,基于賬戶實(shí)體的主表可具有下述形式createtableAccount(surrogateKeyinteger,pendingFlagboolean,accountIdstring,customerIdstring,balancedecimal·pendingChangestring,replayCounterinteger,replayPendinginteger,replayFailureinteger,primarykey(surrogateKey,pendingFlag))基于賬戶實(shí)體的初始狀態(tài)表可具有下述形式createtableAccount—os(surrogateKeyintegerraccountldstring,customerIdstring,balancedecimal,primarykey(surrogateKey))在上述不例性的主表中,根據(jù)本發(fā)明的一實(shí)施方式,與實(shí)體有關(guān)的屬性可被創(chuàng)建作為該表中的列。此外,添加pendingFlag,并將其與surrogateKey結(jié)合使用,以作為賬戶表(Accounttable)的鍵。在下文中將進(jìn)一步詳細(xì)描述域pendingChange、replayCounter、replayPending和replayFailure。初始狀態(tài)表保存初始屬性,且其是通過(guò)使用代理鍵(surrogatekey)而鍵入的。通過(guò)將代理鍵和掛起的標(biāo)識(shí)(pendingflag)結(jié)合使用來(lái)鍵入該主表,對(duì)于同一代理鍵可能存在兩個(gè)實(shí)體。當(dāng)掛起的標(biāo)識(shí)為“假”時(shí),這兩個(gè)實(shí)體對(duì)應(yīng)于該數(shù)據(jù)的最新下載版本,且當(dāng)掛起的標(biāo)識(shí)為“真”時(shí),這兩個(gè)實(shí)體對(duì)應(yīng)于掛起的更改。相關(guān)領(lǐng)域的技術(shù)人員意識(shí)至IJ,存在其他用于管理掛起狀態(tài)和所下載的狀態(tài)數(shù)據(jù)的方法,所示出的設(shè)置是示例性的而非限制性的。圖3是根據(jù)本發(fā)明的一實(shí)施方式的示出了各步驟的流程圖300,其中,通過(guò)這些步驟,移動(dòng)設(shè)備102上的客戶端應(yīng)用程序處理從同步服務(wù)器110處接收到的同步事件。相關(guān)領(lǐng)域的技術(shù)人員將意識(shí)到,基于在此的公開,可以多種方法來(lái)處理同步,包括傳統(tǒng)的同步方法以及在此進(jìn)一步詳細(xì)描述的基于消息的同步。該方法從步驟302開始,進(jìn)行到步驟304,其中,客戶端應(yīng)用程序104接收來(lái)自同步服務(wù)器110的更改。在步驟306中,確定特定類型的更改。根據(jù)本發(fā)明的一實(shí)施方式,這可以是創(chuàng)建308a、更新308b或刪除308c請(qǐng)求。根據(jù)本發(fā)明的一實(shí)施方式,若該請(qǐng)求為創(chuàng)建308a請(qǐng)求,則在步驟310a中,客戶端應(yīng)用程序104通過(guò)對(duì)包含新接收的數(shù)據(jù)的主表添加一行來(lái)處理該請(qǐng)求。表示最新下載的狀態(tài)的該數(shù)據(jù)具有被設(shè)定為“假”的掛起的標(biāo)識(shí)。根據(jù)本發(fā)明的另一實(shí)施方式,若表中已經(jīng)存在對(duì)應(yīng)條目(例如,相同的代理鍵,其具有被設(shè)定為“假”的掛起的標(biāo)識(shí)),則相反地,創(chuàng)建308a請(qǐng)求可被視為更新308b,以確保保持與EIS114同步。應(yīng)用所述創(chuàng)建308a請(qǐng)求的示例性查詢可為insertintoAccount(surrogateKey,pendingFlag,accountld,.CnstomerIdfbalance,pendingChange,replayCounter,replayPending,replayFailure)values(1000,false,^123'%irJimir,100,T,Qt0#0)所創(chuàng)建的行表示對(duì)應(yīng)于代理鍵1000的新條目具有相應(yīng)的屬性值,該新條目不是掛起的更改(即,其為最新下載的狀態(tài))。根據(jù)本發(fā)明的一實(shí)施方式,在步驟308b中接收更新請(qǐng)求。在步驟310b中使用該數(shù)據(jù)對(duì)主表內(nèi)具有相應(yīng)的代理鍵和具有設(shè)定為“假”的掛起的標(biāo)志的行進(jìn)行更新。根據(jù)本發(fā)明的另一實(shí)施方式,若不存在要更新的相應(yīng)的行,則該更新請(qǐng)求被視為創(chuàng)建308a。繼續(xù)前述示例,應(yīng)用該更新308b請(qǐng)求的示例性查詢可為updateAccountsetbalance=150wheresurrogateKey=1000andpendingFlag=false此外,當(dāng)通過(guò)同步服務(wù)器110接收到的更新請(qǐng)求表示最近下載的狀態(tài)時(shí),該更改應(yīng)影響具有被設(shè)定為“假”的掛起的標(biāo)志的條目。相反,若該請(qǐng)求為刪除請(qǐng)求308c,則在步驟310c中,從主表中刪除相應(yīng)的條目。如前所述,根據(jù)本發(fā)明的一實(shí)施方式,該相應(yīng)的條目可與代理鍵相匹配且具有被設(shè)定為“假”的掛起的標(biāo)志。應(yīng)用該刪除308c請(qǐng)求的示例性查詢可為、deletefromAccountwheresurrogateKey=1000andpendingFlag=false步驟312說(shuō)明了對(duì)這些更改的處理。由通過(guò)同步服務(wù)器110從EIS114處接收的CUD消息引入的任何更改都被視為MBO的最新下載的狀態(tài)。相關(guān)領(lǐng)域的技術(shù)人員將意識(shí)到,此處的特定實(shí)施方式優(yōu)選為盡可能好地保持與企業(yè)數(shù)據(jù)系統(tǒng)116的同步,但也可以使用其他方法。該方法在步驟314結(jié)束??蛻舳藨?yīng)用程序104也可以啟動(dòng)CUD消息,需要通過(guò)同步服務(wù)器110將該消息與企業(yè)數(shù)據(jù)系統(tǒng)116中的數(shù)據(jù)同步。圖4是根據(jù)本發(fā)明的一實(shí)施方式的示出了各步驟的流程圖400,其中,通過(guò)這些步驟,客戶端應(yīng)用程序104啟動(dòng)創(chuàng)建請(qǐng)求。該方法從步驟402開始,進(jìn)行到步驟404,其中,客戶端應(yīng)用程序104調(diào)用創(chuàng)建操作。在步驟406中,響應(yīng)該調(diào)用,將掛起的行插入主表中,使其屬性被設(shè)為期望屬性,且掛起的標(biāo)志被設(shè)定為“真”。另外地,根據(jù)本發(fā)明的一實(shí)施方式,將前述的pendingChange域設(shè)置為表示該更改為創(chuàng)建操作。根據(jù)本發(fā)明的另一實(shí)施方式,這通過(guò)將該域設(shè)置為“C”或者設(shè)置為其他被理解為表示創(chuàng)建操作的字符串而完成。客戶端應(yīng)用程序104調(diào)用操作(例如創(chuàng)建操作)與客戶端應(yīng)用程序104實(shí)際提交該操作之間產(chǎn)生了差別。對(duì)該操作的調(diào)用對(duì)應(yīng)于上文中詳細(xì)描述的updateO方法(例如account,update()),該方法將更改存儲(chǔ)到本地?cái)?shù)據(jù)庫(kù)108中作為掛起的更改。根據(jù)本發(fā)明的一實(shí)施方式,該操作的提交(例如account.submitPendingO)表示通過(guò)同步服務(wù)器110對(duì)提交至EIS114的更改進(jìn)行排序。在提交之前,客戶端應(yīng)用程序104可選擇取消該更改(例如account,canceIPendingO),其簡(jiǎn)單地將掛起的更改從主表中刪除。根據(jù)本發(fā)明的一實(shí)施方式,當(dāng)客戶端應(yīng)用程序104調(diào)用創(chuàng)建操作時(shí),replayCounter列被設(shè)置為唯一的非零值,其大于之前在本地?cái)?shù)據(jù)庫(kù)108中使用的任何replayCounter值。如隨后可看到的,這提供了一種功能,該功能用于將來(lái)自EIS114的響應(yīng)匹配到掛起的更改。相關(guān)領(lǐng)域技術(shù)人員將意識(shí)到,存在將掛起的更改與響應(yīng)消息相關(guān)聯(lián)的其他方法,且replayCounter(以及replayPending和replayFailure)域的使用是示例性的而非限制性的。繼續(xù)前述示例,且非限制性的,對(duì)創(chuàng)建操作的調(diào)用可導(dǎo)致下述示例性的查詢被執(zhí)行insertintoAccount(surrogateKey,pendingFlag,accountld,customerId,balance,pendingChangePreplayCounter,repIayPending,replayFailure)values(1000,true,M123M#nJimn,300,WC'%20001,0,0)在該示例性的插入方法中,在主表中創(chuàng)建了具有代理鍵值1000的掛起的更改(其由為“真”的pendingFlag域指定)。掛起的更改被標(biāo)記為針對(duì)創(chuàng)建的“C”,且重放計(jì)數(shù)器設(shè)為20001,其在該示例中是重放計(jì)數(shù)器值的向上計(jì)數(shù)序列中待使用的下一個(gè)數(shù)字。根據(jù)本發(fā)明的一實(shí)施方式,在步驟408中,當(dāng)由客戶端應(yīng)用程序104將該創(chuàng)建操作提交至同步服務(wù)器110時(shí),將更改請(qǐng)求列隊(duì)至同步服務(wù)器,同步服務(wù)器包括待應(yīng)用的掛起的更改。然后,replayPending列被設(shè)為指示客戶端應(yīng)用程序104正在等待對(duì)來(lái)自EIS114的請(qǐng)求的響應(yīng),使用下述示例性的查詢updateAccountsetreplayPending=20001wheresurrogateKey=1000andpendingFlag=true通過(guò)設(shè)置replayPending域,能夠?qū)⒃搾炱鸬母钠ヅ渲两邮兆訣IS114的回調(diào)函數(shù),要么成功要么失敗。該方法在步驟412結(jié)束。圖5是根據(jù)本發(fā)明的一實(shí)施方式的示出了各步驟的流程圖500,其中,通過(guò)這些步驟,客戶端應(yīng)用程序104啟動(dòng)更新操作。在步驟504中,客戶端應(yīng)用程序104調(diào)用更新操作。當(dāng)使用上文中詳細(xì)描述的創(chuàng)建操作時(shí),這導(dǎo)致在主表中插入掛起的行。在一實(shí)施方式中,這通過(guò)使用下述示例性的查詢完成insertintoAccount(surrogateKey,pendingFlag,accountld,CustomerIdrbalance,pendingChange,replayCounter,replayPending,replayFailure)values(1000,true,,r123'%"Jim",200,Tf20002,0,0)該操作具有將賬戶ID123的余額更新為200的效果。然而,并不是更改主表中最新下載的狀態(tài),而是創(chuàng)建掛起狀態(tài)版本(pendingFlag=true),使用相同的代理鍵。在此,該更改標(biāo)記為針對(duì)更新的“U”,且給出下一個(gè)唯一的replayCounter值20002。然而,也需要保存該MBO數(shù)據(jù)的初始狀態(tài),使得其可以在沖突解決中被使用。為此,示例性查詢可以為insertintoAccount_os(surrogateKey,accountld,customerld,balance)values(1000,"123","Jim",100)通過(guò)在初始狀態(tài)表中保存初始狀態(tài),在執(zhí)行更新時(shí)保留關(guān)于MBO的初始狀態(tài)的信息。盡管在執(zhí)行上述查詢后,插入初始狀態(tài)表中的MBO數(shù)據(jù)很可能與主表中的被下載的狀態(tài)數(shù)據(jù)相同,會(huì)發(fā)生能夠更改被下載的狀態(tài)數(shù)據(jù)的其他事件,例如從同步服務(wù)器110下載更新過(guò)的數(shù)據(jù)。在這樣的事件中,仍需要知曉該初始狀態(tài),該掛起的更新是基于該初始狀態(tài)的。根據(jù)本發(fā)明的一實(shí)施方式,若更新的MBO已經(jīng)具有相關(guān)的掛起狀態(tài),則更新現(xiàn)有的掛起的行,而不是插入新的行。此外,前述被創(chuàng)建的初始狀態(tài)將被保留,以作為用于隨后的掛起的更改的基礎(chǔ)。用于該更新的示例性查詢可以為updateAccountsetbalance=200,pendingChange="U",replayCounter=20002wheresurrogateKey=1000andpendingFlag=true根據(jù)本發(fā)明的一實(shí)施方式,在步驟510中,客戶端應(yīng)用程序104提交掛起的更新操作。根據(jù)本發(fā)明的一實(shí)施方式,如上述創(chuàng)建操作,將改變請(qǐng)求列隊(duì)至同步服務(wù)器,該同步服務(wù)器包括待應(yīng)用的掛起的更改。然后,replayPending列被設(shè)為指示客戶端應(yīng)用程序104正在等待對(duì)來(lái)自EIS114請(qǐng)求的響應(yīng),使用下述示例性的查詢updateAccountsetreplayPending=20002wheresurrogateKey=1000andpendingFlag=true通過(guò)設(shè)置replayPending域,能夠再次將該掛起的更改匹配至接收自EIS114的回調(diào)函數(shù),要么成功要么失敗。該方法在步驟514結(jié)束。圖6是根據(jù)本發(fā)明的一實(shí)施方式的示出了各步驟的流程圖600,其中,通過(guò)這些步驟,客戶端應(yīng)用程序104啟動(dòng)刪除操作。根據(jù)本發(fā)明的另一實(shí)施方式,刪除操作的特性在許多方面類似于更新操作,不同的是,該操作在pendingChange域中被標(biāo)記為針對(duì)刪除的“D”。當(dāng)使用更新時(shí),在步驟604中,客戶端應(yīng)用程序104調(diào)用刪除操作。其結(jié)果是,客戶端應(yīng)用程序104將該掛起的更改插入主表中,且在步驟606中適當(dāng)?shù)卦O(shè)置重放計(jì)數(shù)器。為此,示例性的查詢可以為insertintoAccount(surrogateKey,pendingFlag,accountld^customerld^balance,pendingChangerreplayCounter,replayPending,replayFailure)values(1000,true,100,mBnf20003,Or0)同樣地,在步驟608中,將對(duì)應(yīng)于初始狀態(tài)的數(shù)據(jù)插入初始狀態(tài)表中。為此,示例性的查詢可以為insertintoAccount_os(surrogateKey,accountld,customerld,balance)values(1000,"123","Jim",100)根據(jù)本發(fā)明的一實(shí)施方式,若被刪除的MBO已經(jīng)具有相關(guān)的掛起狀態(tài),則更新現(xiàn)有的掛起的行以指示刪除,而不是插入新行。此外,前述被創(chuàng)建的初始狀態(tài)將被保留,以作為用于隨后的掛起的更改的基礎(chǔ)。為此,該更新的示例性的查詢可以為updateAccountsetpendingChange="D",replayCounter=20003wheresurrogateKey=1000andpendingFlag=true根據(jù)本發(fā)明的一實(shí)施方式,在步驟610中,客戶端應(yīng)用程序104提交刪除操作,用于由EIS114通過(guò)同步服務(wù)器110處理。根據(jù)本發(fā)明的一實(shí)施方式,在此,如前所述,將更改請(qǐng)求列隊(duì)至同步服務(wù)器,該同步服務(wù)器包括待應(yīng)用的掛起的更改。然后,replayPending列被設(shè)為指示客戶端應(yīng)用程序104正在等待對(duì)來(lái)自EIS114請(qǐng)求的響應(yīng),使用下述示例性的查詢updateAccountsetreplayPending=20003wheresurrogateKey=1000andpendingFlag=true通過(guò)設(shè)置replayPending域,能夠再次將該掛起的更改匹配至從EISl14接收的回調(diào)函數(shù),要么成功要么失敗。該方法在步驟614結(jié)束。圖7是根據(jù)本發(fā)明的一實(shí)施方式的示出說(shuō)明各步驟的流程圖700,其中,通過(guò)這些步驟將客戶端應(yīng)用程序104設(shè)置為對(duì)重放操作回調(diào)函數(shù)進(jìn)行響應(yīng)。相關(guān)領(lǐng)域技術(shù)人員將領(lǐng)會(huì)到,使用除回調(diào)函數(shù)之外的其他通知方法也可產(chǎn)生類似的效果,在此示出的回調(diào)函數(shù)是示例性而非限制性的。根據(jù)本發(fā)明的一實(shí)施方式,該方法從步驟702開始,且進(jìn)行至步驟704,其中客戶端應(yīng)用程序104被告知重放操作的結(jié)果。如上所述,其可以是回調(diào)函數(shù)的形式。在上文中參考圖2B的流程圖250進(jìn)一步詳細(xì)討論了在EIS114處的重放和所產(chǎn)生的回調(diào)函數(shù)的生成。在步驟706中,確定特定的掛起的更改的重放是否成功。根據(jù)本發(fā)明的一實(shí)施方式,使接收成功的回調(diào)處理器上的回調(diào)函數(shù)與接收失敗的回調(diào)處理器上的回調(diào)函數(shù)這兩個(gè)步驟分開,從而進(jìn)行處理。若重放操作成功,則該方法運(yùn)行至步驟708,其中將對(duì)應(yīng)的掛起的行從主表中刪除。根據(jù)本發(fā)明的一實(shí)施方式,只有當(dāng)與成功重放相關(guān)的replayCounter值與掛起的行的replayPending值相匹配時(shí),才發(fā)生該刪除。根據(jù)本發(fā)明的另一實(shí)施方式,若不匹配,則忽略整個(gè)通知,以確保僅處理對(duì)最后提交的操作的響應(yīng)。用于刪除掛起的行的示例性查詢可以為deletefromAccountwheresurrogateKey=1000andpendingFlag=true此外,根據(jù)本發(fā)明的一實(shí)施方式,在步驟710中,從初始狀態(tài)表中刪除對(duì)應(yīng)的初始行。用于刪除該初始狀態(tài)行的示例性查詢可為deletefromAccount_oswheresurrogateKey=1000根據(jù)本發(fā)明的一實(shí)施方式,在步驟712中,通知成功的回調(diào)處理器。根據(jù)本發(fā)明的一實(shí)施方式,在由代碼生成器提供的、且由開發(fā)者并入客戶端應(yīng)用程序104中的代碼中執(zhí)行在流程圖700中概述的步驟??蛻舳藨?yīng)用程序104的開發(fā)者可具有額外的操作,其是否應(yīng)被執(zhí)行取決于是成功還是失敗,且可注冊(cè)成功或失敗的回調(diào)處理器,以執(zhí)行任何額外的處理。若已經(jīng)注冊(cè)了一個(gè)這樣的回調(diào)處理器,則在步驟712中通知,且在步驟718中將控制移交給用于額外處理的該回調(diào)處理器。根據(jù)本發(fā)明的一實(shí)施方式,相反地,若該重放操作失敗,該方法運(yùn)行至步驟714,其中,更新主表中的掛起的更改行,以反映該失敗。如重放成功,僅當(dāng)掛起的行的replayPending值和與成功重放相關(guān)的replayCounter值之間存在匹配時(shí)才執(zhí)行這一操作。根據(jù)本發(fā)明的另一實(shí)施方式,若不匹配,則忽略整個(gè)通知,以確保僅處理對(duì)最后提交的操作的響應(yīng)。相應(yīng)地,用于更新掛起的行的示例性查詢的內(nèi)容可以為updateAccountsetrepIayPending=O,repIayFailure=20001wheresurrogateKey=1000andpendingFlag=true根據(jù)本發(fā)明的一實(shí)施方式,在步驟716中,若注冊(cè)了一個(gè)回調(diào)處理器,則通知用于客戶端應(yīng)用程序104的失敗回調(diào)處理器。然后,在步驟718中,由客戶端應(yīng)用程序104響應(yīng)該回調(diào)來(lái)執(zhí)行任何額外的處理。該方法在步驟720結(jié)束。V查詢處理技術(shù)上述用于在同一主表中保持掛起狀態(tài)的方法(其中可駐留下載狀態(tài))允許同一MBO能夠有兩個(gè)現(xiàn)有的行,例如當(dāng)存在掛起的更新或刪除操作時(shí)。相應(yīng)地,針對(duì)主表所寫入的查詢必須對(duì)可能的復(fù)本作出解釋。例如,如果對(duì)現(xiàn)有的MBO記錄進(jìn)行更新,則除了不存在掛起的更改之外,客戶端應(yīng)用程序104的開發(fā)者會(huì)遭遇下述難點(diǎn)varoidAccounts=Account.findByCustomer(^123*1);varfirstAccount=oidAccounts;firstAccount,balance=firstAccount,balance+100|firstAccount.update();//thiscreatesapendingchange此時(shí),若運(yùn)行同一查詢來(lái)查找用戶號(hào)123的賬號(hào),其將返回下載狀態(tài)和掛起的更改兩者,除非開發(fā)者的任務(wù)為解決該難點(diǎn)。varnewAccounts=Account.findByCustomer("123");assertnewAccounts.Iength==OIdAccounts.length;除非進(jìn)行一些后臺(tái)處理,從而在由開發(fā)者運(yùn)行的程序接收到查詢結(jié)果之前過(guò)濾該查詢結(jié)果,否則上述聲明將失效。與其由開發(fā)者負(fù)責(zé)解決在下載狀態(tài)行與掛起的更改之間的區(qū)分問(wèn)題,不如透明地處理該問(wèn)題。根據(jù)本發(fā)明的一實(shí)施方式,使用代碼生成器重寫命名查詢,以確保查詢執(zhí)行的結(jié)果能消除復(fù)本。根據(jù)本發(fā)明的另一實(shí)施方式,這通過(guò)返回針對(duì)結(jié)果的掛起的行(若存在)或返回下載的狀態(tài)行而完成。這允許對(duì)存在掛起狀態(tài)的行進(jìn)行額外的更改,但不依賴于那個(gè)掛起狀態(tài)數(shù)據(jù),因此也不依賴于對(duì)應(yīng)于那個(gè)掛起狀態(tài)的初始狀態(tài)。通過(guò)遵循該方法,在后來(lái)的更新和刪除(其中存在掛起的更改)中不需要再次創(chuàng)建初始狀態(tài),因?yàn)樗鼈儽举|(zhì)上并不依賴于與第一掛起的更改相同的初始狀態(tài)。使用前述討論的命名查詢Account,findByCustomerselecta.*fromAccountawherea.customerld=:id這一執(zhí)行可返回兩行,其中accountld=前一不例的firstAccount.accountld。一行具有pendingFlag=false,且另一行具有pendingFlag=true。在這樣的情況下,由于上述原因,所期望的結(jié)果是具有pendingFlag=true的行。因此,可以通過(guò)使用針對(duì)初始狀態(tài)表的相關(guān)子查詢來(lái)重寫該查詢,例如,示例如下selecta.*fromAccountawhere(a.pendingFlag=trueornotexists(selecta_os·surrogateKeyfromAccount_osa_oswherea_os.surrogateKey=a.surrogateKey))anda.customerld=:id通過(guò)使用SQL外連語(yǔ)法實(shí)現(xiàn)上述查詢重寫。可替換地,可以針對(duì)主表而不是初始狀態(tài)表生成相關(guān)子查詢,但由于初始狀態(tài)表所包含的行可能少于主表,可以通過(guò)使用上述查詢而提高效率。相關(guān)領(lǐng)域技術(shù)人員將意識(shí)到,存在很多其他這樣的重寫,僅示例性地而非限制性地示出了上述查詢。根據(jù)本發(fā)明的另一實(shí)施方式,還可過(guò)濾與主表一起使用的動(dòng)態(tài)查詢,其中下載的狀態(tài)和掛起的更改可共存。在一非限制性示例實(shí)施方式中,客戶端應(yīng)用程序104的開發(fā)者可使用動(dòng)態(tài)查詢生成模塊來(lái)指定動(dòng)態(tài)查詢,如"query,where(AttributeTest.equal(attribute,testValue))〃,以測(cè)試查詢“where”句中的屬性值。根據(jù)本發(fā)明的另一實(shí)施方式,所產(chǎn)生的生成查詢被自動(dòng)設(shè)計(jì)為選擇相應(yīng)的掛起的更改(若存在)或下載的狀態(tài),且因此不需要主動(dòng)重寫該查詢。VI基于消息的同步前面提及的由客戶端應(yīng)用程序104通過(guò)同步服務(wù)器110發(fā)送至EIS114且由EIS114通過(guò)同步服務(wù)器110發(fā)送至客戶端應(yīng)用程序104的CUD消息可通過(guò)在此描述的消息系統(tǒng)通信。該消息同步方法被設(shè)計(jì)為支持前文中描述的掛起狀態(tài)管理技術(shù),且被設(shè)計(jì)為有效使用客戶端資源和網(wǎng)絡(luò)連接。然而,相關(guān)領(lǐng)域技術(shù)人員將意識(shí)到,在此描述的消息技術(shù)對(duì)于其他環(huán)境的適應(yīng)性,所提供的對(duì)具有掛起狀態(tài)管理的基于消息的同步的使用是示例性而非限制性的?;谙⒌耐?"MBS")提供了異步地執(zhí)行同步的能力。這意味著,例如,移動(dòng)設(shè)備102不需要為了執(zhí)行完全同步而一直等到其與同步服務(wù)器110建立連接的時(shí)刻,而是在連接可用的時(shí)候間歇地從同步服務(wù)器110接收消息或向其發(fā)送消息。根據(jù)本發(fā)明的一實(shí)施方式,利用Jave消息服務(wù)("JMS")作為通信通道。根據(jù)本發(fā)明的另一實(shí)施方式,該消息是javax.jms.TextMessage類型的消息,其中文本內(nèi)容為JavaScript對(duì)象符號(hào)("JS0N")。相關(guān)領(lǐng)域技術(shù)人員將領(lǐng)會(huì)到,可利用其它的通信手段,且在此提供的在JMS上對(duì)JSON的使用是示例性而非限制性的。根據(jù)本發(fā)明的一實(shí)施方式,消息被發(fā)送至JMS隊(duì)列(例如mbs.N),其中N不大于同步服務(wù)器110中有效隊(duì)列的數(shù)量。可使用多個(gè)隊(duì)列,以允許同步服務(wù)器110處理來(lái)自多個(gè)客戶端的同步請(qǐng)求。所述隊(duì)列被設(shè)置為確保至少一次循序傳送。對(duì)于相關(guān)領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見的是,通過(guò)多次使用上述掛起狀態(tài)管理技術(shù)來(lái)應(yīng)用消息并不會(huì)導(dǎo)致不利影響,且因此其更實(shí)際地確保了至少一次傳送,而非精確地一次傳送。根據(jù)本發(fā)明的一實(shí)施方式,所述消息被指定為用于客戶端至服務(wù)器或服務(wù)至客戶端的通信中。每個(gè)消息指定一組報(bào)頭,報(bào)頭定義待發(fā)送的值與該消息的結(jié)合。對(duì)相關(guān)領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見的是,在此示出的精確消息和所述報(bào)頭是示例性的而非限制性的。例如,消息所使用的報(bào)頭可多于或少于在這些示例性實(shí)施方式中示出的報(bào)頭,或完全使用不同組的報(bào)頭。此外,盡管在此示出的報(bào)頭和消息旨在通過(guò)JMS使用,相關(guān)領(lǐng)域技術(shù)人員將領(lǐng)會(huì)到,可以在其他消息傳送裝置中使用這些技術(shù)。iJMS報(bào)頭的用法權(quán)利要求1.一種方法,其包括執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱;針對(duì)所述更新的訂閱運(yùn)行所述下載光標(biāo),以生成結(jié)果行;以及在輸入消息中將所述結(jié)果行發(fā)送至客戶端設(shè)備。2.如權(quán)利要求I所述的方法,還包括生成用于所述業(yè)務(wù)對(duì)象的緩存表,其中,針對(duì)所述緩存表運(yùn)行所述下載光標(biāo)和通知查詢。3.如權(quán)利要求I所述的方法,還包括針對(duì)所述更新的訂閱,更新最后的下載時(shí)間。4.如權(quán)利要求I所述的方法,其中,所述通知查詢被設(shè)置為基于識(shí)別訂閱來(lái)確定所述更新的訂閱,其中,所述訂閱弓I用至少一個(gè)更新的實(shí)體。5.如權(quán)利要求I所述的方法,還包括創(chuàng)建批次消息,所述批次消息包括輸入消息集,所述創(chuàng)建批次消息包括確定緩沖區(qū)是否具有用于來(lái)自所述輸入消息集的下一個(gè)輸入消息的額外空間,若存在額外的空間,則將所述下一個(gè)輸入消息添加至所述緩沖區(qū);當(dāng)存在額外的空間時(shí),重復(fù)上述確定步驟;以及發(fā)送所述批次消息。6.如權(quán)利要求I所述的方法,還包括將同步請(qǐng)求發(fā)送至客戶端設(shè)備。7.一種計(jì)算機(jī)可讀介質(zhì),其具有存儲(chǔ)于其上的計(jì)算機(jī)可執(zhí)行指令,如果由計(jì)算設(shè)備執(zhí)行,則所述計(jì)算機(jī)可執(zhí)行指令引起所述計(jì)算設(shè)備實(shí)施包括下述步驟的方法執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱;針對(duì)上述更新的訂閱運(yùn)行所述下載光標(biāo),以生成結(jié)果行;以及在輸入消息中將所述結(jié)果行發(fā)送至客戶端設(shè)備。8.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,所述方法還包括生成用于所述業(yè)務(wù)對(duì)象的緩存表,其中,針對(duì)所述緩存表運(yùn)行所述下載光標(biāo)和通知查詢。9.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,所述方法還包括針對(duì)所述更新的訂閱,更新最后的下載時(shí)間。10.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,其中,所述通知查詢被設(shè)置為基于識(shí)別訂閱來(lái)確定所述更新的訂閱,所述訂閱引用至少一個(gè)更新的實(shí)體。11.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,所述方法還包括創(chuàng)建批次消息,所述批次消息包括輸入消息集,所述創(chuàng)建批次消息包括確定緩沖區(qū)是否具有用于來(lái)自所述輸入消息集的下一個(gè)輸入消息的額外空間,若存在額外的空間,則將下一個(gè)輸入消息添加至所述緩沖區(qū);當(dāng)存在額外的空間時(shí),重復(fù)上述確定步驟;以及發(fā)送所述批次消息。12.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,所述方法還包括將同步請(qǐng)求發(fā)送至客戶端設(shè)備。13.—種系統(tǒng),其包括存儲(chǔ)器,其被設(shè)置為存儲(chǔ)模塊,所述模塊包括執(zhí)行模塊,其被設(shè)置為執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以識(shí)別更新的訂閱,運(yùn)行模塊,其被設(shè)置為針對(duì)所述更新的訂閱運(yùn)行所述下載光標(biāo),以生成結(jié)果行,以及發(fā)送模塊,其被設(shè)置為在輸入消息中將所述結(jié)果行發(fā)送至客戶端設(shè)備;所述系統(tǒng)還包括一個(gè)或者多個(gè)處理器,其被設(shè)置為處理所述模塊。14.一種方法,其包括從客戶端接收消息,所述消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令;搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于所述客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的所述消息之前是否已被接收過(guò);一旦確定所述消息之前未被接收過(guò),則處理所述消息;以及將客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到所述對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表中。15.如權(quán)利要求14所述的方法,還包括針對(duì)企業(yè)系統(tǒng)重放所述重放指令。16.如權(quán)利要求14所述的方法,其中,通過(guò)順序傳送所述消息以及應(yīng)用所述對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,確保至少一次傳送。17.一種計(jì)算機(jī)可讀介質(zhì),其具有存儲(chǔ)于其上的計(jì)算機(jī)可執(zhí)行指令,如果由計(jì)算設(shè)備執(zhí)行,則所述計(jì)算機(jī)可執(zhí)行指令引起所述計(jì)算設(shè)備實(shí)施包括下述步驟的方法接收來(lái)自客戶端的消息,所述消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令;搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于所述客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的所述消息之前是否已被接收過(guò);一旦確定所述消息之前未被接收過(guò),則處理所述消息;以及將所述客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到所述對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表中。18.如權(quán)利要求17所述的計(jì)算機(jī)程序產(chǎn)品,所述方法還包括針對(duì)企業(yè)系統(tǒng)重放所述重放指令。19.如權(quán)利要求17所述的計(jì)算機(jī)程序產(chǎn)品,其中,通過(guò)順序傳送所述消息以及應(yīng)用所述對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,確保至少一次傳送。20.—種系統(tǒng),其包括存儲(chǔ)器,所述存儲(chǔ)器被設(shè)置為保存模塊,所述模塊包括接收模塊,其被設(shè)置為從客戶端接收消息,所述消息包括客戶端標(biāo)識(shí)符、消息標(biāo)識(shí)符和重放指令,搜索模塊,其被設(shè)置為搜索對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表,以確定對(duì)應(yīng)于所述客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符的所述消息之前是否已被接收過(guò),一旦確定所述消息之前未被接收過(guò),則處理所述消息,以及添加模塊,其被設(shè)置為將所述客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符添加到所述對(duì)應(yīng)于之前接收到的消息的客戶端標(biāo)識(shí)符和消息標(biāo)識(shí)符對(duì)的列表中;所述系統(tǒng)還包括一個(gè)或者多個(gè)處理器,其被設(shè)置為處理所述模塊。全文摘要本申請(qǐng)?zhí)峁┝艘环N系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品,用于執(zhí)行從用于業(yè)務(wù)對(duì)象的下載光標(biāo)中獲取的通知查詢,以確定更新的訂閱,從而在輸入消息中將更新提供至客戶端設(shè)備。提供額外的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品,用于確保消息的至少一次傳送。文檔編號(hào)G06F9/44GK102741829SQ201080060198公開日2012年10月17日申請(qǐng)日期2010年12月14日優(yōu)先權(quán)日2009年12月30日發(fā)明者埃文·愛爾蘭,大衛(wèi)·克里格,張國(guó)平,赫摩爾·潘迪亞,邁克爾·弘申請(qǐng)人:賽貝斯股份有限公司