假如你想找一個利用物件導向的方法去串連一個Client到Server,你有兩個主要的選擇:DCOM和CORBA。DCOM是微軟的解決方案,並且當你為WINDOWS系統寫代碼時非常有用。在本文中,我們將要研究用CORBA去解決分布式應用程式問題。
CORBA概要:
在一個通常的用C++或者JAVA寫的物件導向的程式裡,程式包含所有應用程式需要用到的類。編譯器編譯和串連這些對象,當你用new語句初始化對象時,它們被建立在應用程式所在的記憶體裡並且被當作一個簡單的過程來執行。
CORBA是一種技術允許一個Client程式調用屬於一個Server的對象,這個Server可以是運行在同一台機器或者是幾千裡外的機器。在它的最基本的階段,CORBA是非常簡單的-執行個體化一個在你的處理記憶體空間的對象代替你在通常的程式中所做的,你可以執行個體化這個對象無論在哪一個網路的Server上。調用這個對象的方法以及這些方法需要傳遞的參數被打包成網路包的格式發送到伺服器上。這個功能實際上是運行在伺服器上,返回結果通過網路傳遞到調用者。
這種方案的優點是伺服器可以作為高效的、共用的資源中心,以Server為基礎的CORBA對象可以訪問Server的資料庫和其它服務。當然,它的缺點是速度。每秒調用功能的數目被網路速度嚴格限制,以便保證其它技術通過網路傳輸資料,因而,CORBA不是獨儀無二的。DCOM,甚至Socket都要忍受同樣的延遲。
用CORBA方法特別的方面是可以方便的調用ORB(Object Request Broker), ORB處理和操作Client和Server之間的串連。在下面的例子裡我們將要用Inprise VisiBroker ORB。用VisiBroker,Client和Server都用一個叫做OSAGENT的服務,OSAGENT用一個標準的連接埠(通常是14000)串連Client,OSAGENT可以當作一個目錄去協助Client的ORB去找到一個它要找的對象。
用java設定一個簡單的CORBA的Client和Server是非常簡單的,在下面我們將要看到幾段例子程式碼片段去顯示這個過程,在接下來的部分我們將要解釋代碼怎樣工作的,我們從關鍵字"安裝"開始。
安裝
用文檔中的例子代碼,除了VisiBroker ORB之外你需要下載Sun的JDK1.1,你能下載SDK從http://java.sun.com/products/jdk/1.1/index.html。我們用JDK1.1代替1.2是為了避免和java2的ORB衝突。你可以得到VisiBroker ORB從http://www.inprise.com/visibroker/。先裝SDK,再裝ORB。
例子代碼
為了建立一個CORBA Server並且讓Client訪問它,你要決定Server類將要做什麼再開始。在這個例子裡我們要用一個非常簡單的Server類,這個類擁有一個私人的整型變數,在這個類裡的一個方法將要增加這個整型變數,並且另一個方法將要允許Client訪問這個變數的正確值,下面是這個類的介面描述:
//Counter.idl
module Counter{
interface Count
{
void increment();
long getCounter();
};
};
這個類被命名為Count,它的兩個方法是Increment和getCounter,這個類被包含在一個叫Counter的模板中,只要你願意這個模板可以包含好幾個不同的類,把這IDL代碼放在一個叫Counter.idl名字的檔案中。
為了用這個IDL檔案,你需要IDL2JAVA去運行它,這個工具將要創Client和Server要用到的類,IDL2JAVA產生的Client類叫做Helper並且被命名為CountHelper.java,Client用helper類去調用Server的功能,IDL2JAVA產生的Server類叫做ImplBase並且被命名為_CountImpleBase.java,你將要執行這些Server擴充ImplBase的方法。
注意:當你在Client直接用CounterHelper.java類時,當你調用一個Counter介面的方法時執行在Client的代碼是_st_Counter.java。這個類調用stub把資料打包發送到Server並且返回正確的資料,它同Server端的skeleton(是_sk_Counter.java,繼承與_CounterImplBase.java)通訊。