命名服務(wù)概述
命名服務(wù)(Naming Service)是可以將復(fù)雜數(shù)據(jù)對(duì)象或其引用關(guān)聯(lián)到已知名稱的機(jī)制.然后可以發(fā)布這些名稱,客戶可以使用這些名稱查詢與它們相關(guān)聯(lián)的數(shù)據(jù)對(duì)象.名稱與對(duì)象之間的關(guān)聯(lián)稱為綁定.命名服務(wù)通常與其它服務(wù)(如文件系統(tǒng),目錄和數(shù)據(jù)庫等)集成以提供這種綁定.大家可以從現(xiàn)代圖書館的卡片目錄系統(tǒng)來理解命名服務(wù).
JNDI介紹(Java Naming and Directory Inteface,Java命名與目錄接口)
JNDI是Java命名與目錄接口(Java Naming and Directory Inteface)的縮寫,有時(shí)也簡稱Java名錄服務(wù),J2EE組件通過調(diào)用JNDI提供的查找(lookup)方法以定位對(duì)象。JNDI是專門為Java設(shè)計(jì)的,一個(gè)Java應(yīng)用程序可以用JNDI檢索Java對(duì)象.JNDI還可以執(zhí)行標(biāo)準(zhǔn)目錄操作,如關(guān)聯(lián)屬性和對(duì)象,并用對(duì)象的屬性搜索它們.
JNDI名字是對(duì)象的友好名字,這些名字通過J2EE服務(wù)器提供的命名目錄服務(wù)綁定到各自的對(duì)象上。由于J2EE組件是通過JNDI編程接口訪問服務(wù)的,所以通常情況下把對(duì)象的友好名字稱之為JNDI名字。比如,mydatabase數(shù)據(jù)庫的JNDI名字為jdbc/mydatabase,一旦J2EE服務(wù)器啟動(dòng),系統(tǒng)自動(dòng)從配置文件讀取相關(guān)信息,并將jdbc/mydatabase的JNDI數(shù)據(jù)庫名字添加到名字空間。
Sun公司對(duì)JNDI的定義為”一種對(duì)Java平臺(tái)的標(biāo)準(zhǔn)擴(kuò)展,它為Java技術(shù)編寫的應(yīng)用程序提供了對(duì)企業(yè)中多種命名和目錄服務(wù)的統(tǒng)一接口.作為Java Enterprise API集的一部分,JNDI使與異構(gòu)企業(yè)命名和目錄服務(wù)的無縫連接提供了可能”.
連接工廠(Connection Factory)
連接工廠(Connection Factory)是用于產(chǎn)生鏈接對(duì)象,使得J2EE組件可以訪問資源的一種對(duì)象。比如,用于數(shù)據(jù)庫的連接工廠是javax.sql.Database對(duì)象,它產(chǎn)生java.sql.Connection對(duì)象。
JNDI和Weblogic Server
Weblogic提供了在JNDI規(guī)范中規(guī)定的實(shí)現(xiàn).這使Java客戶可以用標(biāo)準(zhǔn)JNDI調(diào)用連接到Weblogic Server.客戶可以在Weblogic命名空間中訪問Weblogic命名服務(wù)并使對(duì)象可用,還可以檢索它們.
如果希望訪問已經(jīng)加載到Weblogic Server的JNDI樹中的對(duì)象的Java客戶一般要執(zhí)行以下任務(wù):
1.與服務(wù)器建立一個(gè)上下文
2.對(duì)JNDI樹進(jìn)行查詢或者更新
取得上下文例程
這是在命名空間中訪問綁定對(duì)象的第一步.應(yīng)用程序?qū)@得引導(dǎo)上下文稱為InitialContext.它是從InitialContext工廠獲得的.這個(gè)工廠使用幾個(gè)屬性標(biāo)識(shí)上下文需要指向的Weblogic Server.
創(chuàng)建一個(gè)綁定例程
要在WeblogicJNDI樹中創(chuàng)建一個(gè)新的綁定,可使用Context.bind方法.這個(gè)方法以新綁定的名稱以及綁定到這個(gè)名稱號(hào)的對(duì)象為參數(shù).注意這個(gè)對(duì)象必須是可序列化的,也就是說它必須實(shí)現(xiàn)java.io.Serializablejie接口(實(shí)現(xiàn)這個(gè)接口無需實(shí)現(xiàn)任何方法,它只是告訴JVM這個(gè)對(duì)象可以序列化).
下面是在Weblogic中查看剛才創(chuàng)建的綁定內(nèi)容圖示
一.點(diǎn)擊環(huán)境,服務(wù)器,點(diǎn)擊“查看JNDI樹鏈接”

