- 論壇徽章:
- 0
|
ORBit FAQ
[翻譯] mhss 2004-02-14
--------------------------------------------------------------------------------
1.CORBA
a.) 一個客戶是怎樣連接到一個服務器?
這是眾所周知的關(guān)于 CORBA 的問題(更精確的說法是在任何分布蕉韻笙低持芯?嬖謖飧鑫侍?。它通常以術(shù)語"bootstrapping"(引導)描述。一般的說, 可以從名字服務( Name Service)(或者 Trading Object Service) 獲得對象的引用, 但是名字服務自身也是對象(有賴于 CORBA 清晰的設計)。既然名字服務自身也是對象,你如何得到對它的引用呢?
一個客戶的標準的解決方法是,通過交換可互操作對象引用(Interoperable Object Reference 縮寫是 IOR)找到對一個服務器的第一個對象引用。服務器進程通過使用 object_to_string()方法產(chǎn)生一個已創(chuàng)建對象的 IOR。生成的字符串,也叫字符串化對象引用,可通過任何媒介傳輸,象 email、HTTP、NFS、文件系統(tǒng),甚至是在浮瓶中的便條 。客戶進程從媒介中讀取 IOR 并通過string_to_object()把它轉(zhuǎn)換回原來的二進制表示。在此之后客戶擁有了一個對服務器的有效的引用,這樣就可以用通常的方式調(diào)用(invoke 也譯為激發(fā))方法。
直到現(xiàn)在,各種不同的 ORB 未能提出解決這個重要的引導問題的標準方式。一個例子是 Visibroker 位置服務。 ORB 通過一個專有的_bind()方法在一個中心的服務中登記每個對象。通過網(wǎng)絡廣播來發(fā)現(xiàn)服務。這種機制的缺點是有關(guān)對象的信息存儲在一個中心表中 。這個表需要在規(guī)律性的基礎上的更改。這是必須的,因為惡意的對象不徹底的去除登記。如果廣播的間隔太短,更改將導致在網(wǎng)絡上有大量的噪音 。如果廣播的間隔太長,表中將包括僵尸對象。這種專有的解決方案在許多主要的 CORBA 實現(xiàn)中存在。
理想的方法是 resolve_initial_references(),它被用于找到一個命名服務的引用。這樣 ORB 不要求開發(fā)者寫一些額外的代碼就可以讀取 IOR。 在過去每個 ORB 用自己的命令行參數(shù)把 IOR 到 ORB 的核心。(ORBit: ORBNamingIOR=IOR:.....)。 可互操作命名服務 (Interoperable Naming Service 縮寫為 INS) 定義(ptc/99-12-03) 引進了標準的命令行參數(shù) -ORBInitRef 來完成這項工作。
yourclientapp -ORBInitRef NameService=IOR_of_naming_service
唯一的竅門是把argc和argv傳遞給ORB的ORB_init()調(diào)用,這樣ORB的核心就能展開有關(guān)參數(shù),下面的調(diào)用之后
nsobj = resolve_initial_references("NameService" ;
返回想要的對象引用。INS 規(guī)范定義是除 IOR 之外的另一個可被人閱讀的對象引用。
corbaloc:iiop://IIOPVersion@hostname:port/ObjectKey
corbaloc 通過提供可被人閱讀的地址,給出了一個客戶指向一個服務器對象的另一種可能的方式。提出另一個的方案是 corbaname,它查閱在主機上的命名服務,用 hostname 指定。
corbaname://hostname#a/b/obj
a/b/obj 指定一個名字,例如一個 NameComponents 的序列, 它用于解析一個對象引用。這種機制將極大的增進整個引導過程并最終解決問題,這在過去曾經(jīng)是最鬧心的重要問題。可被人閱讀的對象引用 corbaloc 也有一些毛病。他們認為 INS 規(guī)范減輕了擁有晦澀的 IOR 的事實。指定協(xié)議的細節(jié),象端口號或協(xié)議版本號,在用于傳輸?shù)膮f(xié)議被交換時將導致引用變得無效。對象的 URL 必須被擴展來支持新協(xié)議的信息,而 IOR 是一個數(shù)字的序列,永遠保持不變。
ORBit 的 CVS HEAD 版本部分的實現(xiàn)了 INS 規(guī)范(參見 NameService)。
Michi Henning 對這個問題的更詳細的描述在 here。
b.) 我如何在 IDL 中指定缺省的參數(shù)?
IDL 不允許指定缺省參數(shù)。有兩個主要原因。首先, IDL 對所有的可得到的 COBRA 映射的語言提出最小的一般性限制。許多語言不支持缺省參數(shù)的概念,在映射時支持這個特征時就有困難。 其次,缺省的參數(shù)不是真正必須的。 一個接口的設計者可以輕易的把這樣的功能分割成兩個或更多的獨立的方法(注意:重載也由于同樣的原因而不被支持,所以方法必須有不同的名字)。
c.) 我如何得到 CORBA 中的客戶/服務器對象的IP地址?
IP 地址(包括端口號或其他任何協(xié)議相關(guān)的特征)隱藏在 IOR (Interoperable Object Reference)中。這種不透明的理由是 CORBA 在對象實例間可以使用任何協(xié)議用于傳輸。GIOP (General Inter ORB Protocol,通用 ORB 間協(xié)議)不依賴于任何特定網(wǎng)絡協(xié)議 。IIOP (Internet Inter ORB Protocol,Internet ORB 間協(xié)議)把 GIOP 轉(zhuǎn)換到 TCP/IP。 IIOP 支持不是 ORB 的強制性的特征,但是因為 Internet,它對于每個 ORB 都是必須實現(xiàn)的。 如果我們開始依賴于當前的一個特定協(xié)議,原始的打算就被削弱了,致使對象引用在當前有效將來無效。 (參見 TAO (The ACE ORB, ACE - Adaptive Communication Environment) 一個支持可插拔協(xié)議的 ORB)
2.ORBit
a.) 我如何安裝某一版本的ORBit而不影響GNOME桌面?
用以下命令配置軟件包:
./configure --prefix=~/orbit_test_dir --exec-prefix=~/orbit_test_dir
這里的 orbit_test_dir 是一個任意的子目錄。接著調(diào)用 make 和 make install, 他們把 ORBit 復制到指定目錄。最后你只需要調(diào)整你的 PATH 和 LD_LIBRARY_PATH 環(huán)境變量,即分別的增加 ~/orbit_test_dir/bin 到 PATH 和 ~/orbit_test_dir/lib 到 LD_LIBRARY_PATH。
b.)我不能連接到我的遠程對象?
GNOME security discussion 導致在缺省時禁止在IP服務器套接口上的IIOP(例如:端口)。
使用 UNIX 域套接口或用進程間通信的共享內(nèi)存來替代。 禁止在網(wǎng)絡上的通信只用于防止系統(tǒng)被拒絕服務攻擊。如果你打算在網(wǎng)絡上使用 ORBit就需要再次允許它。 設置可以在 /etc/orbitrc (系統(tǒng)范圍設置), 在 ~/.orbitrc (用戶的設置), 或?qū)γ總應用程序給 ORB 傳遞一個參數(shù)。在前兩個方式中你需要把 -ORBIIOPIPv4=1 放入某個 orbitrc 文件中。 控制對每個應用程序的設置通過為你的客戶/服務器應用程序在命令行提供 -ORBIIOPIPv4=1 完成,并要傳遞 argc 和 argv 參數(shù)到 CORBA_ORB_init() 調(diào)用 (缺省處理)。
你可以用命令檢查設置: netstat -ao | grep LISTEN。 不應該有任何 ORBit 相關(guān)的套接口處于被動打開(監(jiān)聽)的模式 (這樣的一行: "unix 0 [ ACC ] STREAM LISTENING XXXX /tmp/orbit-USER/orb-YYYYYYYYYYYYYYYY" 不應出現(xiàn))
c.)我在那里能得到ORBit的CVS HEAD版本?
gnome developer 站點描述了如何使用 anonymous CVS access。登錄之后你需要鍵入 "cvs -z3 co ORBit", "ORBit" 是模塊的名字。
d.)為什么在 CVS 版本和 GNOME 軟件包之間有區(qū)別?
TheGNOME 版本 1.2 的 Roadmap 要求 ORBit 二進制和源代碼相容。所以在 ORBit 軟件包上的更改在不違反這些要求的情況下是可以接受的。穩(wěn)定的分支是 orbit-stable-0-5,新的特征被增加到 CVS HEAD。
e.)CORBA_ORB_init() 支持那些參數(shù)?
CORBA 參數(shù) (INS/Core spec 定義; 只在 ORBit 的 CVS HEAD 版本中能得到 )
-ORBid
用于選擇所使用的 ORB 的標識符 (ORBit 穩(wěn)定版和 ORBit HEAD 版只支持"orbit-local-orb"; ORBit-mt 版必須使用 "orbit-local-mt-orb" 。
-ORBInitRef ObjectId=
初始的引用。參見 INS/CORBA2.4 spec 來得到進一步的信息。
-ORBDefaultInitRef
初始的引用前綴。參見 INS/CORBA2.4 spec 來得到進一步的信息。
ORBit 指定的參數(shù)(在 CVS HEAD 和 ORBit-stable-0-5 分支中可得到):
-ORBImplRepoIOR=
實現(xiàn)倉庫的 IOR;應該被上面的標準參數(shù)所取代。
-ORBIfaceRepoIOR=
接口倉庫的 IOR;應該被上面的標準參數(shù)所取代。
-ORBNamingIOR=
命名服務的 IOR;應該被上面的標準參數(shù)所取代。
-ORBDebugLevel=warning|message|info|debug|all
顯示的調(diào)試信息的總量。等級 "warning", "message", "info", "debug" 可以組合使用,":"是分隔符。 "all" 用來選擇所有信息。
-ORBDebugModules=ORB|CDR|IIOP|TC|IR
顯示調(diào)試信息的模塊。
-ORBIIOPUSock=0|1
禁止/允許 UNIX 域套接口。
-ORBIIOPIPv4=0|1
禁止/允許 IPv4 服務器套接口。
-ORBIPv4Port=#port
用于 IIOP 連接的被動打開的端口號,持久對象的引用需要這個參數(shù)(PortableServer_PERSISTENT 策略)。
-ORBIIOPIPv6=0|1
禁止/允許 IPv6 套接口。
f.) 何時、何人發(fā)起了本計劃?
3.幫助
a.) 是否有郵件列表HOWTO?
郵件列表 demon 提供一個關(guān)于如何使用的簡短描述. 發(fā)送主題是"help"的 e-mail 到 mailto rbit-list-request@NOSPAMgnome.org?subject=help&body=Remove NOSPAM from address ! 。
b.) 我如何訂閱郵件列表?
到 mail.gnome.org/mailman/listinfo/orbit-list/.
c.) 我如何從訂閱的郵件列表中退出?
到 mail.gnome.org/mailman/listinfo/orbit-list/.
d.) 我如何向郵件列表發(fā)eMail?
發(fā)送e-mail到mailto rbit-list@NOSPAMgnome.org?body=Remove NOSPAM from address !.
e.)是否有郵件列表的檔案?
在mail.gnome.org/archives/orbit-list/能得到可查找的檔案,但只包括2000年8月以前的。
可得到用于下在檔案包:
orbit-list-archive-1998.tar.gz (#1: 21. March 1998 - #765: 31. December 1998, 517 kB)
orbit-list-archive-1999.tar.gz (#766: 1. January 1999 - #2472: 31. December 1999, 972 kB)
orbit-list-archive-2000.tar.gz (#2473: 1. January 2000 - #3385: 21. August 2000, 623 kB)
完整的檔案包: orbit-list-archive.tar.gz (2112 kB)
用于檢索郵件的 Perl 腳本在: ftp://orbit-resource.sourceforge.net/pub/orbit-resource/spin-off/
f.) 我初學 CORBA.可得到那些書籍?
可得到很多書籍,主要的在線存儲很受歡迎并且評論了市場上差不多所有的 CORBA 書籍。
CORBA books at fatbrain
CORBA books at TU Vienna (2000)
Cetus' CORBA - Books
JavaWorld's CORBA books
最好的書籍中的一本是 Michi Henning 和 Steve Vinoski 的: "Advanced CORBA Programming with C++" (ISBN 0-201-37927-9)。盡管標題顯示的好象只是為 C++ 編程而寫的,它包含了對許多基本概念的解釋,對一般性的理解是有用的。(譯注:中譯本好象已經(jīng)出版了,它的標題使我只看了一眼封面,所以不能確定)
g.)可得到那些關(guān)于CORBA的新聞組?
常規(guī)的 CORBA 問題: comp.object.corba
Java CORBA 的問題: comp.lang.java.corba |
|