傳統(tǒng)的分布對(duì)象技術(shù)分別有OMG的CORBA、 Microsoft的DCOM 以及SUN的RMI。然而CORBA缺少方便的開(kāi)發(fā)工具和強(qiáng)有力的廠商支持,門檻稍高,入門較困難;DCOM 跨平臺(tái)性較差;RMI對(duì)多語(yǔ)言融合的支持卻很弱。同時(shí),這幾種技術(shù)都有相似的缺陷:①CORBA、DCOM和RMI雖然能調(diào)用實(shí)現(xiàn)的系統(tǒng),但均要求服務(wù)器和客戶端必須緊密耦合,并且體系結(jié)構(gòu)相同;②CORBA、DCOM和RMI依賴于特定的對(duì)象模型協(xié)議,目前只在企業(yè)內(nèi)部使用廣泛,都不太適合在Internet環(huán)境下進(jìn)行多源異構(gòu)數(shù)據(jù)庫(kù)融合的設(shè)計(jì)開(kāi)發(fā)。
Web服務(wù)的出現(xiàn)滿足了信息化服務(wù)所要求的基本功能,它是微軟.NET 框架下多源異構(gòu)應(yīng)用的典型方案,并在中間件基礎(chǔ)上,采用XML和Web服務(wù)技術(shù)實(shí)現(xiàn)了各異構(gòu)數(shù)據(jù)庫(kù)的融合,提供了一種全新的以松耦合的方式在Internet環(huán)境下部署分布式應(yīng)用的解決方案。任何操作系統(tǒng)、任何語(yǔ)言編寫(xiě)的客戶端都能夠訪問(wèn)服務(wù)器提供的Web服務(wù),其客戶端與服務(wù)器端之間以XML消息作為聯(lián)系,解決異構(gòu)數(shù)據(jù)庫(kù)集成的難題,彌補(bǔ)了CORBA、DCOM和RMI方法的不足。本文提出的基于Web服務(wù)分布式異構(gòu)數(shù)據(jù)庫(kù)B/S三層架構(gòu)的智能集成方法優(yōu)化了傳統(tǒng)的集成方法和數(shù)據(jù)模式映射,同時(shí)還利用Spring 框架的Quartz定時(shí)任務(wù)調(diào)度實(shí)現(xiàn)集成系統(tǒng)的智能更新,整個(gè)系統(tǒng)具有實(shí)時(shí)性、可擴(kuò)展性、高響應(yīng)性等特點(diǎn)。
本文的第二部分介紹Web服務(wù)和異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng),第三部分提出基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫(kù)集成系統(tǒng)總體架構(gòu)和各功能模塊,第四部分對(duì)描述系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),第五部分進(jìn)行測(cè)試驗(yàn)證,第六部分對(duì)本文進(jìn)行總結(jié)。
1 相關(guān)理論與技術(shù)概述
1.1 Web服務(wù)體系結(jié)構(gòu)
Web服務(wù)是一種面向服務(wù)的分布式計(jì)算體系結(jié)構(gòu),相比傳統(tǒng)的分布對(duì)象技術(shù)和集成技術(shù),能夠提供面向Internet的標(biāo)準(zhǔn)程序接口,具有跨防火墻、軟件和數(shù)據(jù)重用、良好的封裝性、松散耦合性和高度可集成性等優(yōu)點(diǎn)[4]。
Web服務(wù)作為一個(gè)新型的分布式計(jì)算模型,具有自包容和自描述的優(yōu)點(diǎn)。由三個(gè)角色和三個(gè)操作組成。三個(gè)角色分別為服務(wù)提供者、服務(wù)請(qǐng)求者和服務(wù)代理,三個(gè)操作為發(fā)布、查找和綁定。Web服務(wù)的關(guān)鍵技術(shù)包括SOAP(Simple Object Access Protoco1)、WSDL(Web Service Description Language)、UDDI(Web Service Description Language)、XML。XML是Web服務(wù)的技術(shù)基礎(chǔ),Web服務(wù)中各種信息的描述都是基于XML。SOAP提供了一種通信機(jī)制,它是分布式環(huán)境中交換信息的通用協(xié)議,保證了Web服務(wù)和其它應(yīng)用程序之間可靠通信;WSDL是以XML的格式來(lái)描述Web服務(wù)。UDDL用來(lái)創(chuàng)建Web服務(wù)注冊(cè)中心,它是Web服務(wù)注冊(cè)和發(fā)現(xiàn)的技術(shù)規(guī)范[6]。Web服務(wù)體系結(jié)構(gòu)如圖1。
1.2 異構(gòu)數(shù)據(jù)庫(kù)
圖1 Web服務(wù)結(jié)構(gòu)
異構(gòu)數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)共享的同時(shí),每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)保持著自己的完整性、自治性和安全性。異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的異構(gòu)性主要表現(xiàn)為數(shù)據(jù)異構(gòu)、系統(tǒng)異構(gòu)和語(yǔ)義異構(gòu)[5]。
(1)數(shù)據(jù)異構(gòu)。異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)異構(gòu)表現(xiàn)在不同數(shù)據(jù)源對(duì)同一數(shù)據(jù)有不同的定義,例如格式、數(shù)據(jù)類型或精度等等。比如在SQL Server中用int、float、double等類型,而在Oracle中用Number統(tǒng)一表示數(shù)值型的屬性。因此在異構(gòu)數(shù)據(jù)庫(kù)之間共享數(shù)據(jù)時(shí),需要對(duì)數(shù)據(jù)異構(gòu)加以考慮。
(2)系統(tǒng)異構(gòu): 異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中系統(tǒng)異構(gòu)主要指數(shù)據(jù)所依賴的應(yīng)用系統(tǒng)存在的差異,比如硬件平臺(tái)(大型機(jī)、PC機(jī))、數(shù)據(jù)庫(kù)管理系統(tǒng)(MySQL、SQL Server) 和操作系統(tǒng)(Unix、Windows)等的不同。
(3)語(yǔ)義異構(gòu): 語(yǔ)義異構(gòu)是指屬性含義相同,但是屬性名的接口模式不同。從簡(jiǎn)單的命名沖突(如同名異義,同義異名)到復(fù)雜的結(jié)構(gòu)語(yǔ)義沖突,語(yǔ)義異構(gòu)在數(shù)據(jù)庫(kù)中主要表現(xiàn)在屬性異構(gòu)。比如屬性“姓名”,有的用“Name”,也有的用“XingMing”,屬性名“type”,有的表示車型,也有的表示食物類型等。數(shù)據(jù)庫(kù)的語(yǔ)義異構(gòu)是數(shù)據(jù)集成過(guò)程中需要解決的關(guān)鍵問(wèn)題。
1.3 異構(gòu)數(shù)據(jù)庫(kù)集成的常用技術(shù)
異構(gòu)數(shù)據(jù)集成的常用技術(shù)為:聯(lián)邦數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù)和中間件方式。
(1)聯(lián)邦數(shù)據(jù)庫(kù)采用模式集成的方法,其基本思想是在數(shù)據(jù)庫(kù)系統(tǒng)集成時(shí),從各異構(gòu)數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)源的數(shù)據(jù)視圖,并將其集成為全局模式。用戶就可以直接通過(guò)全局模式透明地訪問(wèn)各數(shù)據(jù)源中的數(shù)據(jù)。各數(shù)據(jù)源間互相獨(dú)立,通過(guò)數(shù)據(jù)轉(zhuǎn)換接口實(shí)現(xiàn)相互訪問(wèn)。聯(lián)邦數(shù)據(jù)庫(kù)優(yōu)點(diǎn)是容易操作實(shí)現(xiàn),缺點(diǎn)是當(dāng)異構(gòu)數(shù)據(jù)源變化時(shí),種類復(fù)雜,工作量大,擴(kuò)展性差,僅適合數(shù)據(jù)源較少的情況下使用[8]。
(2)數(shù)據(jù)倉(cāng)庫(kù)概念始于上世紀(jì) 80 年代中期,其基本思想是將各個(gè)數(shù)據(jù)源的數(shù)據(jù)復(fù)制到同一數(shù)據(jù)倉(cāng)庫(kù)中,用戶可以直接訪問(wèn)數(shù)據(jù)倉(cāng)庫(kù)進(jìn)行集中查詢獲取數(shù)據(jù)。數(shù)據(jù)倉(cāng)庫(kù)優(yōu)點(diǎn)是便于控制,容易處理,缺點(diǎn)是當(dāng)數(shù)據(jù)信息重復(fù)存儲(chǔ)時(shí),無(wú)法將數(shù)據(jù)源的更新信息及時(shí)準(zhǔn)確地反映到數(shù)據(jù)倉(cāng)庫(kù)中。數(shù)據(jù)倉(cāng)庫(kù)僅適合數(shù)據(jù)源比較穩(wěn)定,并且數(shù)據(jù)訪問(wèn)較頻繁的情況,不適合于用戶實(shí)時(shí)查詢。
(3)基于中間件的數(shù)據(jù)集成模式是目前最典型的數(shù)據(jù)集成方法。中間件由中介器(Mediator)和包裝器(Wrapper)組成。中間件方式并不改變數(shù)據(jù)原來(lái)的存儲(chǔ)方式和位置,它為異構(gòu)數(shù)據(jù)源提供一個(gè)統(tǒng)一的虛擬視圖[7]。中間件模型適用于變化頻繁、結(jié)構(gòu)多樣且數(shù)據(jù)源較多的情況。本文的系統(tǒng)結(jié)構(gòu)就是采用中間件的方式。
2 基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)集成系統(tǒng)
2.1 用戶需求分析
在該異構(gòu)數(shù)據(jù)查詢系統(tǒng)中,共有三種用戶參與,分別是各異構(gòu)數(shù)據(jù)庫(kù)管理員、集成系統(tǒng)管理員和普通用戶。其中集成系統(tǒng)管理員享有最高權(quán)限,可以創(chuàng)建和管理用戶、審查和批準(zhǔn)需要加入的異構(gòu)數(shù)據(jù)源、獲取異構(gòu)數(shù)據(jù)源的元數(shù)據(jù)、合成并管理全局?jǐn)?shù)據(jù)庫(kù)模式等;各異構(gòu)數(shù)據(jù)庫(kù)管理員能夠登陸數(shù)據(jù)源注冊(cè)系統(tǒng),根據(jù)需要填寫(xiě)注冊(cè)信息,選擇需要共享的表和字段并注冊(cè);普通用戶只能登陸查詢系統(tǒng),根據(jù)相關(guān)的查詢權(quán)限對(duì)數(shù)據(jù)進(jìn)行查詢。系統(tǒng)用戶如圖 3所示。
圖 2 系統(tǒng)用戶
2.2 體系結(jié)構(gòu)
Web服務(wù)集成中間件系統(tǒng)體系自下而上包括數(shù)據(jù)庫(kù)層、數(shù)據(jù)集成層和統(tǒng)一應(yīng)用層。其中,底層的各個(gè)異構(gòu)數(shù)據(jù)源構(gòu)成了系統(tǒng)的數(shù)據(jù)庫(kù)層;數(shù)據(jù)集成層采用中間件技術(shù),封裝了異構(gòu)數(shù)據(jù)庫(kù)集成系統(tǒng)的業(yè)務(wù)邏輯;各種應(yīng)用程序和對(duì)應(yīng)的訪問(wèn)接口構(gòu)成了系統(tǒng)的統(tǒng)一應(yīng)用層。數(shù)據(jù)庫(kù)智能集成系統(tǒng)框架圖如圖2所示。
圖3 基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫(kù)智能集成系統(tǒng)框架圖
該系統(tǒng)采用 B/S模式,構(gòu)成了客戶/服務(wù)器三層架構(gòu)。采用這種設(shè)計(jì)有以下幾種優(yōu)勢(shì):
(1)安裝升級(jí)簡(jiǎn)便。通過(guò)瀏覽器訪問(wèn)數(shù)據(jù)庫(kù)簡(jiǎn)化了客戶端。在升級(jí)軟件的時(shí)候,不需要對(duì)客戶端升級(jí)。
(2)易擴(kuò)展維護(hù)。所有應(yīng)用程序均在服務(wù)器端,開(kāi)發(fā)維護(hù)過(guò)程可集中在服務(wù)器端,不需要考慮數(shù)據(jù)庫(kù)端和客戶端。
(3)可移植性強(qiáng)。本文采用JavaBean技術(shù),可以在不同Web服務(wù)器、不同操作系統(tǒng)上運(yùn)行,而且可以在不同的平臺(tái)間移植,不需要重新編譯。
(4)可靠性強(qiáng)。多層體系結(jié)構(gòu)可以有效地優(yōu)化系統(tǒng)總體性能,提高系統(tǒng)的可靠性和伸縮性。
(5)數(shù)據(jù)智能更新快。綜合包裝器中的智能更新模塊采用Spring框架,該方法中Quartz任務(wù)定時(shí)掃描更新各異構(gòu)數(shù)據(jù)庫(kù)上傳的XML描述文檔,充分保證了抽象數(shù)據(jù)表的實(shí)時(shí)性、智能性和有效性。
2.3 功能模塊設(shè)計(jì)
(1)客戶端功能模塊
統(tǒng)一應(yīng)用層也就是用戶界面,即異構(gòu)數(shù)據(jù)庫(kù)集成系統(tǒng)的使用者。用戶可以通過(guò)數(shù)據(jù)集成層來(lái)訪問(wèn)異構(gòu)數(shù)據(jù)庫(kù)的共享數(shù)據(jù)資源。本系統(tǒng)不需安裝客戶端軟件,直接利用瀏覽器作為客戶端用戶的界面,可以把XML表示的數(shù)據(jù)轉(zhuǎn)換成為Html格式,直觀方便,非常適合異構(gòu)數(shù)據(jù)集成系統(tǒng)[8]。
(2)服務(wù)器端功能模塊
本文采用Tomcat作為Web服務(wù)器。Tomcat作為一個(gè)優(yōu)秀的開(kāi)源Web應(yīng)用服務(wù)器,是Apache Jakarta的子項(xiàng)目之一。其性能穩(wěn)定、技術(shù)先進(jìn),而且免費(fèi)開(kāi)源,因而深受軟件開(kāi)發(fā)商和Java愛(ài)好者的認(rèn)可,Web應(yīng)用服務(wù)器目前使用廣泛。
數(shù)據(jù)庫(kù)服務(wù)器主要是提供實(shí)際的數(shù)據(jù)管理功能,為數(shù)據(jù)站點(diǎn)存儲(chǔ)數(shù)據(jù)集。該系統(tǒng)主要支持的數(shù)據(jù)庫(kù)服務(wù)器有Oracle、SQL Server、MySql、Access 等。
(3)數(shù)據(jù)模式轉(zhuǎn)換功能模塊
數(shù)據(jù)集成層是實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)中數(shù)據(jù)轉(zhuǎn)換的核心,目的是訪問(wèn)各個(gè)數(shù)據(jù)源,集成數(shù)據(jù)源信息,協(xié)調(diào)各數(shù)據(jù)源間信息。數(shù)據(jù)集成層在各局部數(shù)據(jù)提供的共享數(shù)據(jù)的基礎(chǔ)之上建立一個(gè)全局的虛擬視圖,并不存儲(chǔ)實(shí)際的數(shù)據(jù)。具體包括:元數(shù)據(jù)DB、元數(shù)據(jù)管理器、綜合包裝器、中介器、應(yīng)用層訪問(wèn)統(tǒng)一接口、異構(gòu)數(shù)據(jù)庫(kù)統(tǒng)一接口,下面分別對(duì)各模塊加以介紹。
元數(shù)據(jù)DB負(fù)責(zé)儲(chǔ)存各異構(gòu)數(shù)據(jù)庫(kù)的元數(shù)據(jù)庫(kù)信息。元數(shù)據(jù)庫(kù)信息包括注冊(cè)信息、連接信息URL、各元數(shù)據(jù)庫(kù)用戶與全局用戶的匹配關(guān)系、模式映射信息、訪問(wèn)策略信息等。元數(shù)據(jù)DB支撐整個(gè)系統(tǒng)的運(yùn)行[9]。
元數(shù)據(jù)管理器負(fù)責(zé)制定集成系統(tǒng)的全局模式與局部數(shù)據(jù)庫(kù)的模式之間的轉(zhuǎn)換規(guī)則。
中介器負(fù)責(zé)異構(gòu)數(shù)據(jù)庫(kù)的注冊(cè)、公共模型的生成和全局查詢請(qǐng)求的接收。中介器由三個(gè)組件構(gòu)成,包括:異構(gòu)數(shù)據(jù)注冊(cè)模塊、查詢規(guī)劃模塊和結(jié)果合并過(guò)濾模塊。其中,異構(gòu)數(shù)據(jù)注冊(cè)模塊的主要功能是:在共享數(shù)據(jù)注冊(cè)階段,負(fù)責(zé)公共模型的建立以及異構(gòu)數(shù)據(jù)庫(kù)的共享注冊(cè);查詢規(guī)劃模塊的主要功能是:在數(shù)據(jù)集成階段,將客戶端提交的基于全局?jǐn)?shù)據(jù)庫(kù)的標(biāo)準(zhǔn)查詢分解成針對(duì)各個(gè)異構(gòu)數(shù)據(jù)庫(kù)的子查詢,并提交到相應(yīng)的包裝器;結(jié)果合并過(guò)濾模塊的主要功能是:將各異構(gòu)數(shù)據(jù)庫(kù)查詢返回的 XML文檔進(jìn)行合并,形成完整統(tǒng)一的查詢結(jié)果,反饋至客戶端瀏覽器。
綜合包裝器的功能是實(shí)現(xiàn)數(shù)據(jù)位置和訪問(wèn)的透明,對(duì)異構(gòu)的數(shù)據(jù)進(jìn)行包裝。綜合包裝器由智能更新模塊、查詢結(jié)果轉(zhuǎn)換模塊和數(shù)據(jù)庫(kù)操作模塊三個(gè)組件構(gòu)成。智能更新模塊采用spring框架的quartz任務(wù)定時(shí)的掃描由不同的異構(gòu)數(shù)據(jù)庫(kù)上傳的XML描述文檔,通過(guò)解析這些XML文檔,實(shí)現(xiàn)數(shù)據(jù)自動(dòng)更新,從而保證抽象數(shù)據(jù)表的有效性、實(shí)時(shí)性、智能性。查詢結(jié)果轉(zhuǎn)換模塊負(fù)責(zé)將SQL查詢的結(jié)果轉(zhuǎn)換為XML文檔。數(shù)據(jù)庫(kù)操作模塊負(fù)責(zé)連接后臺(tái)各個(gè)異構(gòu)數(shù)據(jù)庫(kù),包括初始化數(shù)據(jù)庫(kù)連接、分配連接、封裝數(shù)據(jù)庫(kù)基本操作、關(guān)閉連接等功能。
數(shù)據(jù)集成層對(duì)外提供了兩個(gè)統(tǒng)一接口,即應(yīng)用層訪問(wèn)統(tǒng)一接口和底層異構(gòu)數(shù)據(jù)庫(kù)訪問(wèn)接口。其功能是屏蔽各數(shù)據(jù)庫(kù)的差異,提供數(shù)據(jù)的透明訪問(wèn),使得使用者無(wú)需知道數(shù)據(jù)的數(shù)據(jù)源模式及具體的物理位置等信息,只需通過(guò)系統(tǒng)定義的與具體數(shù)據(jù)源無(wú)關(guān)的SQL語(yǔ)句進(jìn)行訪問(wèn)。
3 關(guān)鍵技術(shù)分析
3.1 數(shù)據(jù)映射
數(shù)據(jù)轉(zhuǎn)換是中間件層的首要任務(wù),數(shù)據(jù)轉(zhuǎn)換的目的是將不同數(shù)據(jù)源轉(zhuǎn)換成統(tǒng)一格式,為各異構(gòu)數(shù)據(jù)源的局部模式提供統(tǒng)一的全局模式。關(guān)系數(shù)據(jù)庫(kù)是目前市場(chǎng)上的主導(dǎo),XML文檔的結(jié)構(gòu)和關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)的差異較大。關(guān)系數(shù)據(jù)庫(kù)用二維表存儲(chǔ)數(shù)據(jù),用主鍵和外鍵的方式體現(xiàn)數(shù)據(jù)之間的關(guān)系;而XML文檔采用層次嵌套結(jié)構(gòu),數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度都不規(guī)則,通過(guò)子元素與父元素嵌套的形式體現(xiàn)數(shù)據(jù)間的關(guān)系。為了采用SQL工具操作XML數(shù)據(jù),在關(guān)系數(shù)據(jù)庫(kù)和XML之間架起橋梁,或?qū)ML轉(zhuǎn)換成表格式的表單,必須解決XML與關(guān)系數(shù)據(jù)庫(kù)間的映射[6]。
(1)關(guān)系模式到XML 模式映射
轉(zhuǎn)換的算法可如下描述:
Input:關(guān)系數(shù)據(jù)庫(kù)
Output:XML 模式
Step 1:將關(guān)系模式從關(guān)系數(shù)據(jù)庫(kù)中提取出來(lái)。
Step 2:用 SQL 語(yǔ)句來(lái)重構(gòu)數(shù)據(jù)庫(kù)中的約束。
Step 3:由關(guān)系模式重構(gòu)映射結(jié)構(gòu)。
Step 4:由映射結(jié)構(gòu)和重構(gòu)的結(jié)果生成 XML Schema 模式。
Step 5:將從在XML文檔中嵌入從數(shù)據(jù)庫(kù)提取出的數(shù)據(jù)。
Step 6:對(duì)XMLSchema 格式文檔及所表示的數(shù)據(jù) XML 文檔進(jìn)行輸出。
整個(gè)流程如圖3所示。
圖 4 關(guān)系模式到XML模式的映射
(2)XML 模式到關(guān)系模式的映射
轉(zhuǎn)換算法如下:
Input:XML Schema文檔
Output:關(guān)系模式
Step 1:形式化描述XML Schema文檔。
Step 2:從 描述的XML Schema 文檔中,提取元素組成元素樹(shù)。
Step 3:映射轉(zhuǎn)化元素樹(shù),輸出關(guān)系數(shù)據(jù)數(shù)。
Step 4:將得到的關(guān)系數(shù)據(jù)樹(shù)動(dòng)態(tài)合成為SQL語(yǔ)句。
Step 5:使用 SQL 語(yǔ)句將 XML 文檔中的數(shù)據(jù)嵌入到關(guān)系數(shù)據(jù)庫(kù).
關(guān)系模式在轉(zhuǎn)化前后必須保持一致,其轉(zhuǎn)換流程如圖5所示。
圖 5 XML模式到關(guān)系模式的映射
3.2 Quartz定時(shí)調(diào)度法
Spring框架的Quartz作為流行的企業(yè)級(jí)任務(wù)調(diào)度技術(shù),任務(wù)調(diào)度為應(yīng)用系統(tǒng)請(qǐng)求的特定任務(wù)執(zhí)行操作安排,Spring為Quartz的重要組件提供Bean風(fēng)格的擴(kuò)展類。Spring容器生命周期和其環(huán)境下創(chuàng)建的組件對(duì)象,爭(zhēng)對(duì)具體任務(wù)可以執(zhí)行停止或啟動(dòng)。在Spring的開(kāi)發(fā)應(yīng)用中可以充分利用不同形式的任務(wù)定時(shí)調(diào)度功能。
包裝器的智能更新模塊,就是采用Spring的任務(wù)定時(shí)調(diào)度方法,掃描各異構(gòu)數(shù)據(jù)庫(kù)上傳的 xml 描述文檔,實(shí)時(shí)更新抽象數(shù)據(jù)表。更新抽象數(shù)據(jù)表可直接通過(guò)調(diào)用JDK Timer中schedule來(lái)執(zhí)行,執(zhí)行過(guò)程中的重要參數(shù)有間隔時(shí)間、啟動(dòng)時(shí)間延遲、任務(wù)對(duì)象[3]。
Spring引入了TaskScheduler,不同形式的任務(wù)定時(shí)調(diào)度。按某個(gè)時(shí)間間隔重復(fù)執(zhí)行任務(wù),也可以在給定時(shí)間點(diǎn)執(zhí)行一次任務(wù),該方法中的Cron觸發(fā)器可以靈活定義執(zhí)行時(shí)間[3]。
例如:scheduler.schedule(task, new CronTrigger(″* 206-15 * * MON-FRI″));在每周星期一到星期五的6點(diǎn)20分至15點(diǎn)20分執(zhí)行設(shè)定的任務(wù)。
假設(shè)定義一個(gè)服務(wù),根據(jù)各異構(gòu)數(shù)據(jù)庫(kù)上傳的XML文檔,配置定義服務(wù)的執(zhí)行時(shí)間點(diǎn)。服務(wù)定義如下:
Importorg.springframework.stereotype.Service;
@Service
public class TaskOne {
public void OnePrint() {
System.out.println(″One測(cè)試打印″); } }
XML配置規(guī)定抽象數(shù)據(jù)表主要表達(dá)如下,即1秒后開(kāi)始更新,每隔3秒執(zhí)行一次。
cron=″1 / 3 * * * *?″ />
4 系統(tǒng)的部署
由于集成系統(tǒng)中各異構(gòu)的數(shù)據(jù)源是自治的,這些資源分屬于不同的部門,有些數(shù)據(jù)需要一定的權(quán)限才能訪問(wèn),有些數(shù)據(jù)甚至不能共享,所以需對(duì)可共享的內(nèi)容進(jìn)行設(shè)定。系統(tǒng)的具體部署包括以下兩個(gè)階段:
4.1 數(shù)據(jù)注冊(cè)階段
由中介器中的注冊(cè)管理器來(lái)完成,主要任務(wù)是完成對(duì)各異構(gòu)數(shù)據(jù)源在數(shù)據(jù)集成層中的注冊(cè),選擇集成的內(nèi)容(共享的表和字段)和訪問(wèn)的權(quán)限,并建立數(shù)據(jù)庫(kù)集成的模型。在這個(gè)階段,主要有各異構(gòu)數(shù)據(jù)庫(kù)管理員和集成系統(tǒng)管理員兩類角色參與,他們的主要任務(wù)如下:
各異構(gòu)數(shù)據(jù)庫(kù)管理員:主要完成登錄數(shù)據(jù)集成系統(tǒng),選擇數(shù)據(jù)庫(kù)中共享的內(nèi)容,對(duì)共享的數(shù)據(jù)的訪問(wèn)權(quán)限進(jìn)行設(shè)定。選擇自己欲注冊(cè)的數(shù)據(jù)庫(kù)類型,向集成系統(tǒng)管理員注冊(cè)信息,如數(shù)據(jù)庫(kù)主機(jī)名、IP地址、用戶名、密碼。
數(shù)據(jù)集成系統(tǒng)管理員:主要審核各注冊(cè)的異構(gòu)數(shù)據(jù)源,確定訪問(wèn)權(quán)限和集成內(nèi)容。由數(shù)據(jù)集成層建立共享的公共模型,并收集各注冊(cè)的數(shù)據(jù)庫(kù)信息。
4.2 系統(tǒng)運(yùn)行階段
此階段的主要任務(wù)是接受用戶提出的查詢請(qǐng)求并對(duì)請(qǐng)求做出相應(yīng)的解答。圖5為系統(tǒng)的數(shù)據(jù)查詢流程圖,包括以下四個(gè)步驟:
步驟1:用戶從瀏覽器利用HTTP協(xié)議,向應(yīng)用層統(tǒng)一接口發(fā)出查詢請(qǐng)求,接口收到用戶查詢請(qǐng)求后進(jìn)行分析執(zhí)行,轉(zhuǎn)化為查詢參數(shù);
步驟2:中介器得到查詢參數(shù)后,到元數(shù)據(jù)中查找目標(biāo)數(shù)據(jù)庫(kù)及數(shù)據(jù)表,并通過(guò)查詢規(guī)劃模塊進(jìn)行SQL分解,生成異構(gòu)數(shù)據(jù)庫(kù)相對(duì)應(yīng)的SQL子查詢語(yǔ)句SQL1 ,SQL2,…,并放入隊(duì)列之中準(zhǔn)備執(zhí)行;
步驟3:綜合包裝器通過(guò)數(shù)據(jù)庫(kù)操作模塊,從查詢隊(duì)列中將SQL子查詢語(yǔ)句SQL1,SQL2,…發(fā)送到相應(yīng)的異構(gòu)數(shù)據(jù)庫(kù)中執(zhí)行;
步驟4:異構(gòu)數(shù)據(jù)庫(kù)將數(shù)據(jù)查詢響應(yīng)后數(shù)據(jù)發(fā)送給綜合包裝器,通過(guò)查詢結(jié)果轉(zhuǎn)化模塊,把各異構(gòu)數(shù)據(jù)庫(kù)的查詢結(jié)果DATA1 ,DATA2…轉(zhuǎn)化成XML1,XML2…文檔;
步驟5:中介器再對(duì)各個(gè)數(shù)據(jù)庫(kù)提供的查詢結(jié)果XML1,XML2…文檔作集成處理,即將XML1,XML2…經(jīng)由結(jié)果合并過(guò)濾模塊的處理,合并不完整的數(shù)據(jù)和過(guò)濾重復(fù)的數(shù)據(jù)。將完整統(tǒng)一的查詢結(jié)果XML發(fā)送給客戶端瀏覽器,經(jīng)由瀏覽器呈現(xiàn)在用戶面前。
圖5 系統(tǒng)數(shù)據(jù)查詢流程圖
5 系統(tǒng)測(cè)試
5.1 系統(tǒng)測(cè)試環(huán)境的搭建
數(shù)據(jù)庫(kù)訪問(wèn)中間件技術(shù)采用Visual Studio2010作為開(kāi)發(fā)工具,對(duì)多數(shù)據(jù)庫(kù)在異構(gòu)環(huán)境下的訪問(wèn),采用數(shù)據(jù)庫(kù)為SQL Server2005、Oracle、MySql和Access, Web服務(wù)器使用Tomcat,操作系統(tǒng)采用Windows XP Professional SP2。整個(gè)系統(tǒng)的實(shí)驗(yàn)環(huán)境如圖6所示。
5.2 測(cè)試內(nèi)容與結(jié)果
本文對(duì)異構(gòu)數(shù)據(jù)的智能集成系統(tǒng)及其關(guān)鍵技術(shù)點(diǎn)做了詳細(xì)的分析和設(shè)計(jì),并且給出了整個(gè)系統(tǒng)實(shí)現(xiàn)的詳細(xì)流程方案,現(xiàn)通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)據(jù)源注冊(cè)功能來(lái)驗(yàn)證上述的系統(tǒng)[10]。
由圖7知,實(shí)驗(yàn)環(huán)境部署包含一臺(tái)數(shù)據(jù)集成中心服務(wù)器、一臺(tái)客戶機(jī)端和四臺(tái)數(shù)據(jù)庫(kù)服務(wù)器。數(shù)據(jù)集成中心Server是本系統(tǒng)的核心Server,實(shí)現(xiàn)了對(duì)異構(gòu)數(shù)據(jù)源的訪問(wèn)和注冊(cè),各異構(gòu)數(shù)(下轉(zhuǎn)第90頁(yè))(上接第70頁(yè))據(jù)庫(kù)的元數(shù)據(jù)和中間件都位于該服務(wù)器上;客戶機(jī)端是通過(guò)瀏覽器訪問(wèn)數(shù)據(jù)集成層統(tǒng)一接口,以實(shí)現(xiàn)對(duì)異構(gòu)數(shù)據(jù)的透明訪問(wèn);數(shù)據(jù)庫(kù)Server存儲(chǔ)了具體的查詢數(shù)據(jù),用來(lái)實(shí)現(xiàn)對(duì)異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)源的管理和存儲(chǔ)。
圖 6 系統(tǒng)實(shí)驗(yàn)環(huán)境部署圖
每臺(tái)機(jī)器上都部署著自己的運(yùn)行環(huán)境,從系統(tǒng)部署流程可知,從各異構(gòu)數(shù)據(jù)庫(kù)Server登陸數(shù)據(jù)集成中心的數(shù)據(jù)源注冊(cè)系統(tǒng),數(shù)據(jù)集成中心根據(jù)所填的信息,與相應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行連接,獲得元數(shù)據(jù)。異構(gòu)數(shù)據(jù)集成中數(shù)據(jù)源注冊(cè)系統(tǒng)界面如圖7所示。
圖 7 數(shù)據(jù)源注冊(cè)系統(tǒng)界面
6 結(jié)束語(yǔ)
本系統(tǒng)在現(xiàn)有的異構(gòu)數(shù)據(jù)庫(kù)集成解決方案的基礎(chǔ)之上,對(duì)原有的模式集成方法的進(jìn)行了多方面的擴(kuò)展,使用XML、Web服務(wù)等技術(shù)實(shí)現(xiàn)了基于中間件的B/S模式下異構(gòu)數(shù)據(jù)庫(kù)的集成,本文重點(diǎn)分析了XML與關(guān)系數(shù)據(jù)庫(kù)之間的映射,提出了通過(guò)spring框架的quarzt定時(shí)任務(wù),實(shí)時(shí)的對(duì)集成系統(tǒng)全局?jǐn)?shù)據(jù)表進(jìn)行更新,以達(dá)到系統(tǒng)的智能集成。該系統(tǒng)成功解決了異構(gòu)數(shù)據(jù)庫(kù)集成時(shí)操作復(fù)雜、需要人工干預(yù)等問(wèn)題。由實(shí)驗(yàn)結(jié)果可以看出,該設(shè)計(jì)方案較為合理且簡(jiǎn)單實(shí)用,可以被復(fù)用,效果良好,具有高實(shí)時(shí)性、可擴(kuò)展性、高響應(yīng)性能等特點(diǎn)。
推薦資訊
- » 基于遺傳算法的虛擬牙齒矯正路徑規(guī)劃
- » 基于連續(xù)潮流計(jì)算的VSC-MTDC異步互聯(lián)電網(wǎng)…
- » 基于大數(shù)據(jù)的水產(chǎn)養(yǎng)殖系統(tǒng)設(shè)計(jì)
- » EDF多任務(wù)調(diào)度算法在物聯(lián)網(wǎng)數(shù)據(jù)監(jiān)控平臺(tái)中…
- » 逆變拓?fù)湓诟袘?yīng)加熱處理中的專利發(fā)展技術(shù)…
- » 基于無(wú)線節(jié)點(diǎn)資源的通信路徑選擇在自組網(wǎng)…
- » 地鐵綜合自動(dòng)化集成系統(tǒng)方案解析
- » 基于Web服務(wù)異構(gòu)數(shù)據(jù)庫(kù)智能集成的研究
- » 基于深度學(xué)習(xí)的智能車輛輔助駕駛系統(tǒng)設(shè)計(jì)
- » 基于Swish激活函數(shù)的人臉情緒識(shí)別研究
