JNDI——Java Naming and Directory InterfaceTM
直接翻譯就是Java命名和目錄接口,實(shí)現(xiàn)這個(gè)接口,提供的是一個(gè)服務(wù),這是個(gè)什么樣的服務(wù)呢?
首先在連接數(shù)據(jù)庫(kù)的時(shí)候(我使用的是mysql和jboss4.0),我們會(huì)用到Context這個(gè)類,context是一套name-to-object的綁定,可以理解為層次或目錄,他可以包括下一層subContext。在使用命名和目錄服務(wù)時(shí)獲得initial context 是對(duì)整個(gè)名字空間操作的入口。
針對(duì)Datasource而言,說(shuō)白了,就是給你的數(shù)據(jù)庫(kù)連接(注意,是數(shù)據(jù)庫(kù)連接Connection這個(gè)對(duì)象,不是數(shù)據(jù)庫(kù))起個(gè)簡(jiǎn)單易懂的名字,你在程序中直接調(diào)用這個(gè)名字,就得到這個(gè)連接的對(duì)象,而具體的生成和管理就靠服務(wù)器了。
通常會(huì)形成一個(gè)connection pool,動(dòng)態(tài)的來(lái)管理這些對(duì)象以節(jié)省資源。
這樣,如果項(xiàng)目移植到其它數(shù)據(jù)庫(kù)或者服務(wù)器什么的,只要配置服務(wù)器就行了。配置比如這個(gè)連接用什么JDBC驅(qū)動(dòng)啊,用戶名和密碼啊等等。程序代碼可以不作改動(dòng)。這里的DataSource不一定就是數(shù)據(jù)庫(kù)連接,還可以是其它比如文件連接等等。
其實(shí)EJB都是靠JNDI得到EJB object的reference的,具體的機(jī)理是不太了解,不過(guò)就是那個(gè)意思,初學(xué)者這樣理解應(yīng)該就夠了。
今天郁悶了半天,在jboss里面配置JNDI DataSource,想看看如果外面直接用普通的Java工程能不能連接數(shù)據(jù)庫(kù),答案是否。后來(lái)想通了。服務(wù)器提供JNDI服務(wù)所使用的類,這個(gè)普通的工程又不知道在哪,當(dāng)然搞不起來(lái)。而Web工程和EJB工程因?yàn)榘l(fā)布到服務(wù)器下面的目錄的,所以能使用JNDI服務(wù)。
這是我的理解,請(qǐng)各位高手指點(diǎn)。
至于JBoss等等服務(wù)器怎么配置,網(wǎng)上搜一下,有很多牛人總結(jié)的,這里就不重復(fù)了。