專利名稱:基于養(yǎng)老保險預(yù)警系統(tǒng)的異構(gòu)數(shù)據(jù)庫中間件訪問技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是一種數(shù)據(jù)庫技術(shù)領(lǐng)域,具體是基于養(yǎng)老保險預(yù)警系統(tǒng)的異構(gòu)數(shù)據(jù) 庫中間件訪問技術(shù)。
背景技術(shù):
隨著Web技術(shù)的不斷發(fā)展,信息共享和數(shù)據(jù)交換的范圍不斷擴(kuò)大,傳統(tǒng)的關(guān)系數(shù) 據(jù)庫也面臨著挑戰(zhàn),各種不同的數(shù)據(jù)庫管理系統(tǒng)之間的異構(gòu)性及其所依賴操作系統(tǒng)的異構(gòu) 性,嚴(yán)重限制了信息共享和數(shù)據(jù)交換范圍,與此同時,人們對信息的需求越來越廣泛,這種 需求已不僅局限于一個部門內(nèi)數(shù)據(jù)庫的相互訪問,還涉及到部門之間的數(shù)據(jù)共享。因此,當(dāng) 今用戶所面對的是一個多廠商異種數(shù)據(jù)庫、異種操作系統(tǒng)和異種網(wǎng)絡(luò)的環(huán)境,異種數(shù)據(jù)庫 間互聯(lián)成為人們越來越迫切的需求急切的需要一種可以訪問各類數(shù)據(jù)庫的技術(shù)出現(xiàn)。目前,對異構(gòu)數(shù)據(jù)庫的訪問的研究分為兩個層面(1)對數(shù)據(jù)源的集成,即對外提供一個統(tǒng)一的訪問機(jī)制,但不能跨數(shù)據(jù)庫訪問;(2)對不同的數(shù)據(jù)源之間數(shù)據(jù)的集成,可以跨數(shù)據(jù)庫訪問,針對第二個層面提出了 兩種解決方案,一種是采用數(shù)據(jù)庫或者中間件等技術(shù)解決;另一種是采用XML DTD以及RDF 等技術(shù)作為異構(gòu)數(shù)據(jù)源數(shù)據(jù)模式來解決。
發(fā)明內(nèi)容
由于養(yǎng)老保險預(yù)警系統(tǒng)的數(shù)據(jù)不僅僅是需要訪問本地DB2數(shù)據(jù)庫,在以后還有可 能要訪問地稅接口的Oracle數(shù)據(jù)庫和其他類型的數(shù)據(jù)庫,所以,需要采用非完全的異構(gòu)數(shù) 據(jù)庫中間件訪問技術(shù)。本發(fā)明的創(chuàng)新點是系統(tǒng)與數(shù)據(jù)庫相關(guān)操作全部由后臺業(yè)務(wù)程序提交給數(shù)據(jù)庫中 間件,在數(shù)據(jù)庫中間件中再根據(jù)所需要連接的數(shù)據(jù)庫申請不同的數(shù)據(jù)庫連接池,系統(tǒng)利用 數(shù)據(jù)庫連接池連接相應(yīng)數(shù)據(jù)庫,并將得到的連接交給數(shù)據(jù)接口,再根據(jù)不同數(shù)據(jù)庫結(jié)構(gòu)特 點執(zhí)行相應(yīng)的SQL語句或操作并獲取返回值?;陴B(yǎng)老保險預(yù)警系統(tǒng)的異構(gòu)數(shù)據(jù)庫中間件訪問技術(shù)體系結(jié)構(gòu)如
圖1所示,由系 統(tǒng)配置模塊(S2)、XML解釋器模塊(S;3)、SQL執(zhí)行模塊(S4)、客戶端連接管理模塊(S5)、數(shù) 據(jù)庫連接管理模塊(S6)這五大模塊為具體的組成部分。(一 )系統(tǒng)配置模塊該模塊的功能是設(shè)置數(shù)據(jù)庫中間件的參數(shù)信息。該模塊的圖形界面由Swing組件 實現(xiàn)。用戶在“數(shù)據(jù)庫信息配置”界面中錄入各種數(shù)據(jù)庫的類型、URL地址(包括數(shù)據(jù)庫名 及端口號)、數(shù)據(jù)庫賬戶及登錄密碼等信息;在“中間件信息配置”界面中,設(shè)定與客戶端的 最大連接數(shù)和與數(shù)據(jù)庫的最大連接數(shù)。該模塊根據(jù)這些用戶設(shè)定,生成配置信息,供其它模 塊使用。(二)XML解析模塊該模塊是負(fù)責(zé)對XML文檔進(jìn)行解析。具體包括(1)接受客戶端發(fā)過來的符合XML規(guī)范的字節(jié)流,并把它轉(zhuǎn)換成Document對象;(2)解析請求;(3)把對相應(yīng)數(shù)據(jù)庫的操作結(jié) 果映射到Document對象中,然后轉(zhuǎn)換成字節(jié)流發(fā)送到客戶端;(4)把Document對象轉(zhuǎn)換成 XML文件保存在磁盤中;(5)把保存在磁盤中的XML文件轉(zhuǎn)換成Document對象。(三)SQL的執(zhí)行模塊該模塊負(fù)責(zé)響應(yīng)客戶端的請求。把客戶端的請求分成五類數(shù)據(jù)查詢(select)、 數(shù)據(jù)定義(create, drop, alter)、數(shù)據(jù)操參從(insert, update, delete)、數(shù)據(jù)控帝[J (grant, revoke)、存儲過程W]。該模塊在解析請求時,獲知目的數(shù)據(jù)庫和對此執(zhí)行何種操作,轉(zhuǎn)換 成相應(yīng)的sql語句,通過數(shù)據(jù)庫連接池的相應(yīng)Connection,來訪問數(shù)據(jù)庫,并把結(jié)果返回給 客戶端,完成此次請求。如果執(zhí)行錯誤,則返回錯誤代碼。具體實現(xiàn)的關(guān)鍵技術(shù)主要有全局?jǐn)?shù)據(jù)庫命名、數(shù)據(jù)庫連接、數(shù)據(jù)庫查詢和處理、 關(guān)閉連接等。1)全局?jǐn)?shù)據(jù)庫命名要在整個系統(tǒng)中實現(xiàn)異構(gòu)分布式數(shù)據(jù)訪問,需要建立全局?jǐn)?shù)據(jù)庫模式和全局?jǐn)?shù)據(jù) 庫字典,按相應(yīng)的原則給各個數(shù)據(jù)庫命名。2)數(shù)據(jù)庫連接前臺受理97數(shù)據(jù)庫的配置文件如下DB97 {driverClass = oracle, jdbc. driver. OracleDriverdbUrl = jdbc:oracle:thin:§192. 168. 1. 5:1521:db97dbUser = dbadbPass = 123456connect ionPoo ISize = 20statementPoolSize = 10idleTimeout = 1800shrinklnterval = 1800}上面driverClass是表示Oracle數(shù)據(jù)庫專用JDBC驅(qū)動程序。dbtol是表 示數(shù)據(jù)庫連接的相關(guān)信息,“jd-bc:0racle:thin”是服務(wù)器使用的協(xié)議和子協(xié)議, “192. 168. 1.5:8521”是服務(wù)器的IP地址和端口,db97是數(shù)據(jù)庫的SID,dWser是表示用戶 名,dbPass是表示口令。同樣可以配置計費系統(tǒng)的數(shù)據(jù)庫信息FEE10。3)數(shù)據(jù)庫查詢和處理假設(shè)要查詢某客戶的客戶資料和相關(guān)費用,則先訪問前臺受理97數(shù)據(jù)庫DB97和 計費數(shù)據(jù)庫FEE10,將結(jié)果合并后映射成XML文檔,然后發(fā)給客戶端。ConnectionPool pool97 = ConnectionManager. get-ConnectionPool("DB97");Statement stmt97 = pool97. createStatement();ResultSet set97 = stmt97. executeQuery (sql-Text) ;//sqlText 為相應(yīng)的 SQL 語句這樣就可得到前臺受理97數(shù)據(jù)庫中客戶資料的結(jié)果集,同樣,可以得到計費數(shù)據(jù) 庫中客戶相關(guān)費用的結(jié)果集。然后整合這兩個結(jié)果集,最后轉(zhuǎn)化成XML文檔,從而實現(xiàn)異質(zhì) 數(shù)據(jù)庫的透明訪問。
4)連接關(guān)閉當(dāng)使用完數(shù)據(jù)庫后應(yīng)釋放資源。下面源代碼釋放Statement對象和 ConnectoinPool占用的資源。stmt97. closeO ;pool97. close ();(四)客戶端的連接管理模塊該模塊的功能是管理客戶端的連接。把客戶端的連接存放在一隊列中,當(dāng)連接的 個數(shù)超過設(shè)定的數(shù)目時,則返回“中間件忙”,讓客戶端等待。(五)數(shù)據(jù)庫的連接管理模塊該模塊的功能是分配和釋放數(shù)據(jù)庫的連接。具體的分配、釋放策略如下當(dāng)客戶請求數(shù)據(jù)庫連接時,首先看連接池中是否有空閑連接,這里的空閑是指目 前沒有分配出去的連接。如果存在空閑連接則把連接分配給客戶,并做相應(yīng)處理,主要的處 理策略就是標(biāo)記該連接為已分配。若連接池中沒有空閑連接,就在已經(jīng)分配出去的連接中 尋找一個合適的連接給客戶,此時該連接在多個客戶間復(fù)用。當(dāng)客戶釋放數(shù)據(jù)庫連接時,可 以根據(jù)該連接是否被復(fù)用進(jìn)行不同的處理。如果連接沒有使用者,就放入到連接池中,而不 是被關(guān)閉??梢钥闯稣沁@套策略保證了數(shù)據(jù)庫連接的有效復(fù)用。數(shù)據(jù)庫連接池中到底要 放置多少個連接,連接耗盡后該如何處理呢?這是一個配置策略。一般的配置策略是開始 時,根據(jù)具體的應(yīng)用需求給出一個初始的連接池中連接的數(shù)目以及一個連接池可以擴(kuò)張到 的最大連接數(shù)目。本發(fā)明就是按照這種策略實現(xiàn)的。四、附圖及附圖的簡單說明圖1異構(gòu)數(shù)據(jù)庫中間件體系結(jié)構(gòu)圖;圖2系統(tǒng)架構(gòu)圖;圖中主要符號說明Sl通用數(shù)據(jù)接口;S2系統(tǒng)配置模塊;S3XML解釋器模塊;S4SQL執(zhí)行模塊;S5客戶端連接管理子模塊;S6數(shù)據(jù)庫連接管理子模塊;
五具體實施例方式本發(fā)明不受以下實施實例限制。實施實例如圖2所示,本發(fā)明的數(shù)據(jù)庫中間件與養(yǎng)老保險預(yù)警系統(tǒng)采用Socket進(jìn)行通信, 并用XML來封裝數(shù)據(jù),通過JDBC來訪問數(shù)據(jù)庫,用數(shù)據(jù)庫連接池來管理數(shù)據(jù)庫的連接。為 了使數(shù)據(jù)庫具有跨平臺的能力,選用Java作為開發(fā)語言。因為Java提供了 JDBC公用數(shù)據(jù) 庫API,JDBC API提供封裝具體功能的Java類和接口,并通過加載相應(yīng)的數(shù)據(jù)庫驅(qū)動程序, 將Java語言的平臺無關(guān)性擴(kuò)展到數(shù)據(jù)庫。此外,為屏蔽不同數(shù)據(jù)庫系統(tǒng)的差異,在數(shù)據(jù)交 換的過程中需要存放信息的中介。由于需要存放的數(shù)據(jù)往往是龐大而復(fù)雜的,并且要保證數(shù)據(jù)結(jié)構(gòu)無損,因此采用可擴(kuò)展標(biāo)記語言XML來封裝數(shù)據(jù)。XML不僅提供數(shù)據(jù)本身的信息, 而且側(cè)重于對數(shù)據(jù)結(jié)構(gòu)的描述,且XML具有平臺無關(guān)性及可擴(kuò)展性等特點,使XML成為異構(gòu) 平臺間數(shù)據(jù)交換的理想中介。通過JDOM對XML文檔進(jìn)行解析。具體實施步驟如下(1)與客戶端建立連接監(jiān)聽客戶端的請求,建立Socket連接。0)SQL的執(zhí)行通過JDOM對客戶端發(fā)過來的請求進(jìn)行解析,把請求翻譯成對 相應(yīng)的數(shù)據(jù)庫的操作,采用JDBC API與數(shù)據(jù)庫建立連接,通過調(diào)用Cormec-tion對象的 DatabaseMetadata接口提供的一系列方法,將對數(shù)據(jù)庫的操作結(jié)果封裝到XML文檔中。(3)操作結(jié)果的返回把操作的結(jié)果的XML文檔發(fā)送給客戶端,完成響應(yīng)的請求。
權(quán)利要求
1.基于養(yǎng)老保險預(yù)警系統(tǒng)的異構(gòu)數(shù)據(jù)庫中間件訪問技術(shù),其特征在于,包括系統(tǒng)配 置子模塊,設(shè)置數(shù)據(jù)庫中間件的參數(shù)信息。XML解析子模塊,負(fù)責(zé)對XML文檔進(jìn)行解析。 SQL的執(zhí)行子模塊,負(fù)責(zé)響應(yīng)客戶端的請求。 客戶端的連接管理子模塊,管理客戶端的連接。 數(shù)據(jù)庫的連接管理子模塊,分配和釋放數(shù)據(jù)庫的連接。
2.如權(quán)利要求1所述,系統(tǒng)配置子模塊根據(jù)用戶設(shè)定,生成配置信息,供其它模塊使用。
3.如權(quán)利要求1所述,XML解析子模塊具體包括(1)接受客戶端發(fā)過來的符合XML規(guī) 范的字節(jié)流,并把它轉(zhuǎn)換成Document對象;(2)解析請求;(3)把對相應(yīng)數(shù)據(jù)庫的操作結(jié)果 映射到Document對象中,然后轉(zhuǎn)換成字節(jié)流發(fā)送到客戶端;(4)把Document對象轉(zhuǎn)換成 XML文件保存在磁盤中;(5)把保存在磁盤中的XML文件轉(zhuǎn)換成Document對象。
4.如權(quán)利要求1所述,SQL的執(zhí)行子模塊具體實現(xiàn)的關(guān)鍵技術(shù)主要有全局?jǐn)?shù)據(jù)庫命 名、數(shù)據(jù)庫連接、數(shù)據(jù)庫查詢和處理、關(guān)閉連接等。
5.如權(quán)利要求1所述,客戶端的連接管理子模塊把客戶端的連接存放在一隊列中,當(dāng) 連接的個數(shù)超過設(shè)定的數(shù)目時,則返回“中間件忙”,讓客戶端等待。
6.如權(quán)利要求1所述,數(shù)據(jù)庫的連接管理子模塊功能是分配和釋放數(shù)據(jù)庫的連接。
全文摘要
本發(fā)明是一種基于養(yǎng)老保險預(yù)警系統(tǒng)的異構(gòu)數(shù)據(jù)庫中間件訪問技術(shù)。其中系統(tǒng)配置子模塊、XML解釋器子模塊、SQL執(zhí)行子模塊、客戶端連接管理子模塊、數(shù)據(jù)庫連接管理子模塊這五大模塊為具體的組成部分。本技術(shù)系統(tǒng)與數(shù)據(jù)庫相關(guān)操作全部由后臺業(yè)務(wù)程序提交給數(shù)據(jù)庫中間件,在數(shù)據(jù)庫中間件中再根據(jù)所需要連接的數(shù)據(jù)庫申請不同的數(shù)據(jù)庫連接池,系統(tǒng)利用數(shù)據(jù)庫連接池連接相應(yīng)數(shù)據(jù)庫,并將得到的連接交給數(shù)據(jù)接口,再根據(jù)不同數(shù)據(jù)庫結(jié)構(gòu)特點執(zhí)行相應(yīng)的SQL語句或操作并獲取返回值。本發(fā)明實現(xiàn)的異構(gòu)數(shù)據(jù)庫的中間件訪問技術(shù)通過在養(yǎng)老預(yù)警系統(tǒng)里的應(yīng)用,收到了良好的應(yīng)用效果,節(jié)約了開發(fā)成本,縮短了開發(fā)周期,產(chǎn)生了良好的經(jīng)濟(jì)效益,有著廣泛的應(yīng)用前景。
文檔編號G06Q40/00GK102110099SQ20091021426
公開日2011年6月29日 申請日期2009年12月28日 優(yōu)先權(quán)日2009年12月28日
發(fā)明者張丹松, 楊軍, 楊濤, 王柱, 鄧金英, 鄭力源 申請人:五邑大學(xué)