定義JNDI數據源的方法如下:
內容提要:
1、介紹
2、數據連接池的配置
3、不使用連接池的解決方案
4、Oracle數據源配置舉例
一、總體介紹 Introdution
配置JNDI數據源是配置JNDI資源的一個特例,過程和方法都差不多..
請注意:在Tomcat 5.0.x 和 Tomcat 5.5.x版本之間,JNDI資源的配置已經發生了變化,所以,如果你使用的是以上版本需要修改一下配置語法..
本文假定你已經理解了Context和Host的配置,如果沒有,請自行學習..
二、數據連接池的配置 Database Connection Pool(DBCP) Configurations
DBCP提供了對JDBC2.0的支持,如果你使用的1.4版本JVM,DBCP將支持JDBC3.0..
2.1 安裝 Installation
DBCP使用Jakarta-Commons Database Connection Pool,它依賴以下三個包:
Jakarta-Commons DBCP
Jakarta-Commons Collections
Jakarta-Commons Pool
在Tomcat的安裝目錄提供了一個集成的jar包 $CATALINA_HOME/lib/tomcat-dbcp.jar..
三、避免數據連接池洩露 Preventing DB connection pool leaks
顧名思義,數據連接池負責創建和管理數據庫連接.重用一個已經存在的數據連接要比每次都打開新建(new)一個連接效率高的多..
但連接池通常個問題:一個Web應用程序需要關閉ResultSet's,Statement's,Connections's等資源.如果應用程序關閉資源失敗,就是導致這些資源無法在被重用,即數據連接池洩露.最終如果沒有足夠的有效的連接,將導致應用程序連接失敗.
對於這個問題有個解決方法;Jakarta-Commons的DBCP可以通過配置來跟蹤、恢復那些關閉失敗的連接.不但可以恢復,而且還可以生成堆棧軌跡..
為了關閉和重用那個被遺棄的資源,可以在DBCP數據源的資源配置中加入一下屬性:
removeAbandoned="true"
當有效的數據連接低於DBCP設置的時候,就會重用被遺棄的資源..默認是false;
removeAbandonedTimeout="60"
設置被拋棄的數據連接在多少秒之後可以被刪除...默認是300秒.
logAbandoned="true"
如果想要記錄下被拋棄數據連接的堆棧軌跡可以設為true..默認false;
四、Oracle配置舉例
Tomcat只能識別*.jar文件,如果數據庫驅動為*.zip,則需要修改擴展名為jar..對於Oracle9i應該使用 oracle.jdbc.OracleDriver,因為 oracle.jdbc.driver.OracleDriver 已經不建議使用..將來也不一定支持了..
4.1 配置server.xml
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
username="scott" password="tiger" maxActive="20" maxIdle="10"
maxWait="-1"/>
4.2 配置web.xml
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4.3 代碼示例
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.