趙志林

【摘 要】本文介紹了兩種不同的數(shù)據(jù)庫訪問方法,對(duì)JDBC與EJB的原理以及工作模式進(jìn)行了比較,并且由于EJB訪問數(shù)據(jù)庫的方式相對(duì)復(fù)雜,通過一個(gè)實(shí)例對(duì)其工作模式進(jìn)行了詳解。該文旨在向數(shù)據(jù)庫的開發(fā)人員提供數(shù)據(jù)庫建立前期關(guān)于實(shí)現(xiàn)方法選擇的一些建議。
【關(guān)鍵詞】JDBC;EJB;數(shù)據(jù)庫;訪問方式
【Abstract】This article describes two different database access method, principle and mode of JDBC and EJB are compared, and because of the relative complexity of EJB access to the database of the way through an instance of explain its mode of operation. This article is intended to provide a database to establish some preliminary recommendations for implementation to select the database developers.
【Key words】JDBC;EJB;Database;Access mode
1. JDBC的介紹
1.1 JDBC簡介及結(jié)構(gòu)。
1.1.1 JDBC提供了面向?qū)ο蟮臄?shù)據(jù)庫訪問接口,針對(duì)JAVA提供了數(shù)據(jù)庫訪問的類庫。
1.1.2 JDBC由應(yīng)用程序、驅(qū)動(dòng)程序管理器、驅(qū)動(dòng)程序和數(shù)據(jù)源4個(gè)組件組成[1]:
(1)應(yīng)用程序:用于數(shù)據(jù)的發(fā)送以及接收。
(2)驅(qū)動(dòng)程序管理器:針對(duì)不同數(shù)據(jù)源的驅(qū)動(dòng)程序進(jìn)行相應(yīng)處理。
(3)驅(qū)動(dòng)程序:提供數(shù)據(jù)源與對(duì)應(yīng)的應(yīng)用程序之間的接口。
(4)數(shù)據(jù)源:SQL兼容數(shù)據(jù)庫。
1.1.3 由于JDBC提供了針對(duì)面向?qū)ο蟮臄?shù)據(jù)庫訪問接口,所以應(yīng)用程序只需要調(diào)用JDBC的數(shù)據(jù)庫接口,而復(fù)雜的數(shù)據(jù)庫通訊處理則是通過JDBC的驅(qū)動(dòng)程序完成的。這樣大大節(jié)約了數(shù)據(jù)的處理成本。
1.2 JDBC驅(qū)動(dòng)程序常用的四種工作模式介紹。
1.2.1 JDBC驅(qū)動(dòng)程序分為4大類,分別是:
(1)JDBC/ODBC Bridge;
(2)Native API Partly Java;
(3)Net Protocol All Java;
(4)Native Protocol All Java.
1.2.2 Type 1:JDBC/ODBC Bridge
JDBC與ODBC的橋接,由于ODBC比JDBC出現(xiàn)的時(shí)間早.并且應(yīng)用很廣泛.支持的數(shù)據(jù)庫類型較多,所以JDBC為了支持更多的數(shù)據(jù)庫類型,聯(lián)合開發(fā)了此類橋接,驅(qū)動(dòng)原理是將JDBC的調(diào)用傳遞給ODBC.經(jīng)過ODBC編譯調(diào)用本地?cái)?shù)據(jù)庫驅(qū)動(dòng)對(duì)數(shù)據(jù)庫進(jìn)行操作。
1.2.3 Type 2:Native API Partly Java。
由于大部分?jǐn)?shù)據(jù)庫廠商提供的接口是由C語言編寫的。在很大程度上依賴于不同的平臺(tái),加大了數(shù)據(jù)庫的操作的復(fù)雜度,本地的數(shù)據(jù)庫接口就是為了解決此類問題.通過驅(qū)動(dòng)程序?qū)?yīng)用程序的調(diào)用信息轉(zhuǎn)化為本地軟件接口的調(diào)用,在底層的數(shù)據(jù)庫操作完畢后,將處理結(jié)果返回給JDBC驅(qū)動(dòng)程序,從而以標(biāo)準(zhǔn)的輸入、輸出形式降低了人工操作的復(fù)雜度。
1.2.4 Type 3:Net Protocol All Java。
將JDBC的信息調(diào)用轉(zhuǎn)化為網(wǎng)絡(luò)協(xié)議的形式,通過服務(wù)器來處理發(fā)送的網(wǎng)絡(luò)協(xié)議從而完成數(shù)據(jù)庫的操作。此類的驅(qū)動(dòng)程序較為靈活,尤其在企業(yè)內(nèi)網(wǎng)的應(yīng)用中能夠發(fā)揮較好的效果,比較熟知的websphere應(yīng)用服務(wù)器就包含了此類的驅(qū)動(dòng)[2],但是由于這種驅(qū)動(dòng)需要在中間層配置其數(shù)據(jù)庫的驅(qū)動(dòng)程序,需要在中間層傳遞數(shù)據(jù),所以它的執(zhí)行效率會(huì)受到影響。
1.2.5 Type 4:Native Protocol All Java。
與第三種調(diào)用方式相仿,此類模式也是通過將JDBC調(diào)用轉(zhuǎn)化為網(wǎng)絡(luò)協(xié)議,與之不同的是此類訪問方法是與數(shù)據(jù)庫建立直接的套接字連接,將數(shù)據(jù)接口直接轉(zhuǎn)化為網(wǎng)絡(luò)調(diào)用,通過網(wǎng)絡(luò)使得客戶端直接調(diào)用服務(wù)器端的數(shù)據(jù)庫。
2. EJB的介紹
2.1 EJB定義及分類。
(1)EJB(Enterprise Java Beans)具有布式服務(wù)的多層次結(jié)構(gòu),提供面向?qū)ο蠹夹g(shù)并且具有跨平臺(tái)優(yōu)點(diǎn)的構(gòu)建體系結(jié)構(gòu)。
(2)EJB提供了三種企業(yè)Bean,分別是會(huì)話Bean(Session Bean)。實(shí)體Bean(Entity Bean)和消息驅(qū)動(dòng)Bean(Message Driven Bean),可以將它們視為EJB的三種重要組件。
2.1.1 消息驅(qū)動(dòng)Bean(MDB)。
由于消息驅(qū)動(dòng)與數(shù)據(jù)庫的訪問操作無關(guān)。所以這里首先介紹消息驅(qū)動(dòng)。MDB是設(shè)計(jì)用來專門處理基于消息請(qǐng)求的組件。它能夠收發(fā)異步JMS消息,并能夠輕易地與其他EJB進(jìn)行交互。所以它比較適合用于執(zhí)行周期長,無需實(shí)時(shí)反饋的情景。
2.1.2 會(huì)話Bean。
會(huì)話Bean用于實(shí)現(xiàn)業(yè)務(wù)邏輯,它分為有狀態(tài)和無狀態(tài)兩種模式,針對(duì)客戶端發(fā)出的調(diào)用請(qǐng)求,選擇通過JDBC或者實(shí)體Bean來實(shí)現(xiàn)數(shù)據(jù)的訪問。
2.1.3 實(shí)體Bean。
實(shí)體Bean(Entity Bean)是持久數(shù)據(jù)組件,代表存儲(chǔ)到外部介質(zhì)中的對(duì)象或者系統(tǒng)資源??蛻舳丝梢酝ㄟ^共享來對(duì)其發(fā)起訪問。
2.2 會(huì)話Bean與實(shí)體Bean的區(qū)別。
(1)Session Bean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。Entity Bean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)[3]。
(2)對(duì)于客戶機(jī):會(huì)話Bean是一種非持久性對(duì)象,主要實(shí)現(xiàn)在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯;實(shí)體Bean是一種持久性對(duì)象,代表存儲(chǔ)到外部介質(zhì)中的對(duì)象或者是應(yīng)用程序中的系統(tǒng)資源。
2.3 通過實(shí)例比較會(huì)話Bean與實(shí)體Bean操作的優(yōu)缺點(diǎn)。
2.3.1 通常情況下數(shù)據(jù)會(huì)以表格的方式作為輸出顯示,這種情形如果使用實(shí)體Bean會(huì)導(dǎo)致如下問題:
(1)引起服務(wù)端頻繁的數(shù)據(jù)庫查詢和加載操作。每次的實(shí)體Bean訪問都要進(jìn)行一次find操作,造成效率的低下。
(2)如果使用Remote接口。會(huì)引起頻繁的額外網(wǎng)絡(luò)操作。
(3)實(shí)體Bean在處理復(fù)雜的關(guān)系型數(shù)據(jù)庫時(shí),映射會(huì)變得非常復(fù)雜,會(huì)增加建模過程的難度。
2.3.2 因此建議在只需對(duì)數(shù)據(jù)庫表數(shù)據(jù)進(jìn)行只讀訪問時(shí)候,應(yīng)該采用JDBC for Reading Pattem,即通過JDBC直接訪問數(shù)據(jù)庫。
3. 總結(jié)
(1)由表l所示列出了兩種調(diào)用方法的優(yōu)劣比較,其中,EJB的可擴(kuò)展性的意義是:在數(shù)據(jù)庫建立初期,考慮服務(wù)是為500個(gè)終端200個(gè)并發(fā)考慮的,但是業(yè)務(wù)在一段時(shí)間后擴(kuò)展了,可能達(dá)到1000個(gè)終端,400個(gè)并發(fā)。如果架構(gòu)設(shè)計(jì)的不好,無法滿足使用需求,就會(huì)造成前期投資的失敗。如果使用EJB??梢詫⑵渲幸徊糠值膶?shí)體Bean部署到其他的服務(wù)器上,使得負(fù)載均衡,從而減小了人力以及經(jīng)濟(jì)方面的損失。
(2)EJB中的實(shí)體Bean與JDBC直接調(diào)用數(shù)據(jù)庫各有利弊.單獨(dú)使用JDBC直接操作完全可以達(dá)到操作數(shù)據(jù)庫的目的,這一點(diǎn)在功能上與結(jié)合EJB進(jìn)行操作沒有區(qū)別。問題的關(guān)鍵是我們對(duì)于項(xiàng)目的分布能力以及擴(kuò)展性的要求上,如果預(yù)計(jì)應(yīng)用于分布式的系統(tǒng)中,應(yīng)該優(yōu)先選擇EJB;如果項(xiàng)目的擴(kuò)展要求不高,使用JDBC也可以滿足要求.
參考文獻(xiàn)
[1] 郭廣軍,陳代武.基于JDBc的數(shù)據(jù)庫訪問技術(shù)的研究[J].南華大學(xué)學(xué)報(bào),2005,19(2):60~62.
[2] 歐陽宏基,葛萌.基zf:JDBC與設(shè)計(jì)模式的數(shù)據(jù)庫連接實(shí)現(xiàn)方法[J].計(jì)算機(jī)技術(shù)與發(fā)展,201 1,21(1):85~87.
[3] 董久敏,楊旭.電力客戶關(guān)系管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].制造業(yè)自動(dòng)化,201 1,33(4):149~151.
[4] 吳吉義,王中友.MySQL原理與Web系統(tǒng)開發(fā)[M].北京:清華大學(xué)出版社,2009.
[文章編號(hào)]1619-2737(2015)06-20-623