一種無侵入式表單數(shù)據(jù)變化記錄和回溯的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是涉及一種無侵入式表單數(shù)據(jù)變化記錄和回溯的方法及裝置。
【背景技術(shù)】
[0002]互聯(lián)網(wǎng)應(yīng)用,比如百度、google等,業(yè)務(wù)邏輯相對簡單,當(dāng)用戶的并發(fā)訪問量巨大。為了進行分析,改進算法,需要對各種日志信息進行記錄,包括用戶的歷史訪問記錄、服務(wù)器的信息記錄、數(shù)據(jù)庫的信息記錄等。這些日志信息的記錄已有成熟的開源工具進行處理,比如Apache Flume,提供了高可用的、高可靠的、分布式的海量日志采集、聚合和傳輸?shù)墓﨣。
[0003]對于具有復(fù)雜業(yè)務(wù)邏輯的業(yè)務(wù)系統(tǒng)來說,不需要特別關(guān)注于日志信息的記錄,但是內(nèi)部的業(yè)務(wù)表單數(shù)據(jù)變化是業(yè)務(wù)邏輯的一部分,需要對其進行記錄和回溯。比如,在軟件過程管理系統(tǒng)中,軟件需求的變化是需要被記錄的,并且需要能夠回溯到之前的版本查看詳細(xì)內(nèi)容。
[0004]業(yè)務(wù)表單,也可以叫電子表單,是采用信息化的手段對現(xiàn)實世界中紙張表單(比如請假單、報銷單)的抽象。它是應(yīng)用系統(tǒng)中進行數(shù)據(jù)采集和展示的主要方式和手段,主要包含三部分內(nèi)容:
[0005](I)表單標(biāo)簽:這里面包含了處理表單數(shù)據(jù)所用CGI/JSP/ASP等程序的URL以及數(shù)據(jù)提交到服務(wù)器的方法。
[0006](2)表單域:包含了文本框、密碼框、隱藏域、多行文本框、復(fù)選框、單選框、下拉選擇框和文件上傳框等。
[0007](3)表單按鈕:包括提交按鈕、復(fù)位按鈕和一般按鈕;用于將數(shù)據(jù)傳送到服務(wù)器上的CGI/JSP/ASP等腳本或者取消輸入,還可以用表單按鈕來控制其他定義了處理腳本的處理工作。其中提交按鈕就對應(yīng)著表單的新建、修改、刪除等操作。
[0008]但是,不同的業(yè)務(wù)表單數(shù)據(jù)的結(jié)構(gòu)是完全不同的,在現(xiàn)有的技術(shù)中,一般都是針對具體的業(yè)務(wù)變化編寫相應(yīng)的邏輯來進行歷史變化的控制,而缺乏一種通用的、支持任意業(yè)務(wù)表單類型的歷史記錄和回溯的方法,現(xiàn)有技術(shù)還存在業(yè)務(wù)系統(tǒng)開發(fā)效率低,缺陷產(chǎn)生率高的問題。
【發(fā)明內(nèi)容】
[0009]有鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明所要解決的技術(shù)問題是提供一種通用的、支持任意表單類型的歷史記錄和回溯方法。
[0010]為實現(xiàn)上述目的,本發(fā)明提供了一種無侵入式表單數(shù)據(jù)變化記錄和回溯的方法,包括表單數(shù)據(jù)變化記錄的步驟和/或表單數(shù)據(jù)變化回溯的步驟;
[0011]所述表單數(shù)據(jù)變化記錄按以下步驟執(zhí)行:
[0012]S101、設(shè)置橫切監(jiān)控點;
[0013]S102、當(dāng)指定橫切監(jiān)控點發(fā)生方法調(diào)用時,當(dāng)業(yè)務(wù)對象發(fā)生變化時,截取其中發(fā)生變化的業(yè)務(wù)對象α,獲取當(dāng)前數(shù)據(jù)庫操作事務(wù)trans,并將后續(xù)的所有數(shù)據(jù)庫操作加入到該事務(wù)中;
[0014]S103、根據(jù)業(yè)務(wù)對象α的id將未變化前的業(yè)務(wù)對象副本β從數(shù)據(jù)庫中獲取出來;所述業(yè)務(wù)對象副本β的id與所述業(yè)務(wù)對象α相同;
[0015]S104、判斷業(yè)務(wù)對象變化類型;當(dāng)業(yè)務(wù)對象變化類型為變更業(yè)務(wù)對象時,執(zhí)行步驟S105 ;當(dāng)業(yè)務(wù)對象變化類型為刪除業(yè)務(wù)對象時,執(zhí)行步驟S106 ;
[0016]S105、生成類型存儲庫對象,其中的變化類型設(shè)置為“修改”,并存儲到類型存儲庫單元,并且對比α與β的所有屬性值,將其中發(fā)生變化的屬性值生成屬性存儲庫對象集合并進行存儲,然后執(zhí)行步驟S107 ;
[0017]S106、生成類型存儲庫對象并存儲到類型存儲庫單元103,其中的變化類型設(shè)置為“刪除”,將β的所有屬性值生成屬性存儲庫對象集合并進行存儲,然后執(zhí)行步驟S107;
[0018]S107、繼續(xù)執(zhí)行橫切監(jiān)控點;如果以上數(shù)據(jù)庫訪問失敗,則整個操作回滾,保證了數(shù)據(jù)庫中不會存在“臟數(shù)據(jù)”;
[0019]所述表單數(shù)據(jù)變化回溯按以下步驟執(zhí)行:
[0020]S201、獲取業(yè)務(wù)對象類型和時間點,查詢指定的業(yè)務(wù)對象類型,以及時間大于等于指定時間點的所有類型存儲對象信息集合historyList,并獲取所述對象信息集合historyList對應(yīng)的屬性存儲對象集合properties ;
[0021]S202、查詢到當(dāng)前業(yè)務(wù)對象信息,根據(jù)其對象信息集合historyList及其對應(yīng)的屬性存儲對象集合properties,往前倒推指定時間點的業(yè)務(wù)對象屬性鍵值對;
[0022]S203、將屬性鍵值對組裝成業(yè)務(wù)對象并返回。
[0023]較佳的,所述步驟S203中,屬性鍵值對通過Java反射機制組裝成業(yè)務(wù)對象。
[0024]較佳的,所述步驟S203中,屬性鍵值對通過cglib的字節(jié)碼生成技術(shù)組裝成業(yè)務(wù)對象。
[0025]本發(fā)明要解決的另一技術(shù)問題是提供一種通用的、支持任意表單類型的歷史記錄和回溯裝置。
[0026]為實現(xiàn)上述目的,本發(fā)明還提供了一種無侵入式表單數(shù)據(jù)變化記錄和回溯的裝置,包括表單數(shù)據(jù)變化記錄單元和/或表單數(shù)據(jù)變化回溯單元;
[0027]所述表單數(shù)據(jù)變化記錄單元包括變化監(jiān)控單元、未變化對象副本獲取單元、第一類型存儲庫單元和第一屬性存儲庫單元;
[0028]所述變化監(jiān)控單元用于監(jiān)控業(yè)務(wù)對象是否發(fā)生變化;并判斷業(yè)務(wù)對象變化類型;
[0029]當(dāng)業(yè)務(wù)對象變化類型為變更業(yè)務(wù)對象時,生成類型存儲庫對象,其中的變化類型設(shè)置為“修改”,并存儲到類型存儲庫單元,并且將發(fā)生變化的業(yè)務(wù)對象與發(fā)生變化前的業(yè)務(wù)對象副本的所有屬性值進行對比,將其中發(fā)生變化的屬性值生成屬性存儲庫對象集合并進行存儲到第一屬性存儲庫單元,然后繼續(xù)橫切監(jiān)控點;當(dāng)業(yè)務(wù)對象變化類型為刪除業(yè)務(wù)對象時,生成類型存儲庫對象并存儲到第一類型存儲庫單元,其中的變化類型設(shè)置為“刪除”,將發(fā)生變化前的業(yè)務(wù)對象副本的所有屬性值生成屬性存儲庫對象集合并進行存儲到第一屬性存儲庫單元,然后繼續(xù)橫切監(jiān)控點;
[0030]所述未變化對象副本獲取單元用于根據(jù)發(fā)生變化的業(yè)務(wù)對象的id將未變化前的業(yè)務(wù)對象副本從數(shù)據(jù)庫中獲取出來;
[0031]所述第一類型存儲庫單元用于存儲業(yè)務(wù)對象的類型;
[0032]所述第一屬性存儲庫單元用于存儲業(yè)務(wù)對象的屬性;
[0033]所述表單數(shù)據(jù)變化回溯單元包括歷史查詢單元、第二類型存儲庫單元、第二屬性存儲庫單元和對象組裝單元;
[0034]所述歷史查詢單元用于傳入業(yè)務(wù)對象類型和時間,查詢指定的業(yè)務(wù)對象類型,以及時間大于等于指定時間點的所有類型存儲對象信息集合h i s t ο r y L i s t,根據(jù)查詢到的當(dāng)前業(yè)務(wù)對象信息,通過其對象信息集合historyList及其對應(yīng)的屬性存儲對象集合properties,往前倒推指定時間點的業(yè)務(wù)對象屬性鍵值對;
[0035]所述第二類型存儲庫單元用于存儲指定的業(yè)務(wù)對象類型,以及時間大于等于指定時間點的所有類型存儲對象信息集合historyList ;
[0036]所述第二屬性存儲庫單元用于存儲所述對象信息集合historyList對應(yīng)的屬性存儲對象集合properties ;
[0037]所述對象組裝單元用于將屬性鍵值對組裝成業(yè)務(wù)對象并返回。
[0038]較佳的,所述對象組裝單元通過Java反射機制將屬性鍵值對組裝成業(yè)務(wù)對象。
[0039]較佳的,所述對象組裝單元通過cglib的字節(jié)碼生成技術(shù)將屬性鍵值對組裝成業(yè)務(wù)對象。
[0040]本發(fā)明的有益效果是:
[0041]I)、在不改動原有代碼和數(shù)據(jù)庫表的情況下,采用統(tǒng)一的方式對任意業(yè)務(wù)對象的修改和刪除操作的變化情況進行記錄;
[0042]2)、任意業(yè)務(wù)對象的歷史變化的回溯查詢可以采用統(tǒng)一的接口服務(wù)進行;
[0043]3)、提高了業(yè)務(wù)系統(tǒng)開發(fā)的效率,降低了缺陷產(chǎn)生率。
【附圖說明】
[0044]圖1是無侵入式表單數(shù)據(jù)變化記錄的方法流程示意圖。
[0045]圖2是無侵入式表單數(shù)據(jù)變化回溯的方法流程示意圖。
[0046]圖3是無侵入式表單數(shù)據(jù)變化記錄裝置的結(jié)構(gòu)示意圖。
[004