RMI規範–第六章

來源:互聯網
上載者:User
RMI規範(6)

註冊服務程式介面
---------------------------------------------------------------------
----------
第 6 章

RMI 系統使用 java.rmi.registry.Registry 介面和 java.rmi.registry.Locat
eRegistry 類來為按名字檢索和註冊對象提供眾所周知的自舉服務。

registry 是一種將名字映射到遠程對象的遠程對象。所有的伺服器處理序都支援自
己的註冊服務程式或能為主機所用的單個註冊服務程式。

LocateRegistry 方法用於使註冊服務程式在特定的主機中或主機與連接埠中運行起
來。java.rmi.Naming 類方法用於調用一個遠程對象,該對象使用恰當的 Locat
eRegistry.getRegistry 方法來實現 Registry 介面。

主題:
Registry 介面
LocateRegistry 類
RegistryHandler 介面

6.1 Registry 介面
java.rmi.registry.Registry 遠程介面可為查詢、綁定、再綁定、取消綁定和列
出註冊服務程式內容提供方法。java.rmi.Naming 類用 registry 遠程介面提供
基於 URL 的命名。

package java.rmi.registry;

public interface Registry extends java.rmi.Remote {
public static final int REGISTRY_PORT = 1099;
public java.rmi.Remote lookup(String name)
throws java.rmi.RemoteException,
java.rmi.NotBoundException, java.rmi.AccessException;
public void bind(String name, java.rmi.Remote obj)
throws java.rmi.RemoteException,
java.rmi.AlreadyBoundException, java.rmi.AccessException;
public void rebind(String name, java.rmi.Remote obj)
throws java.rmi.RemoteException, java.rmi.AccessException;
public void unbind(String name)
throws java.rmi.RemoteException,
java.rmi.NotBoundException, java.rmi.AccessException;
public String[] list()
throws java.rmi.RemoteException, java.rmi.AccessException;
}

REGISTRY_PORT 是註冊服務程式的預設連接埠。

lookup 方法返回綁定到指定 name 的遠程對象,而遠程對象則實現一組遠程介面
。客戶機可將遠程對象強制轉換為所期望的遠程介面類型(該強制類型轉換可能
以它在 Java 語言中的常見失敗方式而失敗)。

bind 方法將 name 與遠程對象 obj 相關聯。如果名字已綁定到某一對象上,則
拋出 AlreadyBoundExcepton。
rebind 方法將 name 與遠程對象 obj 相關聯。該名字以前的所有綁定均將被丟
棄。
unbind 方法刪除 name 和遠程對象 obj 之間的綁定。如果名字並未綁定到某一
對象上,則拋出 NotBoundException。

list 方法返回一個 Strings 數組,其中包含註冊服務程式中所綁名字的快照。
該傳回值含有註冊服務程式內容的快照。
客戶機可以使用 LocateRegistry 和 Registry 介面或基於 URL 的 java.rmi.N
aming 類的方法來訪問註冊服務程式。該註冊服務程式僅支援與伺服器位於同一
主機的客戶機的 bind、unbind 和 rebind。所有主機均可進行查詢操作。

.2 LocateRegistry 類
java.rmi.registry.LocateRegistry 類用來獲得對特定主機(包括本地主機)的
引導遠程對象註冊服務程式的引用(建立 stub),或者建立能在特定連接埠接受調
用的遠程對象註冊服務程式。

註冊服務程式實現將遠程對象名(字串)與遠程對象引用相關聯的簡單命名語
法。伺服器重新啟動不會記住這些名字和遠程對象之間的綁定。

注意,getRegistry 調用並不真正與遠程主機串連。它只簡單地建立了對遠程注
冊服務程式的本地引用,且即使遠程主機中沒有註冊服務程式運行也將獲得成功
。因此,對於該方法作為傳回值返回的遠程註冊服務程式進行進一步的方法調用
時,可能會導致失敗。

package java.rmi.registry;

public final class LocateRegistry
{
public static Registry getRegistry()
throws java.rmi.RemoteException;
public static Registry getRegistry(int port)
throws java.rmi.RemoteException;
public static Registry getRegistry(String host)
throws java.rmi.RemoteException;
public static Registry getRegistry(String host, int port)
throws java.rmi.RemoteException;
public static Registry getRegistry(String host, int port,
RMIClientSocketFactory csf)
throws RemoteException;
public static Registry createRegistry(int port)
throws java.rmi.RemoteException;
public static Registry createRegistry(int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf)
throws RemoteException;
}

前四個 getRegistry 方法返回對當前主機、指定 port 的當前主機、指定的 ho
st 或指定 host 的特定 port 的註冊服務程式引用。所返回的是帶有指定主機和
連接埠資訊的註冊服務程式的遠程 stub。

第五個 getRegistry 方法(將 RMIClientSocketFactory 作為參數)返回本地創
建的遠程 stub,它對應於指定 host 和 port 上的遠程對象 Registry。與用該
方法構造 stub 的遠程註冊服務程式進行通訊時,將使用所提供的 RMIClientSo
cketFactory、csf 來建立到遠程主機和連接埠的註冊服務程式的 Socket 串連。

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

注意 - 從 getRegistry 方法返回的註冊服務程式是含有已知物件識別碼的專門
構造的 stub。目前仍不支援將註冊服務程式 stub 從一個虛擬機器傳給另一個虛擬
機(其有效性將取決於實現)。使用 LocateRegistry.getRegistry 方法可以獲
得主機的相應註冊服務程式。

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

createRegistry 方法建立和匯出特定 port 的本地主機的註冊服務程式。

第二種 createRegistry 方法在與註冊服務程式通訊時更富有靈活性。該調用將
在本地主機中建立和匯出 Registry,本地主機使用自訂通訊端工廠用於與註冊
服務程式的通訊。所建立的註冊服務程式在給定的 port 上使用從 RMIServerSo
cketFactory 所建立的 ServerSocket 監聽到來請求。接收到註冊服務程式引用
的客戶機將使用從 RMIClientSocketFactory 所建立的 Socket。

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

注意 - 使用 createRegistry 方法啟動註冊服務程式不能保持伺服器處理序的活動
性。

6.3 RegistryHandler 介面

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

注意 - JDK1.2 中不鼓勵使用 RegistryHandler 介面。JDK1.1 中,它僅由 RMI
實現在內部使用,而不能用於應用程式。

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

package java.rmi.registry;

public interface RegistryHandler
{
Registry registryStub(String host, int port)
throws java.rmi.RemoteException, java.rmi.UnknownHostException;
Registry registryImpl(int port) throws java.rmi.RemoteException;
}

方法 registryStub 返回一個與位於指定主機和連接埠的遠程註冊服務程式進行聯
系的 stub。

方法 registryImpl 將構造並匯出位於指定的連接埠的註冊服務程式。連接埠必須為
非零。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.