天天看點

JavaEE規範學習(一)--- JNDI

   叢集jndi實作了高可靠性jndi,通過伺服器的叢集,保證了jndi的負載平衡和錯誤恢複。在全局共享的方式下,叢集中的一個應用伺服器保證本地jndi樹的獨立性,并擁有全局的jndi樹。每個應用伺服器在把部署的服務對象綁定到自己本地的jndi樹的同時,還綁定到一個共享的全局jndi樹,實作全局jndi和自身jndi的聯系。

   jndi(javanaming and directory interface)是一個應用程式設計的api,為開發人員提供了查找和通路各種命名和目錄服務的通用、統一的接口,類似jdbc都是建構在抽象層上。現在jndi已經成為j2ee的标準之一,所有的j2ee容器都必須提供一個jndi的服務。

   jndi可通路的現有的目錄及服務有:

   dns、xnam 、novell目錄服務、ldap(lightweight directory access protocol輕型目錄通路協定)、 corba對象服務、檔案系統、windows xp/2000/nt/me/9x的系統資料庫、rmi、dsml v1&v2、nis。

   jndi是一種查找服務,用于查找:

   web應用環境變量

   ejbs和他們的環境變量

   jms目标和連接配接工廠

   備注:不要講jndi當做資料庫使用,因為jdni對象存儲在記憶體中,通路jdni對象與網絡性能有關(網絡好的時候查找性能高)。

JavaEE規範學習(一)--- JNDI
JavaEE規範學習(一)--- JNDI
JavaEE規範學習(一)--- JNDI

java.naming.factory.initial=org.jnp.interfaces.namingcontextfactory  

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces  

java.naming.provider.url=localhost  

   備注:jndi.properties檔案為所有的initialcontexts設定預設的屬性,jndi.properties檔案的搜尋次序

·classpath

·$java_home/lib

   ·lookup()從jndi樹擷取對象

JavaEE規範學習(一)--- JNDI

//執行個體化一個initialcontext對象  

initialcontext ctx = new initialcontext();   

//在jndi樹上查找“usermanagerbean對象  

usermanager usermanager =(usermanager)ctx.lookup("usermanagerbean/remote");  

user user = new user();  

user.setusername("cody");  

user.setpossword("0909");  

//使用查找到對象的方法  

usermanager.adduser(user);  

//連接配接完成之後關閉通路資源  

ctx.close();  

   ·綁定到遠端命名服務的對象必須是序列化的

   ·通路命名服務時,對象是采用複制機制

JavaEE規範學習(一)--- JNDI

   ejb通過@remote注解将對象綁定到jndi樹上

JavaEE規範學習(一)--- JNDI

@stateless  

@remote(usermanager.class)  

public classusermanagerbean implements usermanager {  

   @override  

   public void adduser(user user) {  

      system.out.println("user[username="+user.getusername()+"]已經被成功儲存");  

      user.setid(10);  

   }  

}  

   jndi可能出現的異常

   ·authenticationexception

沒有提供認證資訊,或者提供的認證資訊有誤

   ·communicationexception

通信異常

   ·invalidnameexception

非法命名之類的異常

   ·namenotfoundexception

沒有找到相應名稱的資源

   ·noinitialcontextexception

沒有初始化initialcontext對象

   j2ee規範要求所有 j2ee 容器都要提供 jndi 規範的實作。jndi 在 j2ee 中的角色就是“交換機” —— j2ee 元件在運作時間接地查找其他元件、資源或服務的通用機制。在多數情況下,提供 jndi 供應者的容器可以充當有限的資料存儲,這樣管理者就可以設定應用程式的執行屬性,并讓其他應用程式引用這些屬性(java 管理擴充(java managementextensions,jmx)也可以用作這個目的)。jndi 在 j2ee 應用程式中的主要角色就是提供間接層,這樣元件就可以發現所需要的資源,而不用了解這些間接性。

   在 j2ee 中,jndi 是把 j2ee 應用程式合在一起的粘合劑,jndi 提供的間接尋址允許跨企業傳遞可伸縮的、功能強大且很靈活的應用程式。這是 j2ee 的承諾,而且經過一些計劃和預先考慮,這個承諾是完全可以實作的。