使用連接池---jndi

在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接並打開數據庫是一件既消耗資源又費時的工作,如果頻繁發生這種數據庫操作,系統的性能必然會急劇下降,甚至會導致系統崩潰。數據庫連接池技術是解決這個問題最常用的方法,在許多應用程序服務器(例如:Weblogic,WebSphere,JBoss,Tomcat)中,基本都提供了這項技術,無需自己編程。

數據庫連接池技術非常簡單是將數據庫連接作爲對象存儲在一個Vector對象中,一旦數據庫連接建立後,不同的數據庫訪問請求就可以共享這些連接,這樣,通過複用這些已經建立的數據庫連接,可以克服上述缺點,極大地節省系統資源和時間。

數據庫連接池的主要操作如下:
建立數據庫連接池對象(服務器啓動)。
按照事先指定的參數創建初始數量的數據庫連接(即:空閒連接數)。
對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閒的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的數據庫連接。
存取數據庫。
關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,並非真正關閉,而是將其放入空閒隊列中。如實際空閒連接數大於初始空閒連接數則釋放連接)。
釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,並釋放所有連接)

JNDI( Java Naming and Directory Interface,Java命名和目錄接口)是一組在Java應用中訪問命名和目錄服務的API。命名服務將名稱和對象聯繫起來,使得我們可以用名稱訪問對象。
JNDI要注意的重要一點是,它提供了應用編程接口(application programming interface,API)和服務提供者接口(service provider interface,SPI)。這一點的真正含義是,要讓你的應用與命名服務或目錄服務交互,必須有這個服務的JNDI服務提供者,這正是JNDI SPI發揮作用的地方。服務提供者基本上是一組類,這些類爲各種具體的命名和目錄服務實現了JNDI接口—很象JDBC驅動爲各種具體的數據庫系統實現了JDBC接口一樣。作爲一個應用開發者,你不必操心JNDI SPI。你只需要確認你要使用的每一個命名或目錄服務都有服務提供者。 

1.將class12.jar拷到中間件(Tomcat)
           \tomcat6\lib目錄中。

2.tomcat-dbcp.jar在Tomcat中必須的

局部連接池

在tomcat的server.xml中配置

<Context path="/DBCP_Project" docBase="G:\WookRoot\DBCP_Project\WebRoot" reloadable="true">
<Resource name="jdbc/tcpdb1"

                          auth="Container"
                           type="javax.sql.DataSource"
                 username="jn0907"
                 password="jn0907" 
                 url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
                 driverClassName="oracle.jdbc.driver.OracleDriver" 
                 maxActive="4"
                 maxIdle="2"
                 maxWait="5000"/> 
</Context>

Resource項(即連接池的DataSource對象),
有3個屬性name、auth、type,
name項是JNDI的名稱定義,程序通過JNDI才能找到此對象,名稱可以任意取值,這裏取名jdbc/tcpdb1 ;auth項即連接池管理權屬性,這裏取值Container,申明爲容器管理;type項即對象的類型,這裏取值javax.sql.DataSource,申明爲數據庫連接池。

maxActive是最大活動連接數,這裏取值爲20,表示同時最多有20個數據庫連接。
maxIdle是最大的空閒連接數,這裏取值爲20,表示即使沒有數據庫連接時依然可以保持20空閒的連接,而不被清除,隨時處於待命狀態。
MaxWait是最大等待秒鐘數,這裏取值-1,表示無限等待,直到超時爲止,也可取值1000,表示1秒後超時。

連接池的調用

Context context = new InitialContext(); //容器上下文初始化.


DataSource ds= (DataSource)context.lookup(“java:comp/env/jdbc/tcpdb1”);//通過JNDI名得到數據源.


Connection conn = ds.getConnection();//獲取連接對象.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章