|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
請參見:
描述
介面摘要 | |
---|---|
RMIConnection | RMI 物件,用於將 MBeanServer 請求從客戶端轉發到其位於伺服器端的 MBeanServer 實作。 |
RMIServer | 用於建立到 RMI 連接器的連接的 RMI 物件。 |
類別摘要 | |
---|---|
RMIConnectionImpl | RMIConnection 介面的實作。 |
RMIConnectionImpl_Stub | |
RMIConnector | 一個到遠端 RMI 連接器的連接。 |
RMIConnectorServer | JMX API 連接器伺服器,用於從遠端客戶端創建基於 RMI 的連接。 |
RMIIIOPServerImpl | 一個 RMIServerImpl ,它通過 IIOP 導出,並可創建如同由 IIOP 導出的 RMI 物件的客戶端連接。 |
RMIJRMPServerImpl | 一個 RMIServer 物件,它通過 JRMP 導出,並可創建如同由 JRMP 導出的 RMI 物件的客戶端連接。 |
RMIServerImpl | 表示連接器伺服器的 RMI 物件。 |
RMIServerImpl_Stub |
RMI 連接器是供 JMX Remote API 使用的一種連接器,後者使用 RMI 將客戶端請求傳輸到遠端 MBean 伺服器。此套件定義了 RMI 連接器的使用者直接參考客戶端和伺服器方所需的類別。它還定義了其他一些類別,使用者雖然不經常直接參考這些類別,但還是必須定義它們,主要是為 RMI 連接器的不同實作之間實作互操作。
RMI 連接器支持 RMI 的 JRMP 和 IIOP 傳輸方式。
與 JMX Remote API 中的多數連接器類似,RMI 連接器通常有一個位址,它是一個 JMXServiceURL
。對於使用預設 RMI 傳輸方式 (JRMP) 的連接器,此位址的協議部分為 rmi
;對於使用 RMI/IIOP 的連接器,位址的協議部分為 iiop
。
RMI 連接器位址有兩種形式:
RMIServer
的 Java 物件,它提供了對連接器伺服器的遠端存取。使用這種位址形式,可從套件含在 URL 中的外部目錄條目獲取 RMI 樁模組。外部目錄是指可由 JNDI
識別的任何目錄,通常是 RMI 註冊表、LDAP 或 CORBA 命名服務 (COS Naming)。
以下內容更詳細地介紹了位址。
創建 RMI 連接器伺服器的一般方法是為方法 JMXConnectorServerFactory.newJMXConnectorServer
提供一個 RMI 連接器位址。將與連接器伺服器連接的 MBean 伺服器可作為該方法的一個參數指定。或者,也可以將連接器伺服器註冊為該 MBean 伺服器中的 MBean。
還可以通過建構 RMIConnectorServer
的實例(顯式或使用 MBean 伺服器的 createMBean
方法)來創建 RMI 連接器伺服器。
在創建連接器伺服器時,通過在 serviceURL
的 protocol
部分指定 rmi
或 iiop
,您可以選擇 RMI 傳輸方式(JRMP 或 IIOP)。通過實例化 RMIServerImpl
的一個適當的子類別並將其提供給 RMIConnectorServer
建構子,還可以創建特殊的連接器伺服器。
如果您指定的 serviceURL
套件含空 URL 路徑(在可選的主機和埠號後),或者未指定 serviceURL
,則連接器伺服器將創建一個可供客戶端連接使用的新 JMXServiceURL
:
如果 serviceURL
如下所示:
service:jmx:rmi://host:port
則連接器伺服器將產生一個 RMIJRMPServerImpl
,且返回如下所示的 JMXServiceURL
:
service:jmx:rmi://host:port/stub/XXXX
其中,XXXX
為所產生物件的樁模組的序列化形式,其編碼採用 BASE64,不帶換行。
如果 serviceURL
如下所示:
service:jmx:iiop://host:port
則連接器伺服器將產生一個 RMIIIOPServerImpl
,且返回如下所示的 JMXServiceURL
:
service:jmx:iiop://host:port/ior/IOR:XXXX
其中,IOR:XXXX
為所產生物件的互操作物件參考 (Interoperable Object Reference) 的標準 CORBA 編碼。
如果沒有 serviceURL
,則必須有一個使用者提供的 RMIServerImpl
。如果在此物件上調用 toStub
方法返回 Stub
的實例,則連接器伺服器將用上述的 iiop
形式產生 JMXServiceURL
。否則,它將用 rmi
形式產生 JMXServiceURL
。
使用者提供的 serviceURL
中的 host
為可選項。如果有這一項,則將其複製到產生的 JMXServiceURL
中,但是其他方面會忽略此項。如果沒有這一項,則產生的 JXMServiceURL
將包括本地主機名。
使用者提供的 serviceURL
中的 port
也是一個可選項。如果有這一項,則同樣將其複製到產生的 JMXServiceURL
中;否則,產生的 JMXServiceURL
不帶埠號。對於使用 rmi
協議的 serviceURL
,如果有 port
,則它指示產生的遠端物件應在該埠號上導出。它沒有任何其他作用。
如果使用者提供了 RMIServerImpl
而不是 JMXServiceURL
,則產生的 JMXServiceURL
將在其 host
部分包含本地主機名並且不帶 port
。
作為剛才介紹的產生位址的另外一種情況,創建連接器伺服器時提供的 serviceURL
位址指定的是目錄位址,其中可存儲提供的或產生的 RMIServer
樁模組。然後客戶端和伺服器都可以使用此目錄位址。
這種情況下,serviceURL
具有如下兩種形式之一:
service:jmx:rmi://host:port/jndi/jndi-name
service:jmx:iiop://host:port/jndi/jndi-name
其中 jndi-name
是一個可提供給 javax.naming.InitialContext.bind
的字元串。
同樣,host
和 :port
均可忽略。
連接器伺服器將基於協議(rmi
或 iiop
),對於 rmi
,還包括 port
(如果有)產生 RMIServerImpl
。連接器伺服器啟動後,它將從此物件使用其 toStub
方法派生一個樁模組並使用給定的 jndi-name
保存該物件。同樣也要參考由 JNDI API 定義的屬性。
例如,假設 JMXServiceURL
為:
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
則連接器伺服器將產生 RMIJRMPServerImpl
並使用該 JNDI 名稱保存其樁模組
rmi://myhost/myname
它表示運行在主機 myhost
的預設埠號上 RMI 註冊表中的 myname
項。注意,RMI 註冊表只允許從本地主機註冊。因此在這種情況下,myhost
必須是運行連接器伺服器的主機名。
在此 JMXServiceURL
中,第一個 rmi:
指定 RMI 連接器,第二個 rmi:
指定 RMI 註冊表。
另舉一個例子,如果 JMXServiceURL
為:
service:jmx:iiop://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that
則該連接器伺服器將產生 RMIIIOPServerImpl
並使用該 JNDI 名稱保存其樁模組
ldap://dirhost:9999/cn=this,ou=that
它表示 LDAP 目錄中的 cn=this,ou=that
條目,該目錄在運行主機 dirhost
的埠號 9999 上。
如果 JMXServiceURL
為:
service:jmx:iiop://ignoredhost/jndi/cn=this,ou=that
則該連接器伺服器將產生 RMIIIOPServerImpl
並使用該 JNDI 名稱保存其樁模組
cn=this,ou=that
要在這種情況下正常工作,JNDI API 必須經過適當配置,以提供有關要使用的目錄的資訊。
這些範例中,主機名 ignoredhost
未被連接器伺服器或其客戶端使用。可將其忽略,例如:
service:jmx:iiop:///jndi/cn=this,ou=that
但是,在連接器伺服器運行的主機上使用主機名是一個不錯的做法。主機名通常不同於目錄主機的名稱。
使用預設的 JRMP 傳輸方式時,可使用為 RMIConnectorServer
建構子給定的 environment
中的 jmx.remote.rmi.client.socket.factory
和 jmx.remote.rmi.server.socket.factory
屬性指定 RMI Socket處理器。這些屬性的值的型別必須分別為 RMIClientSocketFactory
和 RMIServerSocketFactory
。這些處理器在創建與連接器關聯的 RMI 物件時使用。
RMI 連接器客戶端通常使用 JMXConnectorFactory
且具有協議 rmi
或 iiop
的 JMXServiceURL
進行建構。
如果 JMXServiceURL
由伺服器產生,如上文中的“伺服器產生的連接器位址”所述,則客戶端將需要直接或間接地從伺服器獲取該值。通常,伺服器將 JMXServiceURL
存儲在一個檔案或尋找服務中以便於使用。
如果 JMXServiceURL
使用目錄語法,如上文中的“基於目錄條目的連接器位址”所述,則客戶端可用剛剛介紹的方法獲取該值,或者客戶端和伺服器可能都知道要使用的適當目錄條目。例如,如果 Whatsit 代理的連接器伺服器使用主機 myhost
上 RMI 註冊表中的 whatsit-agent-connector
條目,則客戶端和伺服器都知道適當的 JMXServiceURL
為:
service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector
如果 RMI 樁模組的型別為 RMIServer
,則可以使用 RMIConnector
的適當建構子直接建構 RMI 連接。
使用 IIOP 傳輸方式時,客戶端和伺服器可使用屬性 java.naming.corba.orb
指定要使用的 ORB。連接器伺服器連接到 ORB 的動作發生時間為 start
,連接器客戶端連接到 ORB 的動作發生時間為 connect
。如果 java.naming.corba.orb
屬性包含在環境 Map 中,則其值(一個 ORB
)將用於連接 IIOP Stub。否則,將通過調用 org.omg.CORBA.ORB.init((String[])null,(Properties)null)
創建一個新的 org.omg.CORBA.ORB。位於同一 JVM 中的後續 RMI 連接器客戶端或伺服器可重用此 ORB,或者可用同樣的方式創建另一個 ORB。
如果指定了 java.naming.corba.orb
屬性但它並不指向一個 ORB
,則將拋出
。IllegalArgumentException
當 IIOP 遠端物件(Stub 或 Server)在被傳入到 RMIConnector 和 RMIConnectorServer 之前通過手動創建和連接到 ORB 時,這裡描述的機制將不適用。
如果 RMI 連接器客戶端或伺服器從其同級設備收到一個無法識別的類別實例,並且動態程式碼下載此時可以進行 RMI 連接,則可以從同級設備指定的程式碼基下載類別。文章 Dynamic code downloading using Java RMI 對此進行了詳細解釋。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。