大風起兮

          我不知道風是在哪一個方向吹

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            7 隨筆 :: 0 文章 :: 3 評論 :: 0 Trackbacks
          Java術語

          英文全稱是:Java Naming and Directory Interface

          術語解釋:一組幫助做多個命名和目錄服務接口的API。

          JNDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,通過不同的訪問提供者接口JNDI SPI的實現,由管理者將JNDI API映射為特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。集群JNDI實現了高可靠性JNDI[8],通過服務器的集群,保證了JNDI的負載平衡和錯誤恢復。在全局共享的方式下,集群中的一個應用服務器保證本地JNDI樹的獨立性,并擁有全局的JNDI樹。每個應用服務器在把部署的服務對象綁定到自己本地的JNDI樹的同時,還綁定到一個共享的全局JNDI樹,實現全局JNDI和自身JNDI的聯系。

          JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,為開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的接口,類似JDBC都是構建在抽象層上。
          JNDI可訪問的現有的目錄及服務有:
          DNS、XNam 、Novell目錄服務、LDAP(Lightweight Directory Access Protocol 輕型目錄訪問協議)、 CORBA對象服務、文件系統、Windows XP/2000/NT/Me/9x的注冊表、RMI、DSML v1&v2、NIS。
          JNDI優點:
          包含了大量的命名和目錄服務,使用通用接口來訪問不同種類的服務;
          可以同時連接到多個命名或目錄服務上;
          建立起邏輯關聯,允許把名稱同Java對象或資源關聯起來,而不必指導對象或資源的物理ID。
          JNDI程序包:
          javax.naming:命名操作;
          javax.naming.directory:目錄操作;
          javax.naming.event:在命名目錄服務器中請求事件通知;
          javax.naming.ldap:提供LDAP支持;
          javax.naming.spi:允許動態插入不同實現。
          利用JNDI的命名與服務功能來滿足企業級APIs對命名與服務的訪問,諸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通過JNDI來使用CORBA的命名服務。
          JNDI與JDBC:
          JNDI提供了一種統一的方式,可以用在網絡上查找和訪問服務。通過指定一個資源名稱,該名稱對應于數據庫或命名服務中的一個紀錄,同時返回數據庫連接建立所必須的信息。
          代碼示例:
          try{
          Context cntxt = new InitialContext();
          DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
          }
          catch(NamingException ne){
          ...
          }
          JNDI與JMS:
          消息通信是軟件組件或應用程序用來通信的一種方法。JMS就是一種允許應用程序創建、發送、接收、和讀取消息的JAVA技術。
          代碼示例:
          try{
          Properties env = new Properties();
          InitialContext inictxt = new InitialContext(env);
          TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");
          ...
          }
          catch(NamingException ne){
          ...
          }
          訪問特定目錄:舉個例子,人是個對象,他有好幾個屬性,諸如這個人的姓名、電話號碼、電子郵件地址、郵政編碼等屬性。通過getAttributes()方法
          Attribute attr =
              directory.getAttributes(personName).get("email");
          String email = (String)attr.get();
          通過使用JNDI讓客戶使用對象的名稱或屬性來查找對象:
          foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
          通過使用JNDI來查找諸如打印機、數據庫這樣的對象,查找打印機的例子:
          Printer printer = (Printer)namespace.lookup(printerName);
          printer.print(document);
          瀏覽命名空間:
          NamingEnumeration list = namespace.list("o=Widget, c=US");
          while (list.hasMore()) {
          NameClassPair entry = (NameClassPair)list.next();
          display(entry.getName(), entry.getClassName());
          }

          參考資料:
          http://java.sun.com/products/jndi/examples.html
          http://java.sun.com/products/jndi/serviceproviders.html
          常用的JNDI操作:
          常用的JNDI操作:
          void bind(String sName,Object object);――綁定:把名稱同對象關聯的過程
          void rebind(String sName,Object object);――重新綁定:用來把對象同一個已經存在的名稱重新綁定
          void unbind(String sName);――釋放:用來把對象從目錄中釋放出來
          void lookup(String sName,Object object);――查找:返回目錄總的一個對象
          void rename(String sOldName,String sNewName);――重命名:用來修改對象名稱綁定的名稱
          NamingEnumeration listBinding(String sName);――清單:返回綁定在特定上下文中對象的清單列表
          NamingEnumeration list(String sName);
          代碼示例:重新得到了名稱、類名和綁定對象。
          NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
          ...
          while ( namEnumList.hasMore() )  {
          Binding bnd = (Binding) namEnumList.next();
          String sObjName = bnd.getName();
          String sClassName = bnd.getClassName();
          SomeObject objLocal = (SomeObject) bnd.getObject();
          }

          參考資料:
           http://java.sun.com/products/jndi/
          posted on 2007-07-18 11:26 三胖 閱讀(519) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 新昌县| 博兴县| 石首市| 阿图什市| 卢龙县| 祁东县| 涞源县| 扬中市| 大英县| 靖州| 济阳县| 大竹县| 卓尼县| 泸水县| 安塞县| 洛南县| 广安市| 昌宁县| 荔浦县| 获嘉县| 武陟县| 林口县| 志丹县| 乐业县| 翁牛特旗| 诸暨市| 隆德县| 平阳县| 岐山县| 阿巴嘎旗| 洛隆县| 西乌珠穆沁旗| 蓬安县| 陵川县| 增城市| 苗栗市| 无为县| 吉安市| 周宁县| 永州市| 开封县|