程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> DELPHI多層分布式開發(1)

DELPHI多層分布式開發(1)

編輯:Delphi

分布式多層數據庫開發簡介

Delphi提出的MIDAS(Multi-Tier distributed Application Services Suite多層分布式應用服務器組),是把原來Two- Tier數據連接放到了服務器端 的COM組件上,客戶端只剩下了執行文件和MIDAS.DLL,前台和服務器上的COM組 件,通過DCOM機制互相溝通。

這個多的一層,稱為應用程序服務器(Application Server),或者稱為中 間件。這種多層分布式工作機制,主要基於這樣幾點考慮:

1) 減少客戶機的維護量,因為前台程序比較簡單;

把企業邏輯封裝在通用的中間件應用服務器中,不同的客戶都可以共享同一 個中間層(包括Web),而不必每個客戶都單獨實現企業規則,避免了重復開發 和維護的麻煩。由於客戶程序相當瘦(這就是現在流行的瘦客戶機概念),無論 是開發還是發布,都變得簡單了。

2) 便於升級,當中間件升級的時候,客戶程序可能不需要變化;

3) 實現了分布式數據處理,把一個應用程序分布在幾台機器上運行,可以 提高應用程序的性能,也可以把敏感部分封裝在中間件,為不同的用戶設置不同 的訪問權限,增強了安全性。

4) 減少直接連接數據庫的用戶數目,減少費用。

在Delphi 6.0上,在原來的MIDAS基礎上,發展了DataSnap技術,在很多細節 方面,它提供了原來MIDAS所沒有的許多功能,使用上更加方便了。

DataSnap主要提供客戶端和中間件之間的通信,不但支持COM+技術也支持 TCP/IP或者CORBA,它們使用類似的界面和方法,其結果由程序自動完成,這就 大大擴充了它的應用范圍。

下面我們通過幾個例子來說明多層數據庫的設計問題。

主要想解決這樣幾個問題:如何建立一個簡單的分布式系統,如何使用SQL, 如何傳遞附加信息和向客戶提供服務器方法,如何建立主從表結構。理解了這些 方法,我們就可以建立屬於自己的性能更加高超的數據庫系統來。

這些實例,我們不但要會做,更要理解。

必須要提醒的是,前台機器上除了應用程序以外,還必須把一個MIDAS.DLL文 件復值到前台機器上,這個文件在服務器的WINNT\System32目錄下。

服務器端程序

服務器端程序實際上是個COM 工程,它本身連接數據源,再通過接口與客戶 端聯系,這個COM 工程必須注冊在服務器上。

首先建立一個空白的工程。

file -> New -> Other -> Multitier -> Remote Data Module(遠程數據模塊)

對話框: Coclass Name : COM程序的名稱,前台依據這個名字查找COM程序 (Pct121) Instancing :執行模式,大部分用Multiple Instance(多重實例)

Threading Model:線程模式,建議用Apartment(單元)

下面我們就會對這幾個選擇詳加說明。

OK,產生一個窗口,在這個窗口裡,可以放入數據控件。

在Viwe -> Type Libray 中,我們可以看到這個COM 的一些特性。我們也 可以記下系統提供的GUID,以備後來使用。

加入一個ADOTable,並設置其指向一個數據庫。

再設置一個DataSetProvider(在DataAccess頁)指向ADOTable

這就完成了服務器端的程序設計。保存,編譯,注冊(注意,只要運行就自 動在本機注冊了)。

這裡需要做幾個說明:

1) 在客戶端,數據控件一般要和Datasource相連,但在服務器端,主要要 考慮數據和接口相連,Delphi 5.0以上版本規定,使用DataSetProvider

就不需要再針對每個控件做Export(導出)操作,而是由應用程序服務器自 動幫前台查找這就簡化了程序和維護量。但是,前台每個DataSet 必須有個

對應的DataSetProvider 才行。

2)關於建立COM 時的幾個選項現在說明一下:

A) Instancing :

Multiple Instance: 一個應用程序可以被多個前台程序調用使用,啟動和執 行的效率比較高,不耗費服務器太多的資源,管理上也比較方便。

Single Instance: 一個應用程序只能被一個前台程序調用,由於沒有排隊問 題,所以當某個查詢崩潰時,不會影響其它的查詢,但是,一個前台調用必然在 服務器上建立一個應用程序服務器的Process (進程),占用資源比較多,影響 服務器整體執行效率。

Internal: 建立一個In-Process的COM 程序(也就是DLL文件的格式),由 於Mult-Tier 結構中,應用程序服務器和前台程序是放在不同的地方的,兩台機 器的兩個程序就無法共享同一個Process,所以很少設置成Internal模式的。

B) Threading Model:

Apartment: 每個實例一次只能處理一個前台發出的Request(請求),如果 同時建立多個In-Process COM 程序,那每個COM 程序就會有一個現程服務,所 以數據是安全的,當然要注意某些共享變量的沖突。

Single: 單線程,循環工作,不會出現多任務的問題。

Free : 可以讓Remote Data Module自己處理多線程問題,客

戶端程序需要用多線程方法來處理。

Both : 和Free幾乎相同,但對應前台界面的Callback都是連

續的。

如果注冊後無法確認是否注冊成功,可以用C:\WINNT\Regedit.exe檢查。

客戶端程序

在Two-Tier模式中,客戶端(Client)程序是直接和服務器的數據源相連的, 而Multi-Tier模式,多個客戶端連接的是一個應用程序服務器,因為收費是按客 戶端數計算的,所以,數據庫的使用費用比較低。

下面的例子只提供了數據庫操作的最基本的功能,主要說明數據源的連接方 法。

1)建立一個普通的工程。

2)放置一個TDCOMConnrction控件(在Datasnap頁),屬性:

在本機注冊時,可直接設置以下屬性:

ServerName:應用程序服務器注冊名(pro1.pc121)

Connected=true 激活

這時你可以看到服務器端的COM 程序被激活了。

如果在網絡上調試,需要給出服務器名:

ComputerName:服務器名(自動給出網上鄰居)

注意:

ServerGUID的GUID值是自動給出的。

3)放置一個TClientDataSet控件(在Data Access頁)

屬性:

Name=cdsCustomer(重新起名)

RemoteServer= DCOMConnrction1

ProviderName:=DataSetProvider1(服務器端將被激活)

Active=true (激活後將能正常連接)

4)放置TDataSource,屬性:

Dataset:指向cdsCustomer。

其余猶如普通的數據庫設計。我們也可以練習一下TActionList控件的使用, 先做一個小練習:先用普通的方法連上數據庫,並用表格顯示:

放一個Toolbar加入四個按鈕。然後把Standard--àActionList加入進去。

在ActionList上右鍵,選:Action List Editor

多層數據庫中的一個例子在“客戶端-2”中。其中寫入和退出在Standard Action 內找不到,需要自己編,在ToolBar1內再加入兩個Button,寫:

procedure TForm1.ApplyUpdateExecute(Sender: TObject);
begin
cdsCustomer.ApplyUpdates(-1);
ShowMessage('已經正確地寫入數據庫中!!');
end;
procedure TForm1.CloseActionExecute(Sender: TObject);
begin
Close;
end;

下面裝飾這個Button組,調入一個ImageList1,調入相應的圖形:

ToolBar1的屬性Image=ImageList1

ShowHint=true

把每個Button的Hint的屬性放入適當的值。只要服務器端正確的注冊,這個 程序使用是沒有問題的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved