国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

開發基于JNDI的應用程序

2019-11-18 12:03:55
字體:
來源:轉載
供稿:網友

  java命名和目錄接口(Java Naming and Directory Interface ,JNDI)是用于從Java應用程序中訪問名稱和目錄服務的一組API。命名服務即將名稱與對象相關聯,以便能通過相應名稱訪問這些對象。而目錄服務即其對象具有屬性及名稱的命名服務。
  
  命名或目錄服務答應您集中治理共享信息的存儲,這在網絡應用程序中很重要,因為它可以使這類應用程序更加一致和易于治理。例如,可以將打印機配置存儲在目錄服務中,這樣所有與打印機相關的應用程序都能夠使用它。
  
  本文是一份代碼密集型的快速入門指南,讓您開始了解和使用JNDI。它:
  
  提供對JNDI的綜述。
  描述JNDI的特性。
  提供使用JNDI開發應用程序過程中的體驗。
  說明如何使用JNDI訪問 LDAP 服務器,比如Sun Java System Directory Server 。
  說明如何使用 JNDI 訪問J2EE 服務。
  提供示例代碼,您可以對其進行修改,以用于您自己的應用程序。
  
  JNDI綜述
  我們所有人天天都在不自知的情況下使用命名服務。例如,當您在瀏覽器中輸入URL http://java.sun.com 時,域名系統(Domain Name System ,DNS)將這個以符號表示的URL轉換為一個通信標識符(ip地址)。在命名系統中,對象的范圍可以從位于DNS記錄中的名稱變動到應用程序服務器中的企業JavaBeans組件(EnterPRise JavaBeans Components ,EJBs),還可以到輕量級目錄訪問協議(Lightweight Directory access Protocol ,LDAP)中的用戶配置文件。
  
  目錄服務是命名服務的自然擴展。二者的要害區別在于,目錄服務答應屬性(比如用戶的電子郵件地址)與對象相關聯,而命名服務則不然。這樣,使用目錄服務時,您可以基于對象的屬性來搜索它們。JNDI答應您訪問文件系統中的文件,定位遠程RMI注冊表中的對象,訪問諸如LDAP這樣的目錄服務,并定位網絡上的EJB。
  
  很多應用程序選擇使用JNDI都可以收到良好的效果,比如LDAP客戶端、應用程序啟動器、類瀏覽器、網絡治理實用工具,或者甚至是地址簿。
  
  JNDI架構
  JNDI架構提供了一個標準的、與命名系統無關的API,這個API構建在特定于命名系統的驅動程序之上。這一層幫助把應用程序和實際的數據源隔離開來,因此無論應用程序是訪問LDAP、RMI、DNS還是其他的目錄服務,這都沒有關系。換句話說,JNDI與任何特定的目錄服務實現無關,您可以使用任何目錄,只要您擁有相應的服務提供程序接口(或驅動程序)即可,如圖1所示。
  
 開發基于JNDI的應用程序(圖一)

  注重,關于JNDI有一點很重要,即它同時提供給用程序編程接口(application Programming Interface ,API)和服務提供程序接口(Service Provider Interface ,SPI)。這樣做的實際意義在于,對于您的與命名或目錄服務交互的應用程序來說,必須存在用于該服務的一個JNDI服務提供程序,這便是JNDI SPI發揮作用的舞臺。一個服務提供程序基本上就是一組類,這些類針對特定的命名和目錄服務實現了各種JNDI接口——這與JDBC驅動程序針對特定的數據系統實現各種JDBC接口極為相似。作為一名應用程序開發人員,您不需要擔心JNDI SPI.。您只需確保,您為每個想使用的命名或目錄服務提供了一個服務提供程序。
  
  J2SE和JNDI
  JNDI被包含在Java 2 SDK 1.3 及其更新版本中。它還可以用作JDK 1.1和1.2的一個標準擴展。 Java 2 SDK 1.4.x的最新版本進行了改進,將以下命名/目錄服務提供程序包括進來:
  
  輕量級目錄訪問協議(Lightweight Directory Access Protocol,LDAP) 服務提供程序。
  公共對象請求代理架構(Common Object Request Broker Architecture ,CORBA)公共對象服務(Common Object Services ,COS)命名服務提供程序。
  Java遠程方法調用( Remote Method Invocation ,RMI)注冊表服務提供程序。
  域名系統( Domain Name System ,DNS) 服務提供程序。
  有關服務提供程序的更多內容
  
  在這里可以下載一系列服務提供程序。Windows注冊表JNDI 提供程序(來自cogentlogic.com)可能會引起您非凡的愛好,因為它答應您訪問Windows xp/2000/NT/Me/9x上的注冊表。
  
  此外,還可以下載JNDI/LDAP Bootster Pack。這個增強補丁包含對流行的LDAP控件和擴展的支持。它代替了與LDAP 1.2.1服務提供程序捆綁在一起的增強補丁。參見 Controls and Extensions 以獲得更多信息。
  
  另一個要考察的有趣的服務提供程序是Sun的Directory Services Markup Language (DSML) v2.0提供程序。 DSML的目標是將目錄服務與xml連接起來
  
  JNDI API
  JNDI API 包括5個包:
  
  javax.naming: 包含用于訪問命名服務的類和接口。例如,它定義了Context接口,該接口是執行查找時命名服務的入口點。
  javax.naming.directory:擴展命名包以提供用于訪問目錄服務的類和接口。例如,它增加了新的屬性類,提供代表一個目錄上下文的DirContext 接口,并且定義了用于檢查和更新與目錄對象相關的屬性的方法。
  javax.naming.event: 當訪問命名和目錄服務時,為事件通知提供支持。例如,它定義了一個NamingEvent類,用于表示由命名/目錄服務生成的事件,以及一個監視NamingEvents 類的, NamingListener 接口。
  javax.naming.ldap: 這個包為LDAP 版本 3 擴展操作和空間提供特定的支持,而普通的javax.naming.directory 包沒有提供這些支持。
  javax.naming.spi: 這個包提供方法以動態插入對通過javax.naming及其相關包訪問命名和目錄服務的支持。只有那些對創建服務提供程序有著濃厚愛好的開發人員才應該對這個包感愛好。
  
  JNDI 上下文
  承前所述,命名服務是將名稱與對象相關聯。這種關聯被稱為綁定。一組這樣的綁定被稱為上下文,它提供返回對象的分解或查找操作。其他操作還可能包括綁定與解除綁定名稱,以及列出被綁定的名稱。注重,可以將一個上下文對象中的名稱綁定到具有同樣命名慣例的另一個上下文對象上。這被稱為子上下文。例如,假如UNIX目錄/home 是一個上下文,那么名稱與其相關的目錄便是子上下文。例如,/home/guests.,這里的guests 便是 home的一個子上下文。
  
  在JNDI中,上下文是使用javax.naming.Context 接口來表示的,而這個接口也正是與命名服務進行交互的主要接口。Context (或稍后將要討論的DirContext)接口中的每個命名方法都有兩種重載的形式:
  
  lookup(String name): 接受一個字符串名稱。
  lookup(javax.naming.Name): 接受一個結構化的名稱,比如CompositeName (一個跨越多個命名系統的名稱)或 CompondName (一個位于單個命名系統中的名稱);二者均實現了Name 接口。下面是一個復合名稱的例子: cn=mydir,cn=Q Mahmoud,ou=People,還有一個組合名稱的例子: cn=mydir,cn=Q Mahmoud,ou=People/myfiles/max.txt (這里的myfiles/max.txt 是代表第二部分的一個文件名)。
  javax.naming.InitialContext 是一個實現了 Context接口的類。使用這個類作為您到命名服務的入口點。要創建一個InitialContext 對象,構造器需要采用一組屬性,形式為java.util.Hashtable 或其子類之一,比如Properties.。下面是一個例子:
  
  Hashtable env = new Hashtable();
  
  // select a service provider factory
  
  env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContext");
  
  // create the initial context
  
  Context contxt = new InitialContext(env);
  
  INITIAL_CONTEXT_FACTORY 指定JNDI服務提供程序中工廠類的名稱。該工廠負責為其服務創建一個合適的InitialContext 對象。在上面的代碼片斷中,指定了用于文件系統服務提供程序的一個工廠類。表1列出了用于所支持的服務提供程序的工廠類。注重,用于文件系統服務提供程序的工廠類需要從Sun Microsystems單獨下載,它并沒有與J2SE 1.4.x一起發行。
  
 開發基于JNDI的應用程序(圖二)

  要通過來自命名或目錄服務的名稱檢索或解析(查找)一個對象,使用Context: Object obj = contxt.lookup(name)的lookup方法。lookup 方法返回一個對象,該對象代表您想要查找的上下文的子上下文。
  
  一個命名的例子
  現在,讓我們看一看一個使用命名服務的例子。在這個例子中,我們編寫了一個簡單的程序,用于查找一個其名稱被當作命令行參數傳入的對象。在這里,我們將使用一個用于文件系統的服務提供程序,而且因此,我們提供作為參數的名稱必須是一個文件名。示例代碼1中給出了相應代碼。
  
  示例代碼 1: Resolve.java
  
  import javax.naming.Context;
  
  import javax.naming.InitialContext;
  
  import javax.naming.NamingException;
  
  import java.util.Hashtable;
  
  public class Resolve {
  
  public static void main(String argv[]) {
  
   // The user should provide a file to lookup
  
   if (argv.length != 1) {
  
     System.err.println("Usage: java Resolve ");
  
     System.exit(-1);
  
   }
  
   String name = argv[0];
  
   // Here we use the file system service provider
  
   Hashtable env = new Hashtable();
  
   env.put(Co

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 雷波县| 拉萨市| 三门峡市| 梅州市| 和林格尔县| 长顺县| 高尔夫| 九台市| 清原| 霍城县| 丹东市| 扬中市| 西林县| 淮滨县| 达日县| 南皮县| 五家渠市| 肃宁县| 上栗县| 长武县| 南乐县| 黄石市| 东阿县| 关岭| 凤台县| 稷山县| 定西市| 汤阴县| 涡阳县| 襄垣县| 嘉祥县| 河西区| 伽师县| 延津县| 宁晋县| 博湖县| 宁强县| 河间市| 慈利县| 汤阴县| 沐川县|