如何定義JNDI數(shù)據(jù)源 (抽取翻譯了一下Tomcat文檔的JNDI數(shù)據(jù)源的部分,不對的地方請指正..)
內(nèi)容提要: 1、介紹 2、數(shù)據(jù)連接池的配置 3、不使用連接池的解決方案 4、Oracle數(shù)據(jù)源配置舉例
1、總體介紹 Introdution
配置JNDI數(shù)據(jù)源是配置JNDI資源的一個特例,過程和方法都差不多.. 請注意:在Tomcat 5.0.x 和 Tomcat 5.5.x版本之間,JNDI資源的配置已經(jīng)發(fā)生了變化,所以,如果你使用的是以上版本需要修改一下配置語法.. 本文假定你已經(jīng)理解了Context和Host的配置,如果沒有,請自行學(xué)習(xí)..
2、數(shù)據(jù)連接池的配置 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.. 3 避免數(shù)據(jù)連接池泄露 Preventing DB connection pool leaks 顧名思義,數(shù)據(jù)連接池負(fù)責(zé)創(chuàng)建和管理數(shù)據(jù)庫連接.重用一個已經(jīng)存在的數(shù)據(jù)連接要比每次都打開新建(new)一個連接效率高的多.. 但連接池通常個問題:一個Web應(yīng)用程序需要關(guān)閉ResultSet's,Statement's,Connections's等資源.如果應(yīng)用程序關(guān)閉資源失敗,就是導(dǎo)致這些資源無法在被重用,即數(shù)據(jù)連接池泄露.最終如果沒有足夠的有效的連接,將導(dǎo)致應(yīng)用程序連接失敗. 對于這個問題有個解決方法;Jakarta-Commons的DBCP可以通過配置來跟蹤、恢復(fù)那些關(guān)閉失敗的連接.不但可以恢復(fù),而且還可以生成堆棧軌跡.. 為了關(guān)閉和重用那個被遺棄的資源,可以在DBCP數(shù)據(jù)源的資源配置中加入一下屬性:
xml 代碼 removeAbandoned="true"
當(dāng)有效的數(shù)據(jù)連接低于DBCP設(shè)置的時候,就會重用被遺棄的資源..默認(rèn)是false;
xml 代碼 removeAbandonedTimeout="60"
設(shè)置被拋棄的數(shù)據(jù)連接在多少秒之后可以被刪除...默認(rèn)是300秒.
xml 代碼 logAbandoned="true"
如果想要記錄下被拋棄數(shù)據(jù)連接的堆棧軌跡可以設(shè)為true..默認(rèn)false;
4、Oracle配置舉例 Tomcat只能識別*.jar文件,如果數(shù)據(jù)庫驅(qū)動為*.zip,則需要修改擴展名為jar..對于Oracle9i應(yīng)該使用 oracle.jdbc.OracleDriver,因為 oracle.jdbc.driver.OracleDriver 已經(jīng)不建議使用..將來也不一定支持了.. 4.1 配置server.xml
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
xml 代碼 <resource-ref> <description>Oracle Datasource exampledescription> <res-ref-name>jdbc/myoracleres-ref-name> <res-type>javax.sql.DataSourceres-type> <res-auth>Containerres-auth> resource-ref>
4.3 代碼示例
java 代碼 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle"); Connection conn = ds.getConnection();
|