歡迎您光臨本站 註冊首頁

ORBit FAQ

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  1. CORBA
問題 回答
a.) 一個客戶是怎樣連接到一個伺服器? 這是眾所周知的關於 CORBA 的問題(更精確的說法是在任何分散式對象系統中均存在這個問題)。它通常以術語"bootstrapping"(引導)描述。一般的說, 可以從名字服務( Name Service)(或者 Trading Object Service) 獲得對象的引用, 但是名字服務自身也是對象(有賴於 CORBA 清晰的設計)。既然名字服務自身也是對象,你如何得到對它的引用呢?

一個客戶的標準的解決方法是,通過交換可互操作對象引用(Interoperable Object Reference 縮寫是 IOR)找到對一個伺服器的第一個對象引用。伺服器進程通過使用 object_to_string()方法產生一個已創建對象的 IOR。生成的字元串,也叫字元串化對象引用,可通過任何媒介傳輸,象 email、HTTP、NFS、文件系統,甚至是在浮瓶中的便條 ;-) 。客戶進程從媒介中讀取 IOR 並通過string_to_object()把它轉換回原來的二進位表示。在此之後客戶擁有了一個對伺服器的有效的引用,這樣就可以用通常的方式調用(invoke 也譯為激發)方法。
直到現在,各種不同的 ORB 未能提出解決這個重要的引導問題的標準方式。一個例子是 Visibroker 位置服務。 ORB 通過一個專有的_bind()方法在一個中心的服務中登記每個對象。通過網路廣播來發現服務。這種機制的缺點是有關對象的信息存儲在一個中心表中 。這個表需要在規律性的基礎上的更改。這是必須的,因為惡意的對象不徹底的去除登記。如果廣播的間隔太短,更改將導致在網路上有大量的噪音 。如果廣播的間隔太長,表中將包括殭屍對象。這種專有的解決方案在許多主要的 CORBA 實現中存在。

理想的方法是 resolve_initial_references(),它被用於找到一個命名服務的引用。這樣 ORB 不要求開發者寫一些額外的代碼就可以讀取 IOR。 在過去每個 ORB 用自己的命令行參數把 IOR 到 ORB 的核心。(ORBit: ORBNamingIOR=IOR:.....)。 可互操作命名服務 (Interoperable Naming Service 縮寫為 INS) 定義(ptc/99-12-03) 引進了標準的命令行參數 -ORBInitRef 來完成這項工作。

yourclientapp -ORBInitRef NameService=IOR_of_naming_service

唯一的竅門是把 argc 和 argv 傳遞給 ORB 的 ORB_init()調用,這樣 ORB 的核心就能展開有關參數,下面的調用之後
nsobj = resolve_initial_references("NameService");

返回想要的對象引用。INS 規範定義是除 IOR 之外的另一個可被人閱讀的對象引用。
corbaloc:iiop://IIOPVersion@hostname:port/ObjectKey
corbaloc 通過提供可被人閱讀的地址,給出了一個客戶指向一個伺服器對象的另一種可能的方式。提出另一個的方案是 corbaname,它查閱在主機上的命名服務,用 hostname 指定。

corbaname://hostname#a/b/obj
a/b/obj 指定一個名字,例如一個 NameComponents 的序列, 它用於解析一個對象引用。這種機制將極大的增進整個引導過程並最終解決問題,這在過去曾經是最鬧心的重要問題。可被人閱讀的對象引用 corbaloc 也有一些毛病。他們認為 INS 規範減輕了擁有晦澀的 IOR 的事實。指定協議的細節,象埠號或協議版本號,在用於傳輸的協議被交換時將導致引用變得無效。對象的 URL 必須被擴展來支持新協議的信息,而 IOR 是一個數字的序列,永遠保持不變。

ORBit 的 CVS HEAD 版本部分的實現了 INS 規範(參見 NameService)。

Michi Henning 對這個問題的更詳細的描述在 here。
b.) 我如何在 IDL 中指定預設的參數? IDL 不允許指定預設參數。有兩個主要原因。首先, IDL 對所有的可得到的 COBRA 映射的語言提出最小的一般性限制。許多語言不支持預設參數的概念,在映射時支持這個特徵時就有困難。 其次,預設的參數不是真正必須的。 一個介面的設計者可以輕易的把這樣的功能分割成兩個或更多的獨立的方法(注意:重載也由於同樣的原因而不被支持,所以方法必須有不同的名字)。
c.) 我如何得到 CORBA 中的客戶/伺服器對象的IP地址? IP 地址(包括埠號或其他任何協議相關的特徵)隱藏在 IOR (Interoperable Object Reference)中。這種不透明的理由是 CORBA 在對象實例間可以使用任何協議用於傳輸。GIOP (General Inter ORB Protocol,通用 ORB 間協議)不依賴於任何特定網路協議 。IIOP (Internet Inter ORB Protocol,Internet ORB 間協議)把 GIOP 轉換到 TCP/IP。 IIOP 支持不是 ORB 的強制性的特徵,但是因為 Internet,它對於每個 ORB 都是必須實現的。 如果我們開始依賴於當前的一個特定協議,原始的打算就被削弱了,致使對象引用在當前有效將來無效。 (參見 TAO (The ACE ORB, ACE - Adaptive Communication Environment) 一個支持可插拔協議的 ORB)

Back to top


--------------------------------------------------------------------------------

