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