跨數(shù)據(jù)庫中間件在ERP中的應(yīng)用
引言
世界由傳統(tǒng)型經(jīng)濟(jì)向知識型經(jīng)濟(jì)和網(wǎng)絡(luò)型經(jīng)濟(jì)發(fā)展,信息化已成為大趨勢 ERP(Enterprise Resource Planning,企業(yè)資源計(jì)劃)在企業(yè)信息化中發(fā)揮了巨大作用。而隨著企業(yè)規(guī)模、結(jié)構(gòu)變化,各種兼并或進(jìn)入新業(yè)務(wù)領(lǐng)域,會遇到企業(yè)各部分分布異構(gòu)情況,在這種環(huán)境中,通常存在多種硬件系統(tǒng)平臺、系統(tǒng)軟件、數(shù)據(jù)庫及多種風(fēng)格各異的用戶界面,這就要求傳統(tǒng)的ERP軟件轉(zhuǎn)型以適應(yīng)需要,但它們的應(yīng)用和商業(yè)邏輯一般都是緊耦合的,改造難度很大。因此,為了實(shí)現(xiàn)內(nèi)部邏輯與外部實(shí)現(xiàn)的松耦合結(jié)構(gòu),中間件技術(shù)的引入就十分必要,在跨數(shù)據(jù)庫的中間件應(yīng)用技術(shù)上,提出數(shù)據(jù)訪問中間件的三層C/M/S fClient/Middleware/Server)體系結(jié)構(gòu)。瀏覽器端程序要訪問數(shù)據(jù)庫,首先通過中間件。
然后由中間件對數(shù)據(jù)庫操作 該中間件位于服務(wù)器端,中間件對數(shù)據(jù)庫進(jìn)行操作后,再將處理結(jié)果通過Web服務(wù)器返回到瀏覽器端用戶 通過中間件,客戶端應(yīng)用程序開發(fā)工作量大大減輕 因?yàn)橹虚g件可重復(fù)利用,只要掌握了中間件編程接口,就可以很容易利用中間件來訪問數(shù)據(jù)庫,或運(yùn)行在網(wǎng)絡(luò)上的其它大型應(yīng)用程序。
本文介紹利用J2EE技術(shù)實(shí)現(xiàn)中間件跨數(shù)據(jù)庫訪問的幾點(diǎn)應(yīng)用。
1 中間件技術(shù)
1,1中間件的概念
中間件(middleware)是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源, 中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。中間件處于操作系統(tǒng)軟件和應(yīng)用軟件之間。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,主要作用就是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助開發(fā)者靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件嘲
1,2中間件的分類
中間件大致可分為六大類:終端仿真/屏幕轉(zhuǎn)換中間件、數(shù)據(jù)訪問中間件、遠(yuǎn)程過程調(diào)用中間件、消息中間件、交易中間件、對象中間件。由于中間件要屏蔽各類應(yīng)用軟件和網(wǎng)絡(luò)協(xié)議與操作系統(tǒng)之間的異構(gòu)問題,所以它必須能夠提供分布系統(tǒng)環(huán)境下的通信服務(wù),在這里,將這種通信服務(wù)稱為平臺。基于功能和實(shí)現(xiàn)機(jī)制的不同,平臺分為以下幾類:① 遠(yuǎn)程過程調(diào)用中間件(Remo~ Procedure Cal1); ② 面向消息的中間件(Message Oriented Middleware);③面向?qū)ο笳埱蟠碇虚g件(Object Request Brokers);④ 事務(wù)處理監(jiān)控(Transaetion Processing Monitors)。
1,3中間件的特點(diǎn)
中間件屏蔽了底層操作系統(tǒng)復(fù)雜性,減少了程序設(shè)計(jì)復(fù)雜性,使程序開發(fā)人員面對簡單而統(tǒng)一的開發(fā)環(huán)境,將注意力集中在自己業(yè)務(wù)上,不必再為程序在不同系統(tǒng)軟件上移植而重復(fù)工作,減少了技術(shù)上的負(fù)擔(dān)。中間件帶給應(yīng)用系統(tǒng)的不只是開發(fā)簡單、開發(fā)周期縮短,也減少了系統(tǒng)維護(hù)、運(yùn)行和管理工作量及計(jì)算機(jī)總體費(fèi)用投入。隨著研究深入和應(yīng)用普及,已形成了中間件標(biāo)準(zhǔn)化規(guī)范或產(chǎn)品。如CORBA、DCOM、J2EE都成為著名的業(yè)界標(biāo)準(zhǔn)規(guī)范 其中美國Sun公司的J2EE規(guī)范,目標(biāo)是提供與平臺無關(guān)、可移植、支持并發(fā)訪問和安全的,完全基于Java的開發(fā)服務(wù)器端中間件的標(biāo)準(zhǔn)。它具有完整的基于Java語言開發(fā)、面向企業(yè)發(fā)布的應(yīng)用規(guī)范, 包括Javaservlet、JSP(JavaServerPage)、EJB等多種形式,以支持不同業(yè)務(wù)需求
2 采用J2EE進(jìn)行C/M/S結(jié)構(gòu)設(shè)計(jì)和跨數(shù)據(jù)庫訪問
2,1基于J2EE的C/M/S體系結(jié)構(gòu)
J2EE(Java 2 Platform,Enterprise Edition)是Sun公司推出的一種全新的概念模型,與傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用程序模型相比具有不可比擬的優(yōu)勢 J2EE是一種利用Java2平臺簡化諸多與多級企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu) J2EE技術(shù)的基礎(chǔ)是核心Java平臺或Java2平臺標(biāo)準(zhǔn)版,不僅鞏固了標(biāo)準(zhǔn)版中許多優(yōu)點(diǎn),例如“一次編寫,到處運(yùn)行”(Write once,l'un anywhere)的特性、方便存取數(shù)據(jù)庫的JDBC,CORBA技術(shù)以及能夠在[nternet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等,同時(shí)還提供EJB (Enterprise Java Beans),Servlet。JSP(JavaServerPages)以及XML等技術(shù)的全面支持。J2EE體系結(jié)構(gòu)如圖1所示
圖1 J2EE的體系結(jié)構(gòu)
J2EE是一種全新概念的多層分布式應(yīng)用平臺,通過提供企業(yè)計(jì)算環(huán)境所必須的各種服務(wù),使部署在J2EE平臺上的C/M/S三層體系結(jié)構(gòu)實(shí)現(xiàn)高可用性、安全性、可擴(kuò)展性和可靠性。C/M/S體系結(jié)構(gòu)的優(yōu)劣會直接制約整個(gè)企業(yè)信息共享、運(yùn)行管理以及經(jīng)營決策:必須要滿足3個(gè)目標(biāo):
(1)系統(tǒng)必須具有高可擴(kuò)展性,可維護(hù)性。由于企業(yè)經(jīng)營中不確定因素很多,經(jīng)常導(dǎo)致新的功能需求不斷變化。這就要求系統(tǒng)具有很高可擴(kuò)展性,以滿足新功能添加。
(2) 實(shí)現(xiàn)企業(yè)管理的3A (Anyone,Anywhere,Anyway)。即可以通過本系統(tǒng)的使用達(dá)到任何人在任何地方以任何方式了解和參與企業(yè)運(yùn)營管理。
(3)最大范圍內(nèi)節(jié)約系統(tǒng)的開發(fā)成本。企業(yè)的最終目的是以最小的成本獲得最多的投資回報(bào)。因此,系統(tǒng)開發(fā)成本直接影響著企業(yè)的利潤。
2,2基于J2EE的跨數(shù)據(jù)庫訪問體系結(jié)構(gòu)設(shè)計(jì)
應(yīng)用軟件進(jìn)行跨數(shù)據(jù)庫開發(fā)或移植困難,主要是由數(shù)據(jù)庫異構(gòu)性引起的數(shù)據(jù)庫操作語言不一致所造成。應(yīng)用軟件數(shù)據(jù)操作語言都是針對特定的數(shù)據(jù)庫,直接調(diào)用相關(guān)的JDBC程序來完成數(shù)據(jù)庫操作,無法使用統(tǒng)一的數(shù)據(jù)操作語言來操縱多種異構(gòu)數(shù)據(jù)庫,造成應(yīng)用軟件在異構(gòu)數(shù)據(jù)庫間移植困難 本文主要研究屏蔽異構(gòu)數(shù)據(jù)庫操作語言差異的中間件JUBD (Java UniverseData Base Manage system),實(shí)現(xiàn)應(yīng)用軟件進(jìn)行跨數(shù)據(jù)庫移植,在異構(gòu)數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)快速轉(zhuǎn)換。JUBD是在JDBC與應(yīng)用程序之間的一層,它屏蔽異構(gòu)數(shù)據(jù)庫不同的JDBC之間的差異,應(yīng)用程序只需使用標(biāo)準(zhǔn)數(shù)據(jù)庫操作語言,JUDB就可以將其轉(zhuǎn)換為針對不同數(shù)據(jù)庫的SQL操作語言,樣開發(fā)人員只需了解標(biāo)準(zhǔn)的SQL語言,而不需要記住各數(shù)據(jù)庫操作語言的特性系統(tǒng)采用三層結(jié)構(gòu),劃分為:表示層(客戶機(jī))、業(yè)務(wù)邏輯層(應(yīng)用服務(wù)器)、數(shù)據(jù)存儲層(數(shù)據(jù)庫服務(wù)器)。
在方案中,用戶發(fā)出標(biāo)準(zhǔn)化的SQL語言進(jìn)行跨數(shù)據(jù)庫操作 通過解析測試器完成對SQL字符串解析及查找錯(cuò)誤的操作,進(jìn)而得到一個(gè)語句對象。該語句對象由管理器進(jìn)一步轉(zhuǎn)換,將語句對象中的屬性值提取重新組合成SQL語句,使原本符合標(biāo)準(zhǔn)SQL操作語言的字符串,轉(zhuǎn)變成可以為實(shí)際關(guān)系型數(shù)據(jù)庫系統(tǒng)處理的數(shù)據(jù)結(jié)構(gòu),再通過數(shù)據(jù)庫連接池獲得相應(yīng)數(shù)據(jù)庫系統(tǒng)的JDBC接13,執(zhí)行重組后的SQL語句并返回執(zhí)行結(jié)果。
為了保證可靠安全地傳輸數(shù)據(jù),在每個(gè)數(shù)據(jù)庫服務(wù)器上創(chuàng)建一個(gè)信息處理隊(duì)列管理器,承擔(dān)信息收發(fā)實(shí)際工作:另外,在其中任一臺應(yīng)用服務(wù)器上再添加一個(gè)額外的路由隊(duì)列管理器作為信息路由點(diǎn),避免路由點(diǎn)的單點(diǎn)故障:在另外一臺應(yīng)用服務(wù)器上也創(chuàng)建一個(gè)路由隊(duì)列管理器備份,確保路由點(diǎn)不會出現(xiàn)單點(diǎn)故障,當(dāng)其發(fā)生意外故障時(shí),由另一臺應(yīng)用服務(wù)器上的路由隊(duì)列管理器實(shí)現(xiàn)自動接管和切換:結(jié)構(gòu)如圖2所示
圖2 中間件部署方式
3 跨數(shù)據(jù)庫訪問的實(shí)現(xiàn)
通常在程序中用到的SOL語言基本都是對數(shù)據(jù)庫的增刪改操作, 還有CREATE TABLE、DROP TABLE、ALTER TABLE操作。應(yīng)用程序通過JUDB提供的一組對外接El執(zhí)行SQL語句。
DBPEER是JUDB提供的一個(gè)專門對外的接口模塊,其功能主要是實(shí)現(xiàn)數(shù)據(jù)庫操作。它通過一個(gè)類的靜態(tài)模塊來初始化系統(tǒng)配置(JUOBKERNEL,INIT),并獲得各項(xiàng)配置信息 DBPEER提供四種SQL語句接13,應(yīng)用軟件通過這四種接13操作數(shù)據(jù)源 同時(shí),DBPEER也開放直接與JDBC通訊的接口,用戶可以通過這些接口將一些目前JUBD還未支持的SQL語句提交給JDBC,由數(shù)據(jù)庫系統(tǒng)直接處理。方法如下:
(1)executeDelete(String deleteSQL),exeeuteDelete(String deleteSQL,String dbname)函數(shù)功能:為刪除記錄,這兩個(gè)方法是為在指定或缺省的數(shù)據(jù)源執(zhí)行“Delete"語句,人口參數(shù)為執(zhí)行delete語句的標(biāo)準(zhǔn)SQL語句,例如“delete from table where col==value”,還有重載方法的參數(shù)為數(shù)據(jù)庫名。例如“Orae1e” 若是沒有指定數(shù)據(jù)庫名,系統(tǒng)會根據(jù)配置文件來自動獲得
(2)executelnsert (String insertSQL),executelnse(String insertSQL,String dbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源執(zhí)行一條插入語句,并且如果所操作表為自增主鍵表,則返回新增記錄的主鍵值
(3)excuteSelect (String selectSQL),executeSelect(String selectSQL,String dbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源執(zhí)行一條查詢語句,同時(shí)返回結(jié)果集
(4)exeeuteUpdate(String updateSQL),executeUpdate(String updateSQL,Stringdbname)i~i數(shù)功能:在指定或缺省數(shù)據(jù)源執(zhí)行一條更新語句。
(5)executeQuery(String queryString),executeQuery(String queryString,Stringdbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源,執(zhí)行一條非LSQL標(biāo)準(zhǔn)的查詢語句。
(6)executeStatement(String stmt),executeStatement(String stmt,Stringdbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源,執(zhí)行一條非LSQL標(biāo)準(zhǔn)的插入、刪除、更新語句。
(7)executeCreate(String createSQL),Public static boolean executeCreate (String createSQL, String dbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源,執(zhí)行一條創(chuàng)建表語句。
(8)executeDrop (String dropSQL),executeDrop(String dropSQL,String dbname)函數(shù)功能:在指定或缺省的數(shù)據(jù)源,執(zhí)行一條表刪除語句應(yīng)用軟件可以調(diào)用以上方法來操作異構(gòu)數(shù)據(jù)庫DBPEER提供所有SQL語言轉(zhuǎn)換功能 當(dāng)一個(gè)外部應(yīng)用調(diào)用JUDB的DBPEER中的方法時(shí),無需考慮數(shù)據(jù)庫特性,只需應(yīng)用標(biāo)準(zhǔn)LSQL語言:且DBPEER對外提供非常豐富的函數(shù),可執(zhí)行各種SQL操作
4 結(jié)束語
中間件發(fā)展日趨成熟,為計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展注入了新鮮血液 中間件簡化了應(yīng)用程序開發(fā)難度,提高了軟件開發(fā)可重復(fù)性,節(jié)省資源配置,解決了大部分操作系統(tǒng)與應(yīng)用軟件之間異構(gòu)問題,使分布式結(jié)構(gòu)體系得到推廣和發(fā)展 本文從運(yùn)用中間件建立三層體系結(jié)構(gòu)著手,介紹了中間件和三層體系結(jié)構(gòu)特點(diǎn),提出了在跨數(shù)據(jù)庫系統(tǒng)中的應(yīng)用方式。同時(shí),設(shè)計(jì)了一個(gè)基于J2EE的解決異構(gòu)數(shù)據(jù)庫互操作問題的中間件方案,具有很強(qiáng)靈活性,并有很高的可擴(kuò)展性和可重用性。