大風(fēng)起兮

          我不知道風(fēng)是在哪一個(gè)方向吹

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            7 隨筆 :: 0 文章 :: 3 評(píng)論 :: 0 Trackbacks
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Java術(shù)語(yǔ)

          英文全稱是:Java Naming and Directory Interface

          術(shù)語(yǔ)解釋:一組幫助做多個(gè)命名和目錄服務(wù)接口的API。

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

          JNDI(Java Naming and Directory Interface)是一個(gè)應(yīng)用程序設(shè)計(jì)的API,為開(kāi)發(fā)人員提供了查找和訪問(wèn)各種命名和目錄服務(wù)的通用、統(tǒng)一的接口,類似JDBC都是構(gòu)建在抽象層上。
          JNDI可訪問(wèn)的現(xiàn)有的目錄及服務(wù)有:
          DNS、XNam 、Novell目錄服務(wù)、LDAP(Lightweight Directory Access Protocol 輕型目錄訪問(wèn)協(xié)議)、 CORBA對(duì)象服務(wù)、文件系統(tǒng)、Windows XP/2000/NT/Me/9x的注冊(cè)表、RMI、DSML v1&v2、NIS。
          JNDI優(yōu)點(diǎn):
          包含了大量的命名和目錄服務(wù),使用通用接口來(lái)訪問(wèn)不同種類的服務(wù);
          可以同時(shí)連接到多個(gè)命名或目錄服務(wù)上;
          建立起邏輯關(guān)聯(lián),允許把名稱同Java對(duì)象或資源關(guān)聯(lián)起來(lái),而不必指導(dǎo)對(duì)象或資源的物理ID。
          JNDI程序包:
          javax.naming:命名操作;
          javax.naming.directory:目錄操作;
          javax.naming.event:在命名目錄服務(wù)器中請(qǐng)求事件通知;
          javax.naming.ldap:提供LDAP支持;
          javax.naming.spi:允許動(dòng)態(tài)插入不同實(shí)現(xiàn)。
          利用JNDI的命名與服務(wù)功能來(lái)滿足企業(yè)級(jí)APIs對(duì)命名與服務(wù)的訪問(wèn),諸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通過(guò)JNDI來(lái)使用CORBA的命名服務(wù)。
          JNDI與JDBC:
          JNDI提供了一種統(tǒng)一的方式,可以用在網(wǎng)絡(luò)上查找和訪問(wèn)服務(wù)。通過(guò)指定一個(gè)資源名稱,該名稱對(duì)應(yīng)于數(shù)據(jù)庫(kù)或命名服務(wù)中的一個(gè)紀(jì)錄,同時(shí)返回?cái)?shù)據(jù)庫(kù)連接建立所必須的信息。
          代碼示例:
          try{
          Context cntxt = new InitialContext();
          DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
          }
          catch(NamingException ne){
          ...
          }
          JNDI與JMS:
          消息通信是軟件組件或應(yīng)用程序用來(lái)通信的一種方法。JMS就是一種允許應(yīng)用程序創(chuàng)建、發(fā)送、接收、和讀取消息的JAVA技術(shù)。
          代碼示例:
          try{
          Properties env = new Properties();
          InitialContext inictxt = new InitialContext(env);
          TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");
          ...
          }
          catch(NamingException ne){
          ...
          }
          訪問(wèn)特定目錄:舉個(gè)例子,人是個(gè)對(duì)象,他有好幾個(gè)屬性,諸如這個(gè)人的姓名、電話號(hào)碼、電子郵件地址、郵政編碼等屬性。通過(guò)getAttributes()方法
          Attribute attr =
              directory.getAttributes(personName).get("email");
          String email = (String)attr.get();
          通過(guò)使用JNDI讓客戶使用對(duì)象的名稱或?qū)傩詠?lái)查找對(duì)象:
          foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
          通過(guò)使用JNDI來(lái)查找諸如打印機(jī)、數(shù)據(jù)庫(kù)這樣的對(duì)象,查找打印機(jī)的例子:
          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);――綁定:把名稱同對(duì)象關(guān)聯(lián)的過(guò)程
          void rebind(String sName,Object object);――重新綁定:用來(lái)把對(duì)象同一個(gè)已經(jīng)存在的名稱重新綁定
          void unbind(String sName);――釋放:用來(lái)把對(duì)象從目錄中釋放出來(lái)
          void lookup(String sName,Object object);――查找:返回目錄總的一個(gè)對(duì)象
          void rename(String sOldName,String sNewName);――重命名:用來(lái)修改對(duì)象名稱綁定的名稱
          NamingEnumeration listBinding(String sName);――清單:返回綁定在特定上下文中對(duì)象的清單列表
          NamingEnumeration list(String sName);
          代碼示例:重新得到了名稱、類名和綁定對(duì)象。
          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 三胖 閱讀(522) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 那曲县| 益阳市| 自贡市| 呼和浩特市| 尤溪县| 太谷县| 维西| 沈丘县| 辽宁省| 綦江县| 景谷| 梅河口市| 滨州市| 临沂市| 广南县| 太保市| 容城县| 肇州县| 辉南县| 依兰县| 永济市| 阿瓦提县| 洱源县| 昌江| 喀喇| 施秉县| 赤壁市| 石楼县| 左贡县| 项城市| 读书| 滕州市| 关岭| 南昌市| 台北市| 郑州市| 措美县| 丰原市| 河间市| 姜堰市| 南乐县|