【J2EE淺析】——JNDI

來源:互聯網
上載者:User

標籤:

    一、JNDI概述

    JNDI(JavaNaming Directory Interface)--java命名和目錄介面,是一組在Java應用中訪問命名和目錄服務的API。為開發人員提供了尋找和訪問各種命名和目錄服務的通用、統一的介面,類似JDBC,都是構建在抽象層上。是J2EE的標準之一,所有的J2EE容器都必須提供一個JNDI的服務。


   JNDI的命稱可能會讓人產生混淆,一開始接觸到這一規範覺得這是一個用來操作目錄的,事實上,可以把這個目錄理解成為JNDI存放對象時使用的格式,也就是說,JNDI以目錄的方式儲存物件的屬性。


 二、命名服務和目錄服務

  命名或目錄服務使使用者可以集中儲存共有資訊,這使得這樣的應用更協調、更容易管理。例如,可以將印表機設定儲存在目錄服務中,以便被與印表機有關的應用使用。


  我們大家每天都不知不覺地使用了命名服務。命名系統中的對象可以是DNS記錄中的名稱、應用伺服器中的EJB組件(Enterprise JavaBeans Component)、LDAP(LightweightDirectory Access Protocol)中的使用者Profile。


  目錄服務是命名服務的自然擴充。兩者之間的關鍵差別是目錄服務中對象可以有屬性(例如,使用者有email地址),而命名服務中對象沒有屬性。因此,在目錄服務中,你可以根據屬性搜尋對象。


 三、常用基本操作

  1、綁定與釋放

    1)void bind(String sName,Object object)綁定:把名稱同對象關聯的過程

    2)void rebind(String sName,Object object) 重新綁定:用來把對象同一個已經存在的名稱重新綁定。一般使用rebind()而不使用bind(),因為當有重名的時候rebind()不會出現異常,而bind()會報異常。

    3)voidunbind(String sName) 釋放:用來把對象從目錄中釋放出來。

  應用代碼如下:

public staticContext getInitialContext() throws NamingException{    Environment env = new Environment();    env.setProviderUrl("xxx");    env.setSecurityPrincipa("system");    env.setSecurityCredendtials("weblogic");    Contextcontext = env.getInitialContext();    returncontext;}    //獲得intial context    Context ctx =getInitialContext();    //建立名為Band的對象    Bank myBank = newBank();    //對象綁定    ctx.bind("theBank",myBank);    //把對象重新綁定到JNDI樹    ctx.rebind("theBank",myBank);    //解除綁定    ctx.unbind("theBank");    ctx.close();


  2、尋找對象

   Void lookup(string sName,Object object) 尋找:返回目錄總的一個對象

importjavax.naming.*;try{    Context ic = new Context();    Objectobj;    obj= ic.lookup("javax.transaction.UserTransaction");    UserTransactionut = (UserTransaction)obj;    ut.begin();    ic.close();}catch(NamingExceptione){}

  3、重新命名對象

   void rename(String sOldName,StringsNewName) 重新命名:用來修改對象名稱綁定的名稱。

ctx.rename("report.txt", "old_report.txt");

  4、擷取清單

   NamingEnumerationlistBindings(StringsName) 清單:返回綁定在特定上下文中指定屬性名稱對象的清單列表,它返回名字、類和對象本身,它用於那些需要對對象進行實際操作的應用。

 

//得到初始目錄環境的一個引用Context cntxt = new InitialContext();//返回綁定在特定上下文中指定屬性名稱對象的清單列表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();}

  四、總結

    JNDI的思想是提供一個通用的介面。底層的名字服務時限可以是各種類型,JNDI通過SPI時限代碼屏蔽了各種名字和目錄服務實現的區別。


   JNDI可以解決資料共用,分布式應用,緊耦合的問題,所以可以應用在一些比較大的軟體開發中,分布式系統中或者是比較重視後期維護和升級的項目中。






【J2EE淺析】——JNDI

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.