<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 45, 文章 - 6, 評論 - 4, 引用 - 0
    數據加載中……

    JNDI詳解

    JNDI
    Java Naming and Directory Interface

    首先需要對naming與directory 有最基本的認識,進而了解使用JNDI 的原因:
    1、naming
    Naming 在電腦系統上是最基本的服務之一,藉著名稱 (names)與物件 (objects)的系結 (binding),使用者透過正確地描述環境(context)來存取欲使用的物件。例如:DNS(Domain Name System)將主機名稱「 javacenter.cis.th u.edu.tw」對應到 IP Address「 140.128.104.30」,以方便使用者記憶。
    2、directory
    Directory可視為 naming概念的擴充,讓物件擁有屬性 (attributes)以記錄額外的資訊。於是,我們可以透過名稱來查看(look up)物件并獲得該物件的屬性資訊,或是利用屬性作為搜尋的過濾條件 (search filter)。例如:電話簿,記錄著每個人登記的電話號碼。從這個最常見的例子中不難看出directory與 database明顯的差異之一:directory 的屬性可以有很多筆資料,正如每個人可以同時擁有很多個電話號碼。 Directory目前在電腦系統上較著名的應用系統與架構有 Novell公司的 NDS(Novell Directory Services)、Sun公司的NIS(Network Information Service),與即將成為網絡上一個新標準的 LDAP(Lightweight Directory Access Protocol)。

    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是一個應用程序設計的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());
    }

    常用的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();
    }

    posted on 2009-12-20 12:29 liyang 閱讀(506) 評論(0)  編輯  收藏 所屬分類: j2se

    主站蜘蛛池模板: 成人免费毛片内射美女APP| 久久亚洲AV成人出白浆无码国产| 亚洲一级毛片免费看| 男人的天堂网免费网站| 亚洲中文字幕AV每天更新| 18禁止看的免费污网站| 国产成人精品高清免费| 亚洲精品亚洲人成在线| www永久免费视频| 美丽姑娘免费观看在线观看中文版| 亚洲女同成av人片在线观看| 国产A∨免费精品视频| 成年女人18级毛片毛片免费| 亚洲首页国产精品丝袜| 久青草视频在线观看免费| 成人毛片免费观看视频| 亚洲欧美成人av在线观看| 免费一级一片一毛片| 精品97国产免费人成视频 | 色婷婷六月亚洲综合香蕉| 国产成人在线免费观看| sihu国产精品永久免费| 亚洲高清视频在线观看| 亚洲精品又粗又大又爽A片| 亚洲成av人片在线观看天堂无码| 亚洲视频一区二区| 亚洲伦理中文字幕| 国产乱人免费视频| 亚洲一级毛片在线观| 免费A级毛片无码A| 久久久久久久岛国免费播放| 国产成人精品亚洲2020| 亚洲精品综合久久| 99热在线精品免费播放6| 亚洲熟妇自偷自拍另欧美| 国产成人麻豆亚洲综合无码精品 | 日本免费A级毛一片| 亚洲一区电影在线观看| 亚洲精品国产V片在线观看| 免费人妻无码不卡中文字幕系| 亚洲中文字幕无码亚洲成A人片 |