二.可以看到已經(jīng)綁定到JNDI樹中的對(duì)象

刪除現(xiàn)有的綁定例程
使用Context.unbind方法可以從JNDI樹中刪除綁定,不能再從樹中訪問這些對(duì)象了.
總結(jié)
JNDI為應(yīng)用程序提供了標(biāo)準(zhǔn)統(tǒng)一的方式,連接和使用企業(yè)中存在的多個(gè)對(duì)象目錄的能力.WeblogiocServer提供了JNDI的實(shí)現(xiàn),客戶機(jī)可以和它無縫連接.同一客戶機(jī)還可以用JNDI API連接到另一命名服務(wù)上.Weblogic Server大量利用JNDI樹完成其常規(guī)功能.如果應(yīng)用程序使用EJB,那么這個(gè)EJB就發(fā)布在JNDI樹中,類似的其它對(duì)象如DataSource對(duì)象,事務(wù)對(duì)象都發(fā)布在JNDI樹上.
參考例程:
WeblogicJNDI(注意:weblogic.jar請(qǐng)自行加入lib目錄)
命名服務(wù)(Naming Service)是可以將復(fù)雜數(shù)據(jù)對(duì)象或其引用關(guān)聯(lián)到已知名稱的機(jī)制.然后可以發(fā)布這些名稱,客戶可以使用這些名稱查詢與它們相關(guān)聯(lián)的數(shù)據(jù)對(duì)象.名稱與對(duì)象之間的關(guān)聯(lián)稱為綁定.命名服務(wù)通常與其它服務(wù)(如文件系統(tǒng),目錄和數(shù)據(jù)庫等)集成以提供這種綁定.大家可以從現(xiàn)代圖書館的卡片目錄系統(tǒng)來理解命名服務(wù).
JNDI介紹(Java Naming and Directory Inteface,Java命名與目錄接口)
JNDI是Java命名與目錄接口(Java Naming and Directory Inteface)的縮寫,有時(shí)也簡稱Java名錄服務(wù),J2EE組件通過調(diào)用JNDI提供的查找(lookup)方法以定位對(duì)象。JNDI是專門為Java設(shè)計(jì)的,一個(gè)Java應(yīng)用程序可以用JNDI檢索Java對(duì)象.JNDI還可以執(zhí)行標(biāo)準(zhǔn)目錄操作,如關(guān)聯(lián)屬性和對(duì)象,并用對(duì)象的屬性搜索它們.
JNDI名字是對(duì)象的友好名字,這些名字通過J2EE服務(wù)器提供的命名目錄服務(wù)綁定到各自的對(duì)象上。由于J2EE組件是通過JNDI編程接口訪問服務(wù)的,所以通常情況下把對(duì)象的友好名字稱之為JNDI名字。比如,mydatabase數(shù)據(jù)庫的JNDI名字為jdbc/mydatabase,一旦J2EE服務(wù)器啟動(dòng),系統(tǒng)自動(dòng)從配置文件讀取相關(guān)信息,并將jdbc/mydatabase的JNDI數(shù)據(jù)庫名字添加到名字空間。
Sun公司對(duì)JNDI的定義為”一種對(duì)Java平臺(tái)的標(biāo)準(zhǔn)擴(kuò)展,它為Java技術(shù)編寫的應(yīng)用程序提供了對(duì)企業(yè)中多種命名和目錄服務(wù)的統(tǒng)一接口.作為Java Enterprise API集的一部分,JNDI使與異構(gòu)企業(yè)命名和目錄服務(wù)的無縫連接提供了可能”.
連接工廠(Connection Factory)
連接工廠(Connection Factory)是用于產(chǎn)生鏈接對(duì)象,使得J2EE組件可以訪問資源的一種對(duì)象。比如,用于數(shù)據(jù)庫的連接工廠是javax.sql.Database對(duì)象,它產(chǎn)生java.sql.Connection對(duì)象。
JNDI和Weblogic Server
Weblogic提供了在JNDI規(guī)范中規(guī)定的實(shí)現(xiàn).這使Java客戶可以用標(biāo)準(zhǔn)JNDI調(diào)用連接到Weblogic Server.客戶可以在Weblogic命名空間中訪問Weblogic命名服務(wù)并使對(duì)象可用,還可以檢索它們.
如果希望訪問已經(jīng)加載到Weblogic Server的JNDI樹中的對(duì)象的Java客戶一般要執(zhí)行以下任務(wù):
1.與服務(wù)器建立一個(gè)上下文
2.對(duì)JNDI樹進(jìn)行查詢或者更新
取得上下文例程
這是在命名空間中訪問綁定對(duì)象的第一步.應(yīng)用程序?qū)@得引導(dǎo)上下文稱為InitialContext.它是從InitialContext工廠獲得的.這個(gè)工廠使用幾個(gè)屬性標(biāo)識(shí)上下文需要指向的Weblogic Server.
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
創(chuàng)建一個(gè)綁定例程
要在WeblogicJNDI樹中創(chuàng)建一個(gè)新的綁定,可使用Context.bind方法.這個(gè)方法以新綁定的名稱以及綁定到這個(gè)名稱號(hào)的對(duì)象為參數(shù).注意這個(gè)對(duì)象必須是可序列化的,也就是說它必須實(shí)現(xiàn)java.io.Serializablejie接口(實(shí)現(xiàn)這個(gè)接口無需實(shí)現(xiàn)任何方法,它只是告訴JVM這個(gè)對(duì)象可以序列化).
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
String text="菩提本非樹,明鏡亦非臺(tái),本來無一物,何處染塵埃.";
ctx.bind("TEST", text);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
String text="菩提本非樹,明鏡亦非臺(tái),本來無一物,何處染塵埃.";
ctx.bind("TEST", text);
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
下面是在Weblogic中查看剛才創(chuàng)建的綁定內(nèi)容圖示
一.點(diǎn)擊環(huán)境,服務(wù)器,點(diǎn)擊“查看JNDI樹鏈接”

