無為

          無為則可為,無為則至深!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
          RMI 系統(tǒng)使用 java.rmi.registry.Registry 接口和 java.rmi.registry.Locat 
          eRegistry 類來為按名字檢索和注冊(cè)對(duì)象提供眾所周知的自舉服務(wù)。  

          registry 是一種將名字映射到遠(yuǎn)程對(duì)象的遠(yuǎn)程對(duì)象。所有的服務(wù)器進(jìn)程都支持自 
          己的注冊(cè)服務(wù)程序或能為主機(jī)所用的單個(gè)注冊(cè)服務(wù)程序。 

          LocateRegistry 方法用于使注冊(cè)服務(wù)程序在特定的主機(jī)中或主機(jī)與端口中運(yùn)行起 
          來。java.rmi.Naming 類方法用于調(diào)用一個(gè)遠(yuǎn)程對(duì)象,該對(duì)象使用恰當(dāng)?shù)?nbsp;Locat 
          eRegistry.getRegistry 方法來實(shí)現(xiàn) Registry 接口。 

          主題:  
          Registry 接口  
          LocateRegistry 類  
          RegistryHandler 接口  

          6.1 Registry 接口  
          java.rmi.registry.Registry 遠(yuǎn)程接口可為查詢、綁定、再綁定、取消綁定和列 
          出注冊(cè)服務(wù)程序內(nèi)容提供方法。java.rmi.Naming 類用 registry 遠(yuǎn)程接口提供 
          基于 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 是注冊(cè)服務(wù)程序的缺省端口。 

          lookup 方法返回綁定到指定 name 的遠(yuǎn)程對(duì)象,而遠(yuǎn)程對(duì)象則實(shí)現(xiàn)一組遠(yuǎn)程接口 
          。客戶機(jī)可將遠(yuǎn)程對(duì)象強(qiáng)制轉(zhuǎn)換為所期望的遠(yuǎn)程接口類型(該強(qiáng)制類型轉(zhuǎn)換可能 
          以它在 Java 語言中的常見失敗方式而失敗)。 

          bind 方法將 name 與遠(yuǎn)程對(duì)象 obj 相關(guān)聯(lián)。如果名字已綁定到某一對(duì)象上,則 
          拋出 AlreadyBoundExcepton。 
          rebind 方法將 name 與遠(yuǎn)程對(duì)象 obj 相關(guān)聯(lián)。該名字以前的所有綁定均將被丟 
          棄。 
          unbind 方法刪除 name 和遠(yuǎn)程對(duì)象 obj 之間的綁定。如果名字并未綁定到某一 
          對(duì)象上,則拋出 NotBoundException。 

          list 方法返回一個(gè) Strings 數(shù)組,其中包含注冊(cè)服務(wù)程序中所綁名字的快照。 
          該返回值含有注冊(cè)服務(wù)程序內(nèi)容的快照。 
          客戶機(jī)可以使用 LocateRegistry 和 Registry 接口或基于 URL 的 java.rmi.N 
          aming 類的方法來訪問注冊(cè)服務(wù)程序。該注冊(cè)服務(wù)程序僅支持與服務(wù)器位于同一 
          主機(jī)的客戶機(jī)的 bind、unbind 和 rebind。所有主機(jī)均可進(jìn)行查詢操作。 

          .2 LocateRegistry 類 
          java.rmi.registry.LocateRegistry 類用來獲得對(duì)特定主機(jī)(包括本地主機(jī))的 
          引導(dǎo)遠(yuǎn)程對(duì)象注冊(cè)服務(wù)程序的引用(創(chuàng)建 stub),或者創(chuàng)建能在特定端口接受調(diào) 
          用的遠(yuǎn)程對(duì)象注冊(cè)服務(wù)程序。 

          注冊(cè)服務(wù)程序?qū)崿F(xiàn)將遠(yuǎn)程對(duì)象名(字符串)與遠(yuǎn)程對(duì)象引用相關(guān)聯(lián)的簡(jiǎn)單命名語 
          法。服務(wù)器重新啟動(dòng)不會(huì)記住這些名字和遠(yuǎn)程對(duì)象之間的綁定。 

          注意,getRegistry 調(diào)用并不真正與遠(yuǎn)程主機(jī)連接。它只簡(jiǎn)單地建立了對(duì)遠(yuǎn)程注 
          冊(cè)服務(wù)程序的本地引用,且即使遠(yuǎn)程主機(jī)中沒有注冊(cè)服務(wù)程序運(yùn)行也將獲得成功 
          。因此,對(duì)于該方法作為返回值返回的遠(yuǎn)程注冊(cè)服務(wù)程序進(jìn)行進(jìn)一步的方法調(diào)用 
          時(shí),可能會(huì)導(dǎo)致失敗。 

          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; 


          前四個(gè) getRegistry 方法返回對(duì)當(dāng)前主機(jī)、指定 port 的當(dāng)前主機(jī)、指定的 ho 
          st 或指定 host 的特定 port 的注冊(cè)服務(wù)程序引用。所返回的是帶有指定主機(jī)和 
          端口信息的注冊(cè)服務(wù)程序的遠(yuǎn)程 stub。 

          第五個(gè) getRegistry 方法(將 RMIClientSocketFactory 作為參數(shù))返回本地創(chuàng) 
          建的遠(yuǎn)程 stub,它對(duì)應(yīng)于指定 host 和 port 上的遠(yuǎn)程對(duì)象 Registry。與用該 
          方法構(gòu)造 stub 的遠(yuǎn)程注冊(cè)服務(wù)程序進(jìn)行通信時(shí),將使用所提供的 RMIClientSo 
          cketFactory、csf 來創(chuàng)建到遠(yuǎn)程主機(jī)和端口的注冊(cè)服務(wù)程序的 Socket 連接。 

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

          注意 - 從 getRegistry 方法返回的注冊(cè)服務(wù)程序是含有已知對(duì)象標(biāo)識(shí)符的專門 
          構(gòu)造的 stub。目前仍不支持將注冊(cè)服務(wù)程序 stub 從一個(gè)虛擬機(jī)傳給另一個(gè)虛擬 
          機(jī)(其有效性將取決于實(shí)現(xiàn))。使用 LocateRegistry.getRegistry 方法可以獲 
          得主機(jī)的相應(yīng)注冊(cè)服務(wù)程序。  


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

          createRegistry 方法創(chuàng)建和導(dǎo)出特定 port 的本地主機(jī)的注冊(cè)服務(wù)程序。  

          第二種 createRegistry 方法在與注冊(cè)服務(wù)程序通信時(shí)更富有靈活性。該調(diào)用將 
          在本地主機(jī)中創(chuàng)建和導(dǎo)出 Registry,本地主機(jī)使用自定義套接字工廠用于與注冊(cè) 
          服務(wù)程序的通信。所創(chuàng)建的注冊(cè)服務(wù)程序在給定的 port 上使用從 RMIServerSo 
          cketFactory 所創(chuàng)建的 ServerSocket 監(jiān)聽到來請(qǐng)求。接收到注冊(cè)服務(wù)程序引用 
          的客戶機(jī)將使用從 RMIClientSocketFactory 所創(chuàng)建的 Socket。 


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

          注意 - 使用 createRegistry 方法啟動(dòng)注冊(cè)服務(wù)程序不能保持服務(wù)器進(jìn)程的活動(dòng) 
          性。  


          6.3 RegistryHandler 接口  

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

          注意 - JDK1.2 中不鼓勵(lì)使用 RegistryHandler 接口。JDK1.1 中,它僅由 RMI 
           實(shí)現(xiàn)在內(nèi)部使用,而不能用于應(yīng)用程序。  


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

          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 返回一個(gè)與位于指定主機(jī)和端口的遠(yuǎn)程注冊(cè)服務(wù)程序進(jìn)行聯(lián) 
          系的 stub。 

          方法 registryImpl 將構(gòu)造并導(dǎo)出位于指定的端口的注冊(cè)服務(wù)程序。端口必須為 
          非零。

          凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
          、轉(zhuǎn)載請(qǐng)注明來處和原文作者。非常感謝。

          posted on 2005-12-14 13:14 草兒 閱讀(130) 評(píng)論(0)  編輯  收藏 所屬分類: Java編程經(jīng)驗(yàn)談
          主站蜘蛛池模板: 上思县| 炉霍县| 佳木斯市| 仪陇县| 易门县| 军事| 萨嘎县| 拉萨市| 东辽县| 万源市| 连山| 天全县| 比如县| 遂平县| 来安县| 万安县| 大理市| 布尔津县| 扎鲁特旗| 杭州市| 甘谷县| 通海县| 大英县| 富宁县| 邵阳市| 湖南省| 大冶市| 星座| 镇雄县| 宣化县| 丽江市| 乐亭县| 开江县| 怀远县| 通城县| 邯郸市| 安平县| 潢川县| 怀宁县| 集贤县| 云霄县|