最近在學習J2EE,原本以為J2EE也是一種類似于J2SE,c#,vb 那樣的高級語言,沒想到當學了視頻以后,認識到其他他并不是這樣的。
J2EE是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件,主要可簡化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進而提高可移植性、安全與再用價值。簡單來說他就是一套規(guī)范!
J2EE組件和“標準的” Java類的不同點在于:它被裝配在一個J2EE應(yīng)用中,具有固定的格式并遵守J2EE規(guī)范,由J2EE服務(wù)器對其進行管理。J2EE規(guī)范是這樣定義J2EE組件的:客戶端應(yīng)用程序和applet是運行在客戶端的組件;Java Servlet和Java Server Pages (JSP)是運行在服務(wù)器端的Web組件;EnterpriseJava Bean (E JB )組件是運行在服務(wù)器端的業(yè)務(wù)組件等13個組件(規(guī)范)。
今天我們就來說一下,他的JNDI組件
一、JNDI是什么?
JNDI--Java 命名和目錄接口(Java Naming and Directory Interface),是一組在Java應(yīng)用中訪問命名服務(wù)和目錄服務(wù)的API。
命名服務(wù),說白了就是提供一個名稱鍵值對的管理,即Key-Value對,Key代表一個資源的名稱,Value代表資源的真實地址,命名服務(wù)允許大家通過唯一的名稱找到對應(yīng)的對象或資源。這樣程序只需要知道某種資源的名稱,就可以通過JNDI來訪問到它,而不需要知道這個資源真實的物理地址。這有點類似于DNS服務(wù),DNS服務(wù)將域名解析成IP地址,這樣大家只需要在瀏覽器中輸入網(wǎng)站的唯一名稱(即域名)就可以訪問到該網(wǎng)站,而不需要記住這個網(wǎng)站真實的IP地址。
目錄服務(wù),提供的也是一種公共資源的管理服務(wù)。目錄服務(wù)是一種特殊類型的數(shù)據(jù)庫,它按照一定的數(shù)據(jù)結(jié)構(gòu),比如樹型結(jié)構(gòu),把各種公共資源組織并保存起來。這種特殊數(shù)據(jù)庫與傳統(tǒng)關(guān)系型數(shù)據(jù)庫的區(qū)別在于,它對查詢作了優(yōu)化,其數(shù)據(jù)結(jié)構(gòu)允許大家非常快速的找到想要的資源,即保障了一種快速查找能力,不過這種設(shè)計也犧牲了其他方面的效率,比如它的更新效率就要低得多。
目錄服務(wù)中管理的也是名稱鍵值對,不過其鍵值是具有層次結(jié)構(gòu)的,像一棵樹,即通過一個名稱或一個帶層次結(jié)構(gòu)的名稱,你可以定位到一顆子樹,而不只是一個屬性。由此可見,目錄服務(wù)將命名服務(wù)的概念進一步引申為提供具有層次結(jié)構(gòu)的信息庫。一個目錄服務(wù)通常擁有一個命名服務(wù),但是一個命名服務(wù)不必具有一個目錄服務(wù)。
要了解JNDI的作用,我們可以從“如果不用JNDI我們怎樣做?用了JNDI后我們又將怎樣做?”這個問題來探討。
沒有JNDI的做法:程序員開發(fā)時,知道要開發(fā)訪問MySQL數(shù)據(jù)庫的應(yīng)用,于是將一個對 MySQL JDBC 驅(qū)動程序類的引用進行了編碼,并通過使用適當?shù)?/span> JDBC URL連接到數(shù)據(jù)庫。
就像以下代碼這樣:
1、數(shù)據(jù)庫服務(wù)器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發(fā)JDBC URL需要修改;
2、數(shù)據(jù)庫可能改用別的產(chǎn)品,如改用DB2或者Oracle,引發(fā)JDBC驅(qū)動程序包和類名需要修改;
3、隨著實際使用終端的增加,原配置的連接池參數(shù)可能需要調(diào)整;
4、......
解決辦法:
程序員應(yīng)該不需要關(guān)心“具體的數(shù)據(jù)庫后臺是什么?JDBC驅(qū)動程序是什么?JDBC URL格式是什么?訪問數(shù)據(jù)庫的用戶名和口令是什么?”等等這些問題,程序員編寫的程序應(yīng)該沒有對 JDBC驅(qū)動程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 ――甚至沒有數(shù)據(jù)庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。
由此,就有了JNDI。
用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI參數(shù),定義一個數(shù)據(jù)源,也就是JDBC引用參數(shù),給這個數(shù)據(jù)源設(shè)置一個名稱;然后,在程序中,通過數(shù)據(jù)源名稱引用數(shù)據(jù)源從而訪問后臺數(shù)據(jù)庫。
具體操作如下(以JBoss為例):
1、配置數(shù)據(jù)源
在JBoss的D:/jboss420GA/docs/examples/jca文件夾下面,有很多不同數(shù)據(jù)庫引用的數(shù)據(jù)源定義模板。將其中的
mysql-ds.xml文件Copy到你使用的服務(wù)器下,如D:/jboss420GA/server/default/deploy。修改
mysql-ds.xml 文件的內(nèi)容,使之能通過JDBC正確訪問你的MySQL數(shù)據(jù)庫,如下:
2、 在程序中引用數(shù)據(jù)源: