和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          JNDI概述

          JNDI(Java Naming and Directory Interface)的中文意思是Java命名和目錄接口。
          借助于JNDI ,開發者能夠通過名字定位用戶,機器,網絡,對象,服務。 JNDI的常見功能有定位資源,如定位到內網中一臺打印機,定位Java對象或RDBMS(關系型數據庫管理系統)等
          在EJB,RMI,JDBC等JavaEE(J2EE)API技術中JNDI得到了廣泛應用。JNDI為J2EE平臺提供了標準的機制,并借助于名字來查找網絡中的一切對象。

          理解“命名和目錄服務”

          在掌握JNDI之前,開發者必須理解命名和目錄服務。
          名字類似于引用,即能標識某實體如對象,人等。在企業應用中,經常需要借助于名字實現對各種對象的引用,如借助于名字引用電話號碼,IP地址,遠程對象等。
          命名服務類似于話務員,如果需要打電話給某人,但又不知道他的電話號碼,于是將電話打到查詢臺,以便能夠詢問到用戶的電話號碼,打電話者需要提供人名給他。隨后,話務員就能查到那人的電話號碼。



          命名服務的功能

          將名字與對象綁定在一起,這類似于電話公司提供的服務,比如將人名綁定到被叫端的電話。
          提供根據名字查找對象的機制。這稱為查找對象或者解析名字。這同電話公司提供的服務類似,比如根據人名查找到電話號碼。

          在現實的計算機環境中,命名服務很常見,如需要定位網絡中的某臺機器,則借助于域名系統(Domain Name System,DNS)能夠將機器名轉化成IP地址。

          目錄對象和目錄服務

          在命名服務中,借助名字能夠找到任何對象,其中有一類對象比較特殊,它能在對象中存儲屬性,它們被稱之為目錄對象或稱之為目錄入口項(Directory Entry)。將目錄對象連接在一起便構成了目錄(Directory),它是一個樹狀結構的構成,用戶可以通過節點和分支查找到每個目錄對象。
          目錄服務是對命名服務的擴展,它能夠依據目錄對象的屬性而提供目錄對象操作。

          JNDI的概念和主要用途

          為實現命名和目錄服務,基于java的客戶端需要借助于JNDI系統,它為命名和目錄服務架起了通信的橋梁。JNDI的主要用途有:
          開發者使用JNDI,能夠實現目錄和Java對象之間的交互。
          使用JNDI,開發者能獲得對JAVA事務API中UserTransaction接口的引用。
          借助于JNDI,開發者能連接到各種資源工廠,如JDBC數據源,Java消息服務等。
          客戶和EJB組件能夠借助于JNDI查找到其他EJB組件。

          名字,綁定和上下文的概念

          JNDI中存在多種名字,一種是原子名,如src/com/sitinspring中的src,com和sitinspring;一種是復合名,它由0個或多個原子名構成,如src/com/sitinspring。
          綁定就是將名字和對象關聯起來的操作。如system.ini綁定到硬盤中的文件, src/com/sitinspring/.classpath分別綁定到三個目錄和一個文件。
          上下文(Context)由0個或多個綁定構成,每個綁定存在不同的原子名。如WEB-INF文件夾下分別含有.cvsignore和web.xml的文件名。在JNDI中, WEB-INF是上下文,它含有原子名.cvsignore和web.xml的綁定,它們分別綁定到硬盤中的文件。
          上下文中也允許存在上下文,它們被成為子上下文(subcontext),子上下文和上下文類似,它也能含有多個名字到對象的綁定。這類似于文件夾下含有子文件夾。

          命名系統和初始上下文

          命名系統由一套連在一起的上下文構成,而且這些上下文使用了相同的命名語法。可以用目錄樹來類比這個概念。
          瀏覽命名空間的起點稱之為初始上下文(Initial Context),初始上下文類似于目錄樹中的根節點概念。

          借助于初始上下文,能夠開始命名和目錄服務。

          JNDI查找資源示例

          try {
            Context initCtx = new InitialContext();
            // java:comp/env是命名空間,相當于是本機JNDI資源引用根目錄
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            Member bean = (Member) envCtx.lookup("Member");

            System.out.print("member name=" + bean.getMemberName() + " age="
                + bean.getAge());
          } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }

          JNDI有關API

          list():用于獲得當前上下文的綁定列表
          lookup():用于解析上下文中名字綁定,該操作將返回綁定到給定名字的對象。
          rename():重新命名
          createSubContext():從當前上下文創建子上下文。
          destroySubContext():從當前上下文銷毀子上下文。
          bind()。從當前上下文中創建名字到對象的綁定。
          rebind():再次綁定,如果已經存在同名綁定則覆蓋之。

          posted on 2008-03-20 12:55 和風細雨 閱讀(666) 評論(0)  編輯  收藏 所屬分類: J2EE


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


          網站導航:
           
          主站蜘蛛池模板: 盘山县| 甘德县| 安龙县| 罗甸县| 乌拉特前旗| 衡水市| 长岛县| 桑植县| 阳山县| 肇庆市| 韩城市| 宜宾市| 邓州市| 沛县| 怀来县| 景宁| 大关县| 长泰县| 巴彦县| 建水县| 双城市| 株洲县| 新河县| 惠州市| 疏勒县| 扎鲁特旗| 金平| 甘谷县| 额敏县| 嘉定区| 紫阳县| 综艺| 翁牛特旗| 东乌珠穆沁旗| 延边| 剑川县| 黔东| 定边县| 开阳县| 礼泉县| 尤溪县|