作為
j2ee小菜鳥,初次遭遇
JNDI還是在大三的時候,當時學院搞
j2ee實訓,我們還沒搞清楚
servlet和
JSP就依葫蘆畫瓢的搞
Struts了。所以在配置
mysql-
ds.xml的時候完全不知道在配置
DataSource,現在知道這就是在使用JNDI。網上查了幾個網頁,拼拼湊湊,模模糊糊地理解了:
JNDI——Java Naming and Directory InterfaceTM
直接翻譯就是Java命名和目錄接口,實現這個接口,提供的是一個服務,這是個什么樣的服務呢?
首先在連接數據庫的時候(我使用的是mysql和jboss4.0),我們會用到Context這個類,context是一套name-to-object的綁定,可以理解為層次或目錄,他可以包括下一層subContext。在使用命名和目錄服務時獲得initial context 是對整個名字空間操作的入口。
針對Datasource而言,說白了,就是給你的數據庫連接(注意,是數據庫連接Connection這個對象,不是數據庫)起個簡單易懂的名字,你在程序中直接調用這個名字,就得到這個連接的對象,而具體的生成和管理就靠服務器了。
通常會形成一個connection pool,動態的來管理這些對象以節省資源。
這樣,如果項目移植到其它數據庫或者服務器什么的,只要配置服務器就行了。配置比如這個連接用什么JDBC驅動啊,用戶名和密碼啊等等。程序代碼可以不作改動。這里的DataSource不一定就是數據庫連接,還可以是其它比如文件連接等等。
其實EJB都是靠JNDI得到EJB object的reference的,具體的機理是不太了解,不過就是那個意思,初學者這樣理解應該就夠了。
今天郁悶了半天,在jboss里面配置JNDI DataSource,想看看如果外面直接用普通的Java工程能不能連接數據庫,答案是否。后來想通了。服務器提供JNDI服務所使用的類,這個普通的工程又不知道在哪,當然搞不起來。而Web工程和EJB工程因為發布到服務器下面的目錄的,所以能使用JNDI服務。
這是我的理解,請各位高手指點。
至于JBoss等等服務器怎么配置,網上搜一下,有很多牛人總結的,這里就不重復了。