二.可以看到已經(jīng)綁定到JNDI樹中的對(duì)象

刪除現(xiàn)有的綁定例程
使用Context.unbind方法可以從JNDI樹中刪除綁定,不能再從樹中訪問這些對(duì)象了.
Hashtable ht=new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
ctx.unbind("TEST");
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
Context ctx=null;
try {
ctx=new InitialContext(ht);
ctx.unbind("TEST");
} catch (NamingException e) {
e.printStackTrace();
System.out.println("不能得到上下文");
}
總結(jié)
JNDI為應(yīng)用程序提供了標(biāo)準(zhǔn)統(tǒng)一的方式,連接和使用企業(yè)中存在的多個(gè)對(duì)象目錄的能力.WeblogiocServer提供了JNDI的實(shí)現(xiàn),客戶機(jī)可以和它無縫連接.同一客戶機(jī)還可以用JNDI API連接到另一命名服務(wù)上.Weblogic Server大量利用JNDI樹完成其常規(guī)功能.如果應(yīng)用程序使用EJB,那么這個(gè)EJB就發(fā)布在JNDI樹中,類似的其它對(duì)象如DataSource對(duì)象,事務(wù)對(duì)象都發(fā)布在JNDI樹上.
參考例程:
WeblogicJNDI(注意:weblogic.jar請(qǐng)自行加入lib目錄)