




免費預覽已結束,剩余2頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
在Tomcat5中配置連接池和數(shù)據(jù)源1、JNDI(JAVA NAMING AND DIRECTORY INTERFACE-Java命名和目錄接口) (1)JNDI簡介分布式計算環(huán)境通常使用命名和目錄服務來獲取共享的組件和資源。命名和目錄服務將名稱與位置、服務、信息和資源關聯(lián)起來。命名服務提供了一種為對象命名的機制,這樣你就可以在無需知道對象位置的情況下獲取和使用對象。只要該對象在命名服務器上注冊過,且你必須知道命名服務器的地址和該對象在命名服務器上注冊的JNDI名。就可以找到該對象,獲得其引用,從而運用它提供的服務。命名服務提供名稱對象的映射。目錄服務提供有關對象的信息,并提供定位這些對象所需的搜索工具。Java命名和目錄接口或JNDI提供了一個用于訪問不同的命名和目錄服務的公共接口(JAVA API)。運用一個命名服務來查找與一個特定名字相關的一個對象,JDBC可以用JNDI來訪問一個關系數(shù)據(jù)庫。(2)獲得JNDI的初始環(huán)境在JNDI中,在目錄結構中的每一個結點稱為Context。每一個JNDI名字都是相對于Context的。這里沒有絕對名字的概念存在。對一個應用來說,它可以通過使用InitialContext 類來得到其第一個Context:Context ctx = new InitialContext ();應用可以通過這個初始化的Context經(jīng)由這個目錄樹來定位它所需要的資源或?qū)ο?。?)查找已綁定的對象用ctx.lookup(String name); 根據(jù)name找對象例:import javax.naming.*;public class TestJNDIpublic static void main(String args) try Context ctx=new InitialContext(); Object object=ctx.lookup(“JNDIName”); /根據(jù)JNDI名查找綁定的對象 String str=(String) object;/強制轉(zhuǎn)換 catch(NamingException e) e.printStackTrace(); catch(ClassCastException e) e.printStackTrace(); 2、DataSource接口介紹(1)DataSource 概述JDBC1.0原來是用DriverManager類來產(chǎn)生一個對數(shù)據(jù)源的連接。JDBC2.0用一種替代的方法,使用DataSource的實現(xiàn),代碼變的更小巧精致,也更容易控制。 一個DataSource對象代表了一個真正的數(shù)據(jù)源。根據(jù)DataSource的實現(xiàn)方法,數(shù)據(jù)源既可以是從關系數(shù)據(jù)庫,也電子表格,還可以是一個表格形式的文件。當一個DataSource對象注冊到名字服務中(JNDI),應用程序就可以通過名字服務獲得DataSource對象,并用它來產(chǎn)生一個與DataSource代表的數(shù)據(jù)源之間的連接。javax.sql包中的DataSource接口,可以采用三種實現(xiàn)形式:簡單的實現(xiàn)(只提供Connection對象)、連接池形式的實現(xiàn)和分布式事務形式的實現(xiàn)。javax.sql包中的ConnectionPoolDataSource提供對連接池實現(xiàn)的接口。(2)使用DataSource的優(yōu)點l DataSource與DriverManager的不同關于數(shù)據(jù)源的信息和如何來定位數(shù)據(jù)源,例如數(shù)據(jù)庫服務器的名字,在哪臺機器上,端口號等等,都包含在DataSource對象的屬性里面去了。這樣,對應用程序的設計來說是更方便了,因為并不需要硬性的把驅(qū)動的名字寫死到程序里面去。通常驅(qū)動名字中都包含了驅(qū)動提供商的名字,而在DriverManager類中通常是這么做的。l 可移植性如果數(shù)據(jù)源要移植到另一個數(shù)據(jù)庫驅(qū)動中,代碼也很容易做修改。所需要做的修改只是更改DataSource的相關的屬性。而使用DataSource對象的代碼不需要做任何改動。 (3)配置DataSource主要包括設定DataSource的屬性,然后將它注冊到JNDI名字服務中去。在注冊DataSource對象的的過程中,系統(tǒng)管理員需要把DataSource對象和一個邏輯名字關聯(lián)起來。名字可以是任意的,通常取成能代表數(shù)據(jù)源并且容易記住的名字。在下面的例子中,名字起為:WebMisDB,按照慣例,邏輯名字通常都在jdbc的子上下文中。這樣,邏輯名字的全名就是:jdbc/WebMisDB。(4)產(chǎn)生一個與數(shù)據(jù)源的連接一旦配置好了數(shù)據(jù)源對象,應用程序設計者就可以用它來產(chǎn)生一個與數(shù)據(jù)源的連接。下面的代碼片段示例了如何用JNDI上下文獲得一個數(shù)據(jù)源對象,然后如何用數(shù)據(jù)源對象產(chǎn)生一個與數(shù)據(jù)源的連接。開始的兩行用的是JNDIAPI,第三行用的才是JDBC的API: Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup(jdbc/WebMisDB);Connectioncon=ds.getConnection(myPassword,myUserName); 在一個基本的DataSource實現(xiàn)中,DataSource.getConnection方法返回的Connection對象和用DriverManager.getConnection方法返回的Connection對象是一樣的。因為DataSource提供的方便性,我們推薦使用DataSource對象來得到一個Connection對象。(5)DataSource的應用場合對于普通的應用程序設計者,是否使用DataSource對象只是一個選擇問題。但是,對于那些需要用的連接池或者分布式的事務的應用程序設計者來說,就必須使用DataSource對象來獲得Connection。需要注意的是對Tomcat而言,在JNDI的名稱前面應該加上java:comp/env/(6)數(shù)據(jù)源(DataSource)的作用它相當于客戶端程序和連接池的中介,想要獲得連接池中的連接對象,必須建立一個與該連接池相應的數(shù)據(jù)源,然后通過該數(shù)據(jù)源獲得連接。3、數(shù)據(jù)庫連接池技術(1)傳統(tǒng)的Web數(shù)據(jù)庫編程模式l 在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接。 l 進行SQL操作,取出數(shù)據(jù)。l 斷開數(shù)據(jù)庫連接。使用這種模式開發(fā),存在很多問題。l 首先,我們要為每一次WEB請求(例如察看某一篇文章的內(nèi)容)建立一次數(shù)據(jù)庫連接,對于一次或幾次操作來講,或許你覺察不到系統(tǒng)的開銷,但是,對于WEB程序來講,即使在某一較短的時間段內(nèi),其操作請求數(shù)也遠遠不是一兩次,而是數(shù)十上百次(想想全世界的網(wǎng)友都有可能在您的網(wǎng)頁上查找資料),在這種情況下,系統(tǒng)開銷是相當大的。事實上,在一個基于數(shù)據(jù)庫的WEB系統(tǒng)中,建立數(shù)據(jù)庫連接的操作將是系統(tǒng)中代價最大的操作之一。很多時候,可能您的網(wǎng)站速度瓶頸就在于此。l 其次,使用傳統(tǒng)的模式,你必須去管理每一個連接,確保他們能被正確關閉,如果出現(xiàn)程序異常而導致某些連接未能關閉,將導致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄露,最終我們將不得不重啟數(shù)據(jù)庫。l 頻繁的建立、關閉連接,會極大的減低系統(tǒng)的性能,因為對于連接的使用成了系統(tǒng)性能的瓶頸。(2)數(shù)據(jù)庫連接是一種關鍵的有限的昂貴的資源這一點在多用戶的網(wǎng)頁應用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數(shù)據(jù)庫連接池正是針對這個問題提出來的。連接池是這么一種機制,當應用程序關閉一個Connection的時候,這個連接被回收,而不是被destroy,因為建立一個連接是一個很費資源的操作。如果能把回收的連接重新利用,會減少新創(chuàng)建連接的數(shù)目,顯著的提高運行的性能。該策略的核心思想是:連接復用??蛻臬@得連接并訪問數(shù)據(jù)庫以后結束客戶獲得連接并訪問數(shù)據(jù)庫以后結束客戶獲得連接并訪問數(shù)據(jù)庫以后結束開始停止服務嗎?產(chǎn)生新的連接等待引入的連接結束是服務器監(jiān)聽客戶的連接請求 客戶獲得連接(3)連接池的主要作用l 減少了建立和釋放數(shù)據(jù)庫連接的消耗l 數(shù)據(jù)庫連接池負責分配、管理和釋放數(shù)據(jù)庫連接,它允許應用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接,而再不是重新建立一個;l 釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項技術能明顯提高對數(shù)據(jù)庫操作的性能。l 封裝用戶信息 使用連接池可以封裝連接數(shù)據(jù)庫系統(tǒng)所用的用戶信息(帳號和密碼),這樣客戶端程序在建立連接時不用考慮安全信息。(4)數(shù)據(jù)庫連接池的工作原理當程序中需要建立數(shù)據(jù)庫連接時,只須從內(nèi)存中取一個來用而不用新建。同樣,使用完畢后,只需放回內(nèi)存即可。而連接的建立、斷開都有連接池自身來管理。同時,我們還可以通過設置連接池的參數(shù)來控制連接池中的連接數(shù)、每個連接的最大使用次數(shù)等等(5)數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)的設置要考慮到下列幾個因素:l 最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫連接,所以如果應用程序?qū)?shù)據(jù)庫連接的使用量不大,將會有大量的數(shù)據(jù)庫連接資源被浪費;l 最大連接數(shù)是連接池能申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過此數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待隊列中,這會影響之后的數(shù)據(jù)庫操作。如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請求將會獲利,之后超過最小連接數(shù)量的連接請求等價于建立一個新的數(shù)據(jù)庫連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。(6)使用連接池得到連接假設應用程序需要建立到一個名字為EmpolyeeDB的DataSource的連接。使用連接池得到連接的代碼如下: Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup(jdbc/EmployeeDB);Connectioncon=ds.getConnection(myPassword,myUserName);或者:Contextctx=newInitialContext();ConnectionPoolDataSource ds=(ConnectionPoolDataSource)ctx.lookup(jdbc/EmployeeDB);PooledConnection con=ds.getConnection(myPassword,myUserName);是否使用連接池獲得一個連接,在應用程序的代碼上是看不出不同的。在使用這個Connection連接上也沒有什么不一樣的地方,唯一的不同是在java的finally語句塊中來關閉一個連接。在finally中關閉連接是一個好的編程習慣。這樣,即使方法拋出異常,Connection也會被關閉并回收到連接池中去。代碼應該如下所示: try catch() finallyif(con!=null)con.close();4、在Tomcat的server.xml文件中增加對數(shù)據(jù)源的描述(1)修改server.xml文件 factory mons.dbcp.BasicDataSourceFactory driverClassName com.microsoft.jdbc.sqlserver.SQLServerDriver url jdbc:microsoft:sqlserver:/:1433;DatabaseName=DataBase username sa password maxActive 連接池的最大數(shù)據(jù)庫連接數(shù)。設為0表示無限制。 maxActive 20maxIdle 數(shù)據(jù)庫連接的最大空閑時間。超過此空閑時間,數(shù)據(jù)庫連接將被標記為不可用,然后被釋放。設為0表示無限制。 maxIdle 10 maxWaitmaxWait 最大建立連接等待時間。如果超過此時間將接到異常。設為1表示無限制。 -1 注意:l 所有的入口和資源都放在JNDI命名空間里的java:comp/env段里l 設置JNDI資源要在$CATALINA_HOME/conf/server.xml文件里使用下列標志符:1) -設置應用程序可用的資源的名字和類型(同上面說的等價)。2) -設置Java資源類工廠的名稱或?qū)⒂玫腏avaBean屬性。上述這些標志符必須放在和之間(2)、拷貝SQLServer的JDBC驅(qū)動程序到Tomcat的commonlib目錄下(3)、在程序中利用數(shù)據(jù)源來訪問數(shù)據(jù)庫tryContext initCtx = new InitialCo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學助教培訓心得體會范文
- 高校教師師德師風建設意見學習心得體會
- 小學一年級運動健康教育計劃
- 城市建設工程服務安全措施
- 金融服務擬投入主要物資計劃
- 學校師德師風培訓實施計劃
- 七年級信息化勞動技術教學計劃他
- 2025兒童口腔護理專項計劃
- 高一下學期年級部課外輔導計劃
- 手工制作興趣小組時尚設計活動計劃
- 《國家學生體質(zhì)健康標準》登記卡(高中樣表)
- 以硅的計算為例,比較S-W,Tersoff,MEAM勢的差異課件
- 折讓證明模板
- 培智學生XXX個別化教育手冊
- 初中化學講座課件
- 養(yǎng)老院管理運營實施方案
- 勵磁系統(tǒng)試驗方案
- AWG,SWG,BWG線規(guī)規(guī)格對照表
- 廣州-樁機行走路線圖(共1頁)
- (整理)小學數(shù)獨游戲校本課程教材.
- KTV員工各種相關表樣(包括入職登記表)(共17頁)
評論
0/150
提交評論