攻破JNDI連接池(Tomcat5.5下透過管理介面設定連接池)
作者:Eve Cole
更新時間:2009-07-03 16:56:20
攻破JNDI連線池- -
經過幾天的努力,終於可以連接上連接池了,其中參考了很多大俠關於這方面的貼子,現在將這幾天出現的幾個問題寫在這裡:
一.在tomcat_homecommon下放入jdbc的三個驅動程式(一定要的哦),可以在微軟的網站上去下載,安裝的SQLSERVER2k預設的用戶名是sa,密碼是空,但密碼為空並不代表沒有密碼,所以你的url中一定要定義username和password,最好是重設定一下密碼二.出現不能引用錯誤的話一般就是路徑沒有寫對,tomcat預設的路徑是tomcat_homewebapps不過使用5.5 .x的話,按下面方法就行,不需要設定路徑,而且也不用在youwebappWEB-INFweb.xml檔案設定引用三.tomcat5.5.x版的server.xml設定與tomcat5.0的設定不同,以下列舉三種在tomcat5.5.x的設定方法,如果設定不正確會出現javax.naming.NameNotFoundException: Name is not bound in this Context 錯誤方式一、全域資料庫連線池
1、透過管理介面配置連線池,或直接在tomcatconfserver.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
2.在tomcatwebappsmyappMETA-INFcontext.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
這樣就可以了。
方式二、全域資料庫連線池
1、同上
2.在tomcatconfcontext.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
方式三、局部資料庫連線池只需在tomcatwebappsmyappsMETA-INFcontext.xml的Context中增加:
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
參數說明:
driveClassName:JDBC驅動類別的完整的名稱;
maxActive:同時能夠從連線池中被指派的可用實例的最大數;
maxIdle:可以同時閒置在連接池中的連接的最大數;
maxWait:最大超時時間,以毫秒計;
password:使用者密碼;
url:到JDBC的URL連線;
user:使用者名稱;
validationQuery:用來查詢池中空閒的連線。
以上三種方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是從微軟網站下載的sql server jdbc (sp3)。
四.報錯org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)此是一個小問題,因為我的SQLSERVER2K的服務改成手動的,所以每次啟動後就要手動的啟動SQLSERVER2K,由於一下子不記的啟動了,所以報些錯誤,所以如果你經常要用到SQLSERVER2K的話,最好不要將其改為手動啟動