JAVA命名和目錄服務(JNDI)

J2EE 中, JNDI 的目的是用來查找 J2EE 服務器的註冊資源(如 EJB 等)

一、 JNDI 簡介

命名服務提供了一種爲對象命名的機制,這樣你就可以在無需知道對象位置的情況下獲取和使用對象。只要該對象在命名服務器上註冊過,且你必須知道命名服務器的地址和該對象在命名服務器上註冊的 JNDI 名。就可以找到該對象,獲得其引用,從而運用它提供的服務。

       利用 JNDI 可以尋找在命名服務器上註冊過的所有對象。

JNDI 就是爲 JAVA 中命名和目錄服務定義的 JAVA API ,是命名服務的抽象機制。我們可以直接通過 JNDI 來操作命名服務,而不要與底層的命名服務器交互,大大減輕了程序員的壓力。

二、 應用 JNDI

1.   啓動和關閉 JNDI 服務器

在用 j2ee –verbose 啓動 J2EE 服務器的同時,也就啓動了 JNDI 服務器。一般情況下, J2EE 服務器啓動的同時, JNDI 服務器也就啓動了。

J2ee –stop 關閉 JNDI 服務器

2.         獲得名字服務的初始環境

Contect ctx=new InitailContext();

這樣獲得的初媽環境爲默認的命名服務。假如你想改變提供 JNDI 服務的類(或廠商)和提供 JNDI 服務的命名服務器,可以採用以下方法:

Hashtable Env=new Hashtable();

Env.put(Context.INITIAL_CONTEXT_FACTORY,”com.sun.enterprise.naming.SerialInitContextFactory”);// 指定提供命名服務的類名

Env.put(Context.PROVIDER_URL,”localhost:1099”);// 指定提供命名服務的服務器名和端口

Context ctx=new InitialContext(env);

2.   對象綁定

bind(String name,Object o) 方法 ,把對象 o 綁定到名字 name

:import javax.naming.*;

public class TestJNDI{

public static void main(String[] args){

        try{

        Context ctx=new InitialContext();

        Ctx.bind(“ABC”,”JAVA1”);// JAVA1 字符串綁定到 ABC

        }catch(NamingException e){

        e.printStackTrace();

        }

        }

}

 

如果名字已綁定或命名服務器沒有啓動,則會出現 NamingException 異常

3.         重新綁定

ctx.rebind(String name,Object o)

:ctx.rebind(“ABC”,”JAVA2”);// 現在 ABC 就綁定到 JAVA2 字符串

4.         解除綁定

ctx.unbind(String name);

不過你要確保該名字存在,否則出現 NameNotFoundException 異常

5.         查找已綁定的對象

ctx.lookup(String name); 根據 name 找對象

:

import javax.naming.*;

public class TestJNDI{

public static void main(String[] args){

        try{

        Context ctx=new InitialContext();

        Object o=ctx.lookup(“ABC”);// 根據 JNDI 名查找綁定的對象

        String s=(String)o;// 強制轉換             

        }catch(NamingException e){

        e.printStackTrace();

        }catch(ClassCastException e){

        e.printStackTrace();

        }

        }

}

6.         EJB 中的應用 ( 查找 EJB HOME 對象 )

InitialContext ic=new InitialContext();

Object o=ic.lookup(“java:comp/env/ejb/Hello”);// 利用 JNDI 名查找 EJB HOME

HelloHome home=(HelloHome)PortableRemoteObject.narrow(lookup,HelloHome.class);// 定位 EJB //HOME 對象

Hello hello=home.create();// EJB HOME 創建 EJB 對象

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 3150
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章