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

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

JNDI設計內幕

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

  1 將接口分為Context 和 DirContext
  JNDI有兩個核心接口Context和DirContext,Context中包含了基本的名字操作,而DirContext則將這些操作擴展到目錄服務。將這些操作分為兩個包一方面為了模塊化,另一方面也可以使服務減少不必要的開銷。名字是計算服務中的一個基本功能,使用基本的名字服務就可以獲得文件系統、電子表格、日歷服務等功能;DirContext 對Context進行了擴展,提供了基本的目錄服務操作,對名字對象屬性的維護、基于屬性的名字查找等等。
  2 將JNDI 分成多個功能包
  JNDI 分為兩個客戶端包(javax.naming,javax.naming.Directory) 和一個服務端包 (javax.naming.spi)。這樣做也同樣是為了減少應用程序不必要的開銷,使得應用程序只需要包括所必須的包。
  3 將客戶端API 和 服務端的API 分開
  JNDI 將客戶端接口與服務提供商需要的接口分開為不同的包。比如,客戶端程序只需要使用javax.naming包中提供的類,而服務提供商可能需要javax.naming和javax.naming.spi兩中包。這樣分開可以使客戶和服務器端只專注于與自身有關的類信息。
  4 上下文列表的多種方法
  一般來說有兩種進行上下文列表的應用:上下文瀏覽應用和對上下文中的對象進行實際操作的應用。
  上下文瀏覽應用一般只需要顯示上下文中包含內容的名字,或者再獲取一些諸如對象的類型之類的信息。這種類型的應用一般都是交互式的,可以答應用戶在列舉的上下文列表中選擇一些進行進一步的顯示。
  另外有一些應用需要對上下文中的對象進行實際的操作,比如,一個備份程序需要對目錄中所有文件的狀態進行操作,或者某打印機治理員可能需要對大樓中的所有打印機進行復位。為了進行這樣的操作,程序需要獲取上下文中的實際對象。
  對于這樣兩種類型的應用,Context接口提供了兩種上下文列表方法list()和listBindings()。其中list()只返回一系列名字/類映射,而listBindings() 則返回名字、類和對象本身。顯然list()用于上下文瀏覽應用而listBindings()用于那些需要對對象進行實際操作的應用。
  5 對聯合的支持
  聯合是JNDI的一個基本概念,在客戶端接口中可以支持跨越多個名字空間的名字,調用名字接口的程序不需要知道細節問題,只需要指定有關的名字,有關在幾個名字系統中如何解析復合名字的問題留給服務提供商來解決,與客戶無關。
  6 DirContext 與 DirObject
  對于目錄服務的實現來說,假如不用擴展Context的DirContext接口,也可以使用一個單獨的包含了所有目錄相關方法的接口如DirObject,這樣的話假如應用只使用目錄服務就可以只包括DirObject,而假如名字服務和目錄服務都使用,則可以包括Context和DirObject。這樣當然條理比較清楚,但是對于某些混合操作,比如一些對目錄和名字都有效的操作就不太方便了,所以JNDI采用了DirContext而不是DirObject。
  7 Schema的支持
  DirContext接口包含對schema的支持,例如,客戶可以通過DirContext對象獲得指向該DirContext實例的schema的定義空間的schema對象,或者獲取該schema對象的類定義。Attribute類還更進一步地支持獲取屬性類型信息、屬性定義等的方法。服務提供商既可以動態地返回這些schema信息,也可以靜態地事先預備好有關的schema信息。
  8 Context 和 DirContext
  接口中的方法重載 在Context和DirContext接口中的每個接受Name參數的方法都有一個接受字符串參數的同名方法。 設計以字符串為參數的方法的原因是由于有很多應用只通過對象的名字來訪問這些對象,對于這些應用來說,直接使用名字來訪問這些方法當然是最直觀的。
  而設計以Name類對象為參數的方法的動機,也是由于有不少對名字進行維護的應用并不關系名字的字面表達,所以需要以Name對象作為參數。 在JNDI中這兩種形式的方法都可以調用,以方便各種不同的應用。
  9 引用
  JNDI包容了多種使用目錄來定位對象的方法,例如,一些應用直接將對象自身綁定在目錄中;一些應用可能動態地產生目錄樹,當應用退出時就刪去該樹;另外一些應用可能只是將指向對象的URL存貯在名字空間里;還有一些系統可能將一些引用信息綁定到樹中,當使用時再用這些信息來訪問實際的對象。
  針對這些不同的方式,JNDI定義了一個Reference類來為應用信息的表達提供一種統一的方式。Reference類包含了諸如地址、類型信息等用于訪問具體對象的信息。為了能將對象的引用綁定到目錄樹中,該對象的類必須實現Referenceable接口,其中包含了方法 getReference() 。 Serializable接口與Referenceable接口有頗多相似之處,不同在于可引用的對象只包含一些用于創建實際對象的信息而Serializable會包含更多的甚至不適合存儲在目錄結構中的信息。
  10 引用到實際對象的自動定位 對于作為引用綁定在目錄樹中的對象,JNDI SPI 指定針對引用創建實際的對象。因此,在程序中只需要認為用lookup()方法返回的對象就是實際對象,而不用在調用什么方法來將引用轉換為實際對象了,所有的工作都由JNDI內部完成了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中方县| 广宗县| 永和县| 乌苏市| 英山县| 建宁县| 株洲县| 长汀县| 永春县| 项城市| 台北县| 庆元县| 习水县| 临安市| 凤凰县| 永昌县| 辽阳县| 巩义市| 孝昌县| 册亨县| 五莲县| 长兴县| 栾城县| 达日县| 古蔺县| 望城县| 景谷| 荥经县| 山阴县| 清新县| 昆山市| 紫云| 华容县| 元朗区| 绿春县| 朔州市| 乐亭县| 三江| 永年县| 罗甸县| 邵阳市|