如何定義JNDI數據源 (抽取翻譯了一下Tomcat文檔的JNDI數據源的部分,不對的地方請指正..)
內容提要:
1、介紹
2、數據連接池的配置
3、不使用連接池的解決方案
4、Oracle數據源配置舉例
1、總體介紹 Introdution
配置JNDI數據源是配置JNDI資源的一個特例,過程和方法都差不多..
請注意:在Tomcat 5.0.x 和 Tomcat 5.5.x版本之間,JNDI資源的配置已經發生了變化,所以,如果你使用的是以上版本需要修改一下配置語法..
本文假定你已經理解了Context和Host的配置,如果沒有,請自行學習..
2、數據連接池的配置 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 避免數據連接池泄露 Preventing DB connection pool leaks
顧名思義,數據連接池負責創建和管理數據庫連接.重用一個已經存在的數據連接要比每次都打開新建(new)一個連接效率高的多..
但連接池通常個問題:一個Web應用程序需要關閉ResultSet's,Statement's,Connections's等資源.如果應用程序關閉資源失敗,就是導致這些資源無法在被重用,即數據連接池泄露.最終如果沒有足夠的有效的連接,將導致應用程序連接失敗.
對于這個問題有個解決方法;Jakarta-Commons的DBCP可以通過配置來跟蹤、恢復那些關閉失敗的連接.不但可以恢復,而且還可以生成堆棧軌跡..
為了關閉和重用那個被遺棄的資源,可以在DBCP數據源的資源配置中加入一下屬性:
xml 代碼
當有效的數據連接低于DBCP設置的時候,就會重用被遺棄的資源..默認是false;
xml 代碼
- removeAbandonedTimeout="60"
設置被拋棄的數據連接在多少秒之后可以被刪除...默認是300秒.
xml 代碼
如果想要記錄下被拋棄數據連接的堆棧軌跡可以設為true..默認false;
4、Oracle配置舉例
Tomcat只能識別*.jar文件,如果數據庫驅動為*.zip,則需要修改擴展名為jar..對于Oracle9i應該使用 oracle.jdbc.OracleDriver,因為 oracle.jdbc.driver.OracleDriver 已經不建議使用..將來也不一定支持了..
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();
-
英文原文地址:tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
2007-06-27
jvincent
|