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