top
Loading...
用CORBA創建Client/Server程序
假如你想找一個利用面向對象的方法去連接一個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)通信。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