摘要:本文討論了分佈式多層應用體系的結構、特點及實現技術。分析了用Delphi實現基於MIDAS技術的多層結構,並舉例說明實現多層結構的步驟。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
關鍵詞:多層結構,客戶端,應用程序服務器,遠程數據庫服務器
1 多層結構應用體系
1.1 二層結構的退出
在傳統的二層C/S結構數據庫應用中,客戶端的機器執行應用程序,連接到後端的數據庫服務器中存取應用系統所需資料,因爲應用系統的企業邏輯都編寫在客戶端的應用程序中,造成客戶端非常臃腫,且當應用系統需求改變時,所有在客戶端的應用程序都必須改變,使維護成本太高。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
|
MSQL
客戶端1 數據庫服務器 Sybase等
圖一2層C/S結構
1.2 多層結構的概念和特點
爲了解決這些問題,多層結構應用體系應運而生,即在傳統的二層C/S模型中放入應用程序服務器。應用程序服務器簡單地說就是一個包含企業邏輯的應用程序,開發人員以一種特定的組件形態,如Microsoft COM/DCOM,CORBA對象,或Enterprise JAVA Bean等,封裝企業邏輯的程序代碼,這種經過封裝,能夠執行特定企業功能的對象被稱爲“企業對象”,把這些企業對象分發到應用程序服務器中,開發人員在開發應用程序時就可以使用這些企業對象提供的服務。
多層結構的典型是三層結構,其基本思想是把用戶界面與企業邏輯分離。整體結構如圖二所示。
客戶端 應用程序服務器 遠程數據庫服務器
(提供用戶界面) (包含企業邏輯) (Oracle,MSQL,Sybase等DBMS)
圖二 三層結構模型
(1) 客戶端應用程序。提供用戶接口,主要功能是指導操作人員使用界面,輸入數據,輸出結果,並不具有企業邏輯,或只擁有部分不涉及企業核心的、機密的應用邏輯。這樣客戶端就顯的很廋,稱爲“廋”客戶。
(2) 應用程序服務器。它是應用的主體,包含了企業中核心的及易變的企業邏輯(規劃,運作方法,管理模型等),其功能即接受輸入,處理後返回結果。
(3) 遠程數據庫服務器。即數據庫管理系統(DBMS),負責管理對數據的讀寫和維護。
在更復雜的多層體系結構中,“廋”客戶與遠程數據庫服務器之間可以加入更多的中間服務器,如加入一箇中間安全服務器或中間轉換服務器,用於對不同平臺數據進行處理。
分佈式多層結構把整個應用系統的執行分成數個不同部分並且執行在不同的機器中。其中應用程序服務器作爲中間層集中實現企業邏輯,協調多層之間的請求,並掌握數據集定義的全部細節和遠程數據庫服務器進行通信,這樣客戶端應用程序就重點放在顯示數據和與用戶交互上,客戶端應用程序甚至都不需要知道數據在那兒。
具體來說,多層結構具有如下優點:
(1) 在一個共享的中間層封裝了企業邏輯,不同客戶端應用程序可以共享同一個中層層,而不必由每個客戶端應用程序單獨實現企業邏輯。
(2)客戶端應用程序可以做的很廋。因爲很多複雜的工作由應用程序服務器代勞,客戶端應用程序只需關注用戶界面本身。“廋”客戶端應用程序更易發佈、安裝、配置和維護。
(3)實現分佈式數據處理。把一個應用程序分佈在幾個機器上運行,可以提供應用程序的性能,通過冗餘配置還可以保證不會因爲局部故障導致整個應用程序崩潰。
(4)有利於安全。將一些敏感數據功能部分封裝在中間層,並授予不同訪問權限,可以保證對數據的訪問限制。
1.3 多層結構使用的技術。
目前分佈式多層結構使用的核心大致可以分爲兩種不同的工業標準,即Microsoft制定的COM/DCOM/COM+和由700多家廠商共同提倡的CORBA。因分佈式結構的廣泛流行,現也有愈來愈多的根據這兩種分佈式核心技術加以演進而產生的分佈式技術,如EJB(Enterprise Java Bean)等。
Microsoft的COM/DCOM/COM+是以Windows爲中心的開發環境,CORBA是平臺中立的分佈式技術,CORBA能夠執行於Windows,UNIX以及Linux等操作系統中。這些技術都能使開發人員在應用程序中輕易地使用企業對象所提供的服務。這兩種分佈式技術都在客戶端機器中以一個特別的對象來仿真真正的遠程應用程序服務器上的企業對象,這樣客戶端應用程序就可以調用在客戶端機器中的仿真對象,該對象再使用特定的通訊協議來真正調用遠程應用服務器上的企業對象,從而調用遠程企業對象的服務,以滿足客戶端的要求。
2 在Delphi中實現基於MIDAS的多層結構
2.1 在Delphi中多層結構的實現
在Delphi中多層結構的基礎是MIDAS(Multi-tier Distributed Application Service Suite,多層分佈式應用服務器組)技術。MIDAS是一些不同技術的集合,無論是應用程序服務器還是客戶端,MIDAS技術需要DBClient.dll和MIDAS.dll的支持,這兩個動態鏈接庫用於管理數據包,發佈MIDAS應用程序時需要發佈這個文件。
基於MIDAS的多層結構依然分爲客戶端應用程序,應用程序服務器和遠程數據庫服務器,如圖三所示。
從圖三可見,MIDAS的數據庫應用程序需要一些特殊組件,這些組件共分爲4類:
(1)遠程數據模塊。位於服務器端,作爲COM服務器或CORBA服務器讓客戶端應用程序訪問它的接口。
數據模塊 IAppServer接口 遠程數據模塊
用戶界面 |
連接組件
數據源 ClientDataSet |
DataSetProvider
DataSet組件 |
BDE |
|
客戶端應用程序 應用程序服務器 遠程數據庫服務器
圖三 MIDAS 結構
(2)DataSetProvider組件。位於服務器端,提供IAppServer接口,客戶端應用程序通過
IAppServe接口獲得數據。
(3)連接組件。位於客戶端,包括DCOMConnection,SocketConnection,CORBAConnection,
OLEnterpriseConnection,MIDASConnection 和RemoteServer 等連接組件,爲客戶端應用程序定位應用程序服務器和IAppServe接口。
(4)ClientDataSet組件。位於客戶端,訪問服務器端的IAppServe接口,它是從TdataSet繼承下來的組件。
客戶端應用程序通過IAppServe接口與應用程序服務器通訊,通訊協議爲DCOM,TCP/IP,HTTP,OLEnterprise 和CORBA。通訊協議因客戶端的MIDAS連接組件及應用程序服務器上的遠程模塊不同而不同。
2.1.1 客戶端應用程序結構
在結構上,客戶端應用程序通過標準數據控制組件與用戶交互,但是它是通過應用程序服務器提供的IAppServe接口獲得數據,也是通過IAppServe接口更新數據。所謂“廋”客戶即指不依賴BDE的數據集(TClientDataSet 組件)構成的客戶端應用程序。TClientDataSet 榧譴?/SPAN>TDataSet派生出來的客戶端數據集組件,它扮演了與TTable或TQuery同樣的角色,但它不需要BDE,它把通過IAppServe接口獲得的數據在客戶端內存中建立副本,對數據進行操作。直接訪問遠程數據庫服務器的是應用程序服務器。
遠程數據模塊 |
說明 |
RemoteDataModule |
支持雙重接口的自動化服務器,支持DCOM,TCP/IP或OLEnterprise協議。 |
MTSDataMoudle |
支持雙重接口的自動化服務器,創建的應用程序服務器是動態鏈接庫,支持DCOM,TCP/IP或OLEnterpris協議。 |
CORBADataMoudule |
CORBA服務器,支持CORBA協議 |
在客戶端,MIDAS連接組件非常重要,不同連接組件使用不同的通訊協議,如表一所示。
連接組件 |
通訊協議 |
DCOMConnection |
DCOM |
SocketConnection |
TCP/IP |
WebConnection |
HTTP |
OLEnterprise |
OLEnterprise |
CORBAConnection |
CORBA |
表一 MIDAS連接方式 表二 支持MIDAS的數據模塊
2.1.2 應用程序服務器
應用程序服務器的關鍵部件是遠程數據模塊,在遠程數據模塊上,TTable,TQuery等BDE數據集組件通過BDE與遠程數據庫服務器連接訪問數據庫,DataSetProvider組件輸出IAppServer接口,DataSetProvider組件通過DataSet屬性與數據集組件相連,這樣客戶端通過IAppServer接口就可以訪問數據。
Delphi支持三種類型的遠程數據模塊,如表二示。
2.2 用MIDAS創建多層結構數據庫應用程序實例
建立多層結構應用系統,必須先建立應用程序服務器,並運行註冊之,再建立客戶端。下面就以筆者創建的一個三層結構爲例來介紹用D elphi實現三層結構的步驟。(假設在應用程序服務器上已設好BDE連接,連到遠程數據庫服務器。)
2.2.1 建立應用程序服務器。(在應用程序服務器上建立)
(1)使用File菜單下的New Application建立一個新應用程序。
(2)創建遠程模塊。使用File菜單下的New打開New Items對話框,在Multitier選項下,雙擊Remote Data Module,設置Classname 爲rdm,Instancing及Threading Module屬性取默認值。
(3)在該遠程模塊上放一個Query1(Tqueyr組件),DatabaseName屬性中指定爲要訪問的數據庫,如“出版社”。在該遠程模塊上再增加一個DataSetProvider1(TDataSetProvider組件),DataSet 屬性設爲Query1,Options屬性中令poAlloCommandtext爲true。(設爲true,則客戶端應用程序中TClientDataSet的屬性commandtext中的SQL語句就可以通過IAppServer接口傳遞。)
至此,應用程序服務器已創建完畢,運行該應用程序服務器在系統中註冊它,在應用程序服務器上運行ScktSrvr.exe文件,這樣今後客戶端程序就可以調用該應用程序服務器。
2.2.2 創建客戶端應用程序。(在客戶端機器上創建)
(1)建立數據模塊。使用File菜單下的New Application建立一個新應用程序。在New Item中雙擊Data Module建立一個數據模塊(命名爲dm),在該模塊上放一個連接組件SocketConnection1 (TsocketConnection組件),其IP屬性中指定應用程序服務器的IP地址,在Port屬性中取默認值211,在ServerName屬性中設置應用程序服務器(在這裏,應用程序服務器就是上面創建的名爲rdm的應用程序服務器。),這樣就可以定位應用程序服務器和IAppServer接口。在dm數據模塊上再增加一個ClientDataSet1(TClientDataSet組件),其RemoteServer屬性設爲SocketConnection1,ProviderName爲DataSetProvider1。保存該unit爲dm。
(2)創建用戶界面。使用File菜單下的New Form新建一個unit,在該unit中引用上面建立的數據模塊單元dm。在用戶界面Form上添加DataSource1(TdataSource組件),其DataSet
屬性設爲dm.ClientDataSet1,即上面數據模塊中的客戶端數據集組件。添加一個DBGrid1(TDBGrid組件),DataSource屬性設爲DataSource1。添加一個Btton1組件,caption屬性爲“查詢”,其click事件中程序代碼爲:
procedure TForm1.Button1click(sender:Tobject);
begin
with dm.ClientDataSet1 do
begin
close;
commandtext:=’select * from 書’;
open;
end;
end;
至此該三層結構已創建完畢,保存運行客戶端應用程序,點擊查詢按鈕(即Btton1按鈕),則客戶端應用程序將激活應用服務器程序,通過IAppServer接口把dm.ClientDataSet1中的SQL語句傳到Query1,Query1通過BDE訪問數據庫服務器,查到的數據再通過IAppServer接口傳給dm.ClientDataSet1,並在DBGrid1上顯示出來。
3 結束語
多層結構是因網絡發展的需要而出現的產物,運用面向對象技術,分離用戶界面和企業邏輯,解決了兩層結構的維護成本高,客戶端臃腫等弊端,且改善了延展性。在Delphi中採用MIDAS技術,運用COM/DCOM/COM+或CORBA標準,爲多層結構的開發提供了強大功能,增加了開發人員的生產力。
參考文獻
1. 李維著,Delphi 5.X分佈式應用系統篇,機械工業出版社,2000年4月。
2. 新智工作室編著,Delphi 5數據庫編程,電子工業出版社,2000年9月。
3. 徐新華編著,Delphi 高級編程——Database與MIDAS編程,人民郵電出版社,2000年4月。
作者:張玉珍,黃東 轉貼自:東南大學