2013-01-23 68 views
2

我在使用IIOP協議的CORBA中應用程序,我使用JDK 6的Java IDL組件,另一個ORB實現。CORBA ::使用IIOP獲取客戶端ORB地址和端口

以Java語言實現客戶端和服務器。

JDK ORB實現中有沒有辦法從 服務器(ORB)代碼中獲取客戶端ORB的主機和端口?

或者

有沒有辦法在使用IIOP協議,獲得客戶端的主機和端口?

這是我們正在做的客戶端的識別跟蹤誰請求

+0

你能更好地解釋你的*問題嗎?我認爲你以不同的方式解決你的問題。 – Makah

回答

2

我不認爲有任何可移植的方式來做到這一點。也許對於你特定的ORB,我不知道。回想一下,CORBA會盡力隱藏應用程序中的傳輸細節。應用程序甚至可能不使用IIOP,因此在任何情況下都無法獲取TCP主機和端口信息。

您可能需要考慮將額外的標識符參數添加到您的IDL中,以便服務器可以識別客戶端。您還可以考慮讓客戶端在服務器上調用「註冊」功能,並且服務器會提供一個標識符,以便在隨後的調用中所有客戶端必須回傳給服務器。

此標識符可以像字符串或整數一樣簡單,也可以像服務器必須使用公鑰驗證的某種安全令牌那樣複雜。這一切都取決於您的應用程序的要求。

+0

多數民衆贊成在另一種選擇,我有。 但是,想要從IIOP協議本身獲得本地支持來解決這個問題 – ajduke

+3

CORBA背後的全部理念是應用程序不需要知道傳輸細節。因此沒有便捷的方式來獲取這些信息。例如,除了IIOP之外,我可以在另一個傳輸層之上運行CORBA,其中尋址細節與TCP/IP完全不同。 –

+0

當然,沒有人阻止要求調用者將自己的IP作爲字符串參數傳遞,但這是非常不安全的級別,不清楚爲什麼應該完成(我可以通過任何我能想象的IP)。相反,要求註冊導出的對象引用可能會更好,然後可以根據我的文章中所述從該引用獲取host:port。 – h22

1

這取決於情況,但有時您需要從IOR中提取主機/端口以進行測試,記錄和調試。 IOR包含主機和端口,您只需要從IOR表示的字節數組中解碼即可。因此,只需從GNU Classpath中獲取CORBA規範和IorParser.java(大規模依賴)作爲示例,並在週末有時間進行解碼。)

如果您沒有時間作爲我,可以使用命令行工具與球體是未來:

  1. tao_catior在TAO/ACE ORB
  2. iordump中的Orbix/Orbacus的ORB的
  3. 解析IOR與網絡在線工具http://www2.parc.com/istl/projects/ILU/parseIOR/
  4. 沒有找到可能使用JDK CORBA做解析。雖然代碼絕對是內部太陽包的某個地方。
  5. dior in Jacorb ORB。或者java jacorb.Orb.util.PrintIOR -i [IOR-string]

對我來說,答案#5已經足夠好了。我使用Jacorb來開發基於Java的測試工具。但是接着PrintIOR需要org.jacorb.orb.ORB被org.omg.CORBA.ORB.init()實例化。因此,如果您被迫在同一個JVM中使用JDK ORB,這可能會非常棘手。

相關問題