1. 什么是JNDI(Java Naming and Directory Interface)
JNDI是用于訪問不同命名和目錄服務的統一API接口;
2. JNDI的架構和原理
1. 架構:
第一層:java代碼,是訪問JNDI的代碼;
第二層:JNDI API:統一的命名和目錄服務接口
第三層:JNDI Naming Manager:JNDI管理器
第四層:JNDI SPI:用于構建JNDI實現的框架,能夠動態的插入命名和目錄服務提供商的產品;
第五層:命名和目錄服務提供商的產品;
命名和目錄服務提供商的產品,例如:DNS,LDAP,NIS,NDS……..;因為這些產品都是不同的提供商提供的產品,所以他們的命名和目錄服務的標準不一致,各個目錄服務采用的訪問協議也是不一樣的,所以,要是直接訪問他們的話,就要編寫不同的java代碼來訪問他們;因此,JNDI SPI就解決了這個問題,它能動態的插入這些命名和目錄服務,能夠將其協議專屬的目錄產品集成到系統中,使得我們能只需要調用一個統一的javaAPI就能夠訪問插入的產品了;
2.原理:
JNDI其實很好理解,他就是一個樹狀的結構,它的最頂是一個initialContext節點,然后它的下面就是綁定的一些對象或是一些subContext,用JNDI樹就能夠查找到樹中每一個綁定上的節點上的對象的引用;
3.怎樣連接到JNDI上?
Environment environment = new Environment() ;//創建一個環境對象
environment.setProviderurl(“t3://www.tkk7.com”) ;
environment.setSecurityPrincipal(“todd”) ;//認證的用戶名
environment.setSecurityCredentials(“841026”) ;//密碼
Context context = environment.getInitialContext() ;
//創建一個subContext并綁定一個對象:
Context subContext = context.createSubcontext(“subContext”) ;
subContext.rebind(“newObject”,object) ;//綁定的對象必須是可序列化的
subContext.close() ;
context.close() ;
4.如何通過JNDI查找bind的對象?
Object object = context.lookup(“User”) ;
//把user窄化到原型
User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;
context.close() ;