J2EE平台的資料存取技術
来源:网络 更新时间:2014-12-6
J2EE平台的資料存取技術
J2EE平台的資料存取技術
第三事業群研發工程師蔡博至
前言
如何讓資料庫獨立於程式設計之外的想法,一直以來是設計資料庫應用系統時所追求的目標。
原因一,避免因後端資料結構的變動,造成對程式碼的直接影響。
原因二,各資料庫都會為了自家產品的最佳化而在標準的ANSISQL之外再加上特有的語法,如MSSQLServer的T-SQL與Oracle的PL/SQL即有些許差異,只要更換後端資料庫,即意味著必須把所有在程式碼內的SQLcommand都挑出來驗證一番,以期能符合新的資料庫的語法。
而這樣的想法,在系統採用物件導向分析設計方法時得到了實現的機會。將資料儲存的機制視為一個獨立於企業邏輯的特定物件,其功能就是能把其他物件透過O/RMapping的技術存入資料庫,而不同資料庫的語法差異就在這物件內加以處理。而J2EE就是以這樣的概念為基礎,提供出完整的物件導向設計平台的解決之道,所以筆者以為這樣的目標可以試著透過J2EE來實現。
J2EE
筆者遇到這問題之初(希望企業邏輯與資料存取的程式碼分離),是希望能把存取資料的行為圈在一個固定的小圈圈內,只要牽扯到資料存取的問題,只要往那小圈圈內去找一定能找到,而不會漫無目的翻動整個系統的程式碼,在經過與他人討論研究後我們發現J2EE平台上的應用可以提供某些我們想要的功能,且只要我們稍加改變其平台架構便可以為上述問題提供一個解決之道。
J2EE全名為Java2Platform,EntERPriseEdition,提供一個多層式架構的分散式系統模型開發的平台,且彈性交易控制整合了後端資料庫的存取。
在J2EE的平台上,其元件可被分為四個層如(圖一):
1.Client-tier:此層元件會在客戶端的機器上被執行,如一些客戶端AP或動態網頁。
2.Web-tier:此層元件會在J2EEServer或WebServer上被執行,一般主要是準備一些組成Client-tier的資料與和下一層Business-tier溝通。
3.Business-tier:此層元件會在J2EEServer上執行,而此層元件所負責的就是如其名一樣負責整的系統的企業邏輯與控制邏輯。
4.Enterpriseinformationsystem(EIS)-tier:此層主要是將第三層所處理之結果加以儲存,一般被執行在EISServer,如資料庫伺服器。
screen.width-333){this.width=screen.width-333;this.alt='ClickHeretoOpenNewWindow';}"onmouseover="if(this.alt)this.style.cursor='hand';"onclick="window.open('http://www.seecen.com/news/UploadFiles_6259/201412/2014120612590134.gif');">
圖一
有了這樣的平台,我們發現設計者只須把心力放在設計Business-tier上,而前端介面呈現則可以由不具備領域知識(domainknowledge),但卻富有美感設計的設計師來規劃設計,EIS-tier呢?它真的如我們所需求的,只要我們把Business-tier上的enterprisebeans(物件的class等)設計好,J2EEServer會幫你把這些該儲存的資料放到你想放的資料庫去,而你只需要在J2EEServer上對這些enterprisebeans和資料庫伺服器稍做設定即可,如果後端資料庫更換成其他廠牌,也只需在設定檔內做調整。
然而要讓J2EEServer能管理這些Business-tier的beans,所設計的物件必須繼承特定的(J2EE標準的)物件,這樣的限制令單純的物件開發有些棘手;還有一個最大隱憂就是效能的問題。系統的使用者會覺得此種架構設計出來的系統會比傳統架構設計出來的系統慢。
於是乎,軟體的開發者所面臨的問題從原來的需求轉換成效能的問題,一旦有了問題就得要去尋找解決的方法,筆者從網路上找到一個名為Castor計劃提出來的一個概念,來針對由Java語言開發出來的物件做存取控制的一層,即為persistentlayer,此層介於原來J2EE平台上Business-tier與EIS-tier間,然而交易控制與存取控制可由設計者自行控制,且persistentlayer的植入讓原來在J2EE平台上設計enterprisebeans時所遇到的小困難變簡單了,一切好似回歸成原來物件導向設計,Castor計劃把這個工具稱為JDO(JavaDataObjects)。