




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
在Tomcat5中配置連接池和數(shù)據(jù)源1、JNDI(JAVA NAMING AND DIRECTORY INTERFACE-Java命名和目錄接口) (1)JNDI簡介分布式計(jì)算環(huán)境通常使用命名和目錄服務(wù)來獲取共享的組件和資源。命名和目錄服務(wù)將名稱與位置、服務(wù)、信息和資源關(guān)聯(lián)起來。命名服務(wù)提供了一種為對象命名的機(jī)制,這樣你就可以在無需知道對象位置的情況下獲取和使用對象。只要該對象在命名服務(wù)器上注冊過,且你必須知道命名服務(wù)器的地址和該對象在命名服務(wù)器上注冊的JNDI名。就可以找到該對象,獲得其引用,從而運(yùn)用它提供的服務(wù)。命名服務(wù)提供名稱對象的映射。目錄服務(wù)提供有關(guān)對象的信息,并提供定位這些對象所需的搜索工具。Java命名和目錄接口或JNDI提供了一個(gè)用于訪問不同的命名和目錄服務(wù)的公共接口(JAVA API)。運(yùn)用一個(gè)命名服務(wù)來查找與一個(gè)特定名字相關(guān)的一個(gè)對象,JDBC可以用JNDI來訪問一個(gè)關(guān)系數(shù)據(jù)庫。(2)獲得JNDI的初始環(huán)境在JNDI中,在目錄結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)稱為Context。每一個(gè)JNDI名字都是相對于Context的。這里沒有絕對名字的概念存在。對一個(gè)應(yīng)用來說,它可以通過使用InitialContext 類來得到其第一個(gè)Context:Context ctx = new InitialContext ();應(yīng)用可以通過這個(gè)初始化的Context經(jīng)由這個(gè)目錄樹來定位它所需要的資源或?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;/強(qiáng)制轉(zhuǎn)換 catch(NamingException e) e.printStackTrace(); catch(ClassCastException e) e.printStackTrace(); 2、DataSource接口介紹(1)DataSource 概述JDBC1.0原來是用DriverManager類來產(chǎn)生一個(gè)對數(shù)據(jù)源的連接。JDBC2.0用一種替代的方法,使用DataSource的實(shí)現(xiàn),代碼變的更小巧精致,也更容易控制。 一個(gè)DataSource對象代表了一個(gè)真正的數(shù)據(jù)源。根據(jù)DataSource的實(shí)現(xiàn)方法,數(shù)據(jù)源既可以是從關(guān)系數(shù)據(jù)庫,也電子表格,還可以是一個(gè)表格形式的文件。當(dāng)一個(gè)DataSource對象注冊到名字服務(wù)中(JNDI),應(yīng)用程序就可以通過名字服務(wù)獲得DataSource對象,并用它來產(chǎn)生一個(gè)與DataSource代表的數(shù)據(jù)源之間的連接。javax.sql包中的DataSource接口,可以采用三種實(shí)現(xiàn)形式:簡單的實(shí)現(xiàn)(只提供Connection對象)、連接池形式的實(shí)現(xiàn)和分布式事務(wù)形式的實(shí)現(xiàn)。javax.sql包中的ConnectionPoolDataSource提供對連接池實(shí)現(xiàn)的接口。(2)使用DataSource的優(yōu)點(diǎn)l DataSource與DriverManager的不同關(guān)于數(shù)據(jù)源的信息和如何來定位數(shù)據(jù)源,例如數(shù)據(jù)庫服務(wù)器的名字,在哪臺機(jī)器上,端口號等等,都包含在DataSource對象的屬性里面去了。這樣,對應(yīng)用程序的設(shè)計(jì)來說是更方便了,因?yàn)椴⒉恍枰残缘陌羊?qū)動(dòng)的名字寫死到程序里面去。通常驅(qū)動(dòng)名字中都包含了驅(qū)動(dòng)提供商的名字,而在DriverManager類中通常是這么做的。l 可移植性如果數(shù)據(jù)源要移植到另一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)中,代碼也很容易做修改。所需要做的修改只是更改DataSource的相關(guān)的屬性。而使用DataSource對象的代碼不需要做任何改動(dòng)。 (3)配置DataSource主要包括設(shè)定DataSource的屬性,然后將它注冊到JNDI名字服務(wù)中去。在注冊DataSource對象的的過程中,系統(tǒng)管理員需要把DataSource對象和一個(gè)邏輯名字關(guān)聯(lián)起來。名字可以是任意的,通常取成能代表數(shù)據(jù)源并且容易記住的名字。在下面的例子中,名字起為:WebMisDB,按照慣例,邏輯名字通常都在jdbc的子上下文中。這樣,邏輯名字的全名就是:jdbc/WebMisDB。(4)產(chǎn)生一個(gè)與數(shù)據(jù)源的連接一旦配置好了數(shù)據(jù)源對象,應(yīng)用程序設(shè)計(jì)者就可以用它來產(chǎn)生一個(gè)與數(shù)據(jù)源的連接。下面的代碼片段示例了如何用JNDI上下文獲得一個(gè)數(shù)據(jù)源對象,然后如何用數(shù)據(jù)源對象產(chǎn)生一個(gè)與數(shù)據(jù)源的連接。開始的兩行用的是JNDIAPI,第三行用的才是JDBC的API: Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup(jdbc/WebMisDB);Connectioncon=ds.getConnection(myPassword,myUserName); 在一個(gè)基本的DataSource實(shí)現(xiàn)中,DataSource.getConnection方法返回的Connection對象和用DriverManager.getConnection方法返回的Connection對象是一樣的。因?yàn)镈ataSource提供的方便性,我們推薦使用DataSource對象來得到一個(gè)Connection對象。(5)DataSource的應(yīng)用場合對于普通的應(yīng)用程序設(shè)計(jì)者,是否使用DataSource對象只是一個(gè)選擇問題。但是,對于那些需要用的連接池或者分布式的事務(wù)的應(yīng)用程序設(shè)計(jì)者來說,就必須使用DataSource對象來獲得Connection。需要注意的是對Tomcat而言,在JNDI的名稱前面應(yīng)該加上java:comp/env/(6)數(shù)據(jù)源(DataSource)的作用它相當(dāng)于客戶端程序和連接池的中介,想要獲得連接池中的連接對象,必須建立一個(gè)與該連接池相應(yīng)的數(shù)據(jù)源,然后通過該數(shù)據(jù)源獲得連接。3、數(shù)據(jù)庫連接池技術(shù)(1)傳統(tǒng)的Web數(shù)據(jù)庫編程模式l 在主程序(如Servlet、Beans)中建立數(shù)據(jù)庫連接。 l 進(jìn)行SQL操作,取出數(shù)據(jù)。l 斷開數(shù)據(jù)庫連接。使用這種模式開發(fā),存在很多問題。l 首先,我們要為每一次WEB請求(例如察看某一篇文章的內(nèi)容)建立一次數(shù)據(jù)庫連接,對于一次或幾次操作來講,或許你覺察不到系統(tǒng)的開銷,但是,對于WEB程序來講,即使在某一較短的時(shí)間段內(nèi),其操作請求數(shù)也遠(yuǎn)遠(yuǎn)不是一兩次,而是數(shù)十上百次(想想全世界的網(wǎng)友都有可能在您的網(wǎng)頁上查找資料),在這種情況下,系統(tǒng)開銷是相當(dāng)大的。事實(shí)上,在一個(gè)基于數(shù)據(jù)庫的WEB系統(tǒng)中,建立數(shù)據(jù)庫連接的操作將是系統(tǒng)中代價(jià)最大的操作之一。很多時(shí)候,可能您的網(wǎng)站速度瓶頸就在于此。l 其次,使用傳統(tǒng)的模式,你必須去管理每一個(gè)連接,確保他們能被正確關(guān)閉,如果出現(xiàn)程序異常而導(dǎo)致某些連接未能關(guān)閉,將導(dǎo)致數(shù)據(jù)庫系統(tǒng)中的內(nèi)存泄露,最終我們將不得不重啟數(shù)據(jù)庫。l 頻繁的建立、關(guān)閉連接,會(huì)極大的減低系統(tǒng)的性能,因?yàn)閷τ谶B接的使用成了系統(tǒng)性能的瓶頸。(2)數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源這一點(diǎn)在多用戶的網(wǎng)頁應(yīng)用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫連接池正是針對這個(gè)問題提出來的。連接池是這么一種機(jī)制,當(dāng)應(yīng)用程序關(guān)閉一個(gè)Connection的時(shí)候,這個(gè)連接被回收,而不是被destroy,因?yàn)榻⒁粋€(gè)連接是一個(gè)很費(fèi)資源的操作。如果能把回收的連接重新利用,會(huì)減少新創(chuàng)建連接的數(shù)目,顯著的提高運(yùn)行的性能。該策略的核心思想是:連接復(fù)用??蛻臬@得連接并訪問數(shù)據(jù)庫以后結(jié)束客戶獲得連接并訪問數(shù)據(jù)庫以后結(jié)束客戶獲得連接并訪問數(shù)據(jù)庫以后結(jié)束開始停止服務(wù)嗎?產(chǎn)生新的連接等待引入的連接結(jié)束是服務(wù)器監(jiān)聽客戶的連接請求 客戶獲得連接(3)連接池的主要作用l 減少了建立和釋放數(shù)據(jù)庫連接的消耗l 數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而再不是重新建立一個(gè);l 釋放空閑時(shí)間超過最大空閑時(shí)間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項(xiàng)技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。l 封裝用戶信息 使用連接池可以封裝連接數(shù)據(jù)庫系統(tǒng)所用的用戶信息(帳號和密碼),這樣客戶端程序在建立連接時(shí)不用考慮安全信息。(4)數(shù)據(jù)庫連接池的工作原理當(dāng)程序中需要建立數(shù)據(jù)庫連接時(shí),只須從內(nèi)存中取一個(gè)來用而不用新建。同樣,使用完畢后,只需放回內(nèi)存即可。而連接的建立、斷開都有連接池自身來管理。同時(shí),我們還可以通過設(shè)置連接池的參數(shù)來控制連接池中的連接數(shù)、每個(gè)連接的最大使用次數(shù)等等(5)數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到下列幾個(gè)因素:l 最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫連接的使用量不大,將會(huì)有大量的數(shù)據(jù)庫連接資源被浪費(fèi);l 最大連接數(shù)是連接池能申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過此數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待隊(duì)列中,這會(huì)影響之后的數(shù)據(jù)庫操作。如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請求將會(huì)獲利,之后超過最小連接數(shù)量的連接請求等價(jià)于建立一個(gè)新的數(shù)據(jù)庫連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會(huì)馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時(shí)后被釋放。(6)使用連接池得到連接假設(shè)應(yīng)用程序需要建立到一個(gè)名字為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);是否使用連接池獲得一個(gè)連接,在應(yīng)用程序的代碼上是看不出不同的。在使用這個(gè)Connection連接上也沒有什么不一樣的地方,唯一的不同是在java的finally語句塊中來關(guān)閉一個(gè)連接。在finally中關(guān)閉連接是一個(gè)好的編程習(xí)慣。這樣,即使方法拋出異常,Connection也會(huì)被關(guān)閉并回收到連接池中去。代碼應(yīng)該如下所示: 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ù)。設(shè)為0表示無限制。 maxActive 20maxIdle 數(shù)據(jù)庫連接的最大空閑時(shí)間。超過此空閑時(shí)間,數(shù)據(jù)庫連接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無限制。 maxIdle 10 maxWaitmaxWait 最大建立連接等待時(shí)間。如果超過此時(shí)間將接到異常。設(shè)為1表示無限制。 -1 注意:l 所有的入口和資源都放在JNDI命名空間里的java:comp/env段里l 設(shè)置JNDI資源要在$CATALINA_HOME/conf/server.xml文件里使用下列標(biāo)志符:1) -設(shè)置應(yīng)用程序可用的資源的名字和類型(同上面說的等價(jià))。2) -設(shè)置Java資源類工廠的名稱或?qū)⒂玫腏avaBean屬性。上述這些標(biāo)志符必須放在和之間(2)、拷貝SQLServer的JDBC驅(qū)動(dòng)程序到Tomcat的commonlib目錄下(3)、在程序中利用數(shù)據(jù)源來訪問數(shù)據(jù)庫tryContext initCtx = new InitialCo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年部編版語文五年級下冊期末模擬題(含答案)
- 茶樓裝修工程進(jìn)度管理與驗(yàn)收合同
- 教育機(jī)構(gòu)整棟租賃及設(shè)施共建合作協(xié)議
- 餐飲連鎖品牌區(qū)域代理權(quán)及店鋪轉(zhuǎn)讓合同
- 住宅小區(qū)車位產(chǎn)權(quán)轉(zhuǎn)移及管理服務(wù)合同
- 浙江省2024-2025學(xué)年高一語文上學(xué)期期中試題含答案
- 2025年公共文化服務(wù)與發(fā)展專業(yè)職稱評審考試試題及答案
- 生日派對活動(dòng)策劃
- 高新技術(shù)產(chǎn)業(yè)園區(qū)廠房股權(quán)收購與人才引進(jìn)合同
- 高管財(cái)務(wù)信息保護(hù)與競業(yè)禁止合同
- 會(huì)計(jì)領(lǐng)軍人才筆試題庫及答案
- 繼電保護(hù)定值管理制度
- 銑床主軸箱設(shè)計(jì)
- 國開(陜西)2024年秋《社會(huì)調(diào)查》形考作業(yè)1-4答案
- 情感表達(dá) 課件 2024-2025學(xué)年人教版初中美術(shù)七年級上冊
- 愛國英雄霍去病歷史人物介紹
- 2023-2024廣告主KOL營銷市場盤點(diǎn)及趨勢預(yù)測-克勞銳
- 外墻保溫施工分包協(xié)議
- 人教版數(shù)學(xué)六年級下冊期末測試卷及答案【真題匯編】
- 2024年國家中醫(yī)藥管理局監(jiān)測統(tǒng)計(jì)中心招聘7人歷年重點(diǎn)基礎(chǔ)提升難、易點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024年燕舞集團(tuán)限公司公開招聘高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
評論
0/150
提交評論