2. ORBit
問題 回答
a.) 我如何安裝某一版本的 ORBit 而不影響 GNOME桌面? 用以下命令配置軟體包:
./configure --prefix=~/orbit_test_dir --exec-prefix=~/orbit_test_dir
這裡的 orbit_test_dir 是一個任意的子目錄。接著調用 make 和 make install, 他們把 ORBit 複製到指定目錄。最後你只需要調整你的 PATH 和 LD_LIBRARY_PATH 環境變數,即分別的增加 ~/orbit_test_dir/bin 到 PATH 和 ~/orbit_test_dir/lib 到 LD_LIBRARY_PATH。
b.) 我不能連接到我的遠程對象? GNOME security discussion 導致在預設時禁止在IP伺服器套介面上的IIOP(例如:埠)。使用 UNIX 域套介面或用進程間通信的共享內存來替代。 禁止在網路上的通信只用於防止系統被拒絕服務攻擊。如果你打算在網路上使用 ORBit就需要再次允許它。 設置可以在 /etc/orbitrc (系統範圍設置), 在 ~/.orbitrc (用戶的設置), 或對每個應用程序給 ORB 傳遞一個參數。在前兩個方式中你需要把 -ORBIIOPIPv4=1 放入某個 orbitrc 文件中。 控制對每個應用程序的設置通過為你的客戶/伺服器應用程序在命令行提供 -ORBIIOPIPv4=1 完成,並要傳遞 argc 和 argv 參數到 CORBA_ORB_init() 調用 (預設處理)。
你可以用命令檢查設置: netstat -ao | grep LISTEN。 不應該有任何 ORBit 相關的套介面處於被動打開(監聽)的模式 (這樣的一行: "unix 0 [ ACC ] STREAM LISTENING XXXX /tmp/orbit-USER/orb-YYYYYYYYYYYYYYYY" 不應出現)
c.) 我在那裡能得到 ORBit 的 CVS HEAD 版本? gnome developer 站點描述了如何使用 anonymous CVS access。登錄之後你需要鍵入 "cvs -z3 co ORBit", "ORBit" 是模塊的名字。
d.)為什麼在 CVS 版本和 GNOME 軟體包之間有區別? TheGNOME 版本 1.2 的 Roadmap 要求 ORBit 二進位和源代碼相容。所以在 ORBit 軟體包上的更改在不違反這些要求的情況下是可以接受的。穩定的分支是 orbit-stable-0-5,新的特徵被增加到 CVS HEAD。
e.) CORBA_ORB_init() 支持那些參數? CORBA 參數 (INS/Core spec 定義; 只在 ORBit 的 CVS HEAD 版本中能得到 )
-ORBid
用於選擇所使用的 ORB 的標識符 (ORBit 穩定版和 ORBit HEAD 版只支持"orbit-local-orb"; ORBit-mt 版必須使用 "orbit-local-mt-orb")。
-ORBInitRef ObjectId=
初始的引用。參見 INS/CORBA2.4 spec 來得到進一步的信息。
-ORBDefaultInitRef
初始的引用前綴。參見 INS/CORBA2.4 spec 來得到進一步的信息。
ORBit 指定的參數(在 CVS HEAD 和 ORBit-stable-0-5 分支中可得到):
-ORBImplRepoIOR=
實現倉庫的 IOR;應該被上面的標準參數所取代。
-ORBIfaceRepoIOR=
介面倉庫的 IOR;應該被上面的標準參數所取代。
-ORBNamingIOR=
命名服務的 IOR;應該被上面的標準參數所取代。
-ORBDebugLevel=warning|message|info|debug|all
顯示的調試信息的總量。等級 "warning", "message", "info", "debug" 可以組合使用,":"是分隔符。 "all" 用來選擇所有信息。
-ORBDebugModules=ORB|CDR|IIOP|TC|IR
顯示調試信息的模塊。
-ORBIIOPUSock=0|1
禁止/允許 UNIX 域套介面。
-ORBIIOPIPv4=0|1
禁止/允許 IPv4 伺服器套介面。
-ORBIPv4Port=#port
用於 IIOP 連接的被動打開的埠號,持久對象的引用需要這個參數(PortableServer_PERSISTENT 策略)。
-ORBIIOPIPv6=0|1
禁止/允許 IPv6 套介面。

f.) 何時、何人發起了本計劃? 計劃由 Elliot Lee 和 Dick Porter 在1998年2月發起。

Back to top


--------------------------------------------------------------------------------

3. 幫助
問題 回答
a.) 是否有郵件列表 HOWTO? 郵件列表 demon 提供一個關於如何使用的簡短描述. 發送主題是"help"的 e-mail 到 mailto:orbit-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.) 我如何向郵件列表發eMail? 發送 e-mail 到 mailto:orbit-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++ 編程而寫的,它包含了對許多基本概念的解釋,對一般性的理解是有用的。(譯註:中譯本好象已經出版了,它的標題使我只看了一眼封面,所以不能確定)
g.) 可得到那些關於CORBA的新聞組? 常規的 CORBA 問題: comp.object.corba
Java CORBA 的問題: comp.lang.java.corba


Back to top


--------------------------------------------------------------------------------

網頁製作:Michael Rumpf.


--------------------------------------------------------------------------------

翻譯:寒蟬退士


[火星人 ] ORBit FAQ已經有512次圍觀

http://coctec.com/docs/linux/show-post-70006.html