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