轉(zhuǎn)錄筆記:不過遺憾的是,如下幾種方法都沒有在我的機器上配置成功(Tomcat5.5.17 + WinXPSP2)。正確配置見我自己的評論,Tomcat 的日志中沒發(fā)現(xiàn)什么錯誤,看上去都很正常,但是測試程序卻老是提示同樣的錯誤:

          Error occurred:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

          但Driver名和URL都設(shè)置對了,在Admin的DataSource中也看得到。

          Tomcat版本之間變化太大了,請大家?guī)兔纯矗降啄睦镉袉栴},謝謝!


          1.在$CATALINA_HOME/conf/server.xml中添加配置信息,聲明連接池的具體信息,添加內(nèi)容如下:
            
            <!--聲明連接池-->
            
            <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
            
            <!-- 對連接池的參數(shù)進行設(shè)置 -->
            
            <ResourceParams name="jdbc/mysql">
            
            <parameter>
            
            <name>factory</name>
            
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxWait</name>
            
            <value>5000</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxActive</name>
            
            <value>20</value>
            
            </parameter>
            
            <parameter>
            
            <name>username</name>
            
            <value>shopadm</value>
            
            </parameter>
            
            <parameter>
            
            <name>password</name>
            
            <value>123</value>
            
            </parameter>
            
            <parameter>
            
            <name>url</name>
            
            <value>jdbc:mysql://localhost/shopdb?useUnicode=true&charact-erEncoding=gb2312</value>
            
            </parameter>
            
            <parameter>
            
            <name>driverClassName</name>
            
            <value>com.mysql.jdbc.Driver</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxIdle</name>
            
            <value>10</value>
            
            </parameter>
            
            </ResourceParams>
            
            2. 在$CATALINA_HOME/conf/web.xml的</web-app>前添加如下信息:
            
            <resource-ref>
            
            <description>DB Connection</description>
            
            <res-ref-name>jdbc/mysql</res-ref-name>
            
            <res-type>javax.sql.DataSource</res-type>
            
            <res-auth>Container</res-auth>
            
            </resource-ref>
            
            其中<res-ref-name>中的參數(shù)名必須和server.xml中聲明的連接名一樣。
            
            3. 在$CATALINA_HOME/conf/catalina/localhost目錄下找到需要進行數(shù)據(jù)庫連接的當前程序的配置信息,比如這里是shopping.xml,在這個文件中添加如下信息:
            
            <Context …>
            
            …
            
            <ResourceLink name=”jdbc/mysql” global=”jdbc/mysql” type=”javax.sql.DataSource”/>
            
            …
            
            </Context>
            
            大功告成!
            
            在此基礎(chǔ)上,參考Tomcat官方網(wǎng)站的用戶手冊,摸索出另外一種配置連接池的方法,這個方法不需要對server.xml進行修改,只要對需要使用到連接池的程序的配置文檔進行修改就可以了。方法如下:
            
             1.$CATALINA_HOME/conf/catalina/localhost目錄下找到需要數(shù)據(jù)庫連接池的程序的配置文檔,此處是 shopping.xml。在<Context> </Context>之間添加如下信息,聲明一個數(shù)據(jù)庫連接池:
            
            <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
            
            <ResourceParams name="jdbc/mysql">
            
            <parameter>
            
            <name>factory</name>
            
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxWait</name>
            
            <value>5000</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxActive</name>
            
            <value>20</value>
            
            </parameter>
            
            <parameter>
            
            <name>password</name>
            
            <value>123</value>
            
            </parameter>
            
            <parameter>
            
            <name>url</name>
            
            <value>jdbc:mysql://localhost/shopdb?useUnicode=true&characterEncoding=gb2312</value>
            
            </parameter>
            
            <parameter>
            
            <name>driverClassName</name>
            
            <value>com.mysql.jdbc.Driver</value>
            
            </parameter>
            
            <parameter>
            
            <name>maxIdle</name>
            
            <value>10</value>
            
            </parameter>
            
            <parameter>
            
            <name>username</name>
            
            <value>shopadm</value>
            
            </parameter>
            
            </ResourceParams>
            
            這里的參數(shù)和上一種方法中添加到server.xml里的信息幾乎是完全一樣的。
            
            2.在對應(yīng)程序的WEB-INF下建立一個web.xml文檔,添加如下信息:
            
            <?xml version="1.0" encoding="ISO-8859-1"?>
            
            <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
            
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
            
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
            
            version="2.4">
            
            <resource-ref>
            
            <description>DB Connection</description>
            
            <res-ref-name>jdbc/mysql</res-ref-name>
            
            <res-type>javax.sql.DataSource</res-type>
            
            <res-auth>Container</res-auth>
            
            </resource-ref>
            
            </web-app>

          另外一種方法,與Admin 頁面配置結(jié)果比較接近,同樣是放在GlobalNamingResources中

          1.將數(shù)據(jù)庫驅(qū)動程序的JAR文件放在Tomcat的?common/lib?中;

          2.在server.xml中設(shè)置數(shù)據(jù)源,以MySQL數(shù)據(jù)庫為例,如下:
          在<GlobalNamingResources>?</GlobalNamingResources>節(jié)點中加入,
          ??????<Resource
          ??????name="jdbc/DBPool"
          ??????type="javax.sql.DataSource"
          ??????password="root"
          ??????driverClassName="com.mysql.jdbc.Driver"
          ??????maxIdle="2"
          ??????maxWait="5000"
          ??????username="root"
          ??????url="jdbc:mysql://127.0.0.1:3306/test"
          ??????maxActive="4"/>
          ???屬性說明:name,數(shù)據(jù)源名稱,通常取”jdbc/XXX”的格式;
          ????????????type,”javax.sql.DataSource”;
          ????????????password,數(shù)據(jù)庫用戶密碼;
          ????????????driveClassName,數(shù)據(jù)庫驅(qū)動;
          ????????????maxIdle,最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時間。超過空閑時間,數(shù)據(jù)庫連
          ?????????????????????接將被標記為不可用,然后被釋放。設(shè)為0表示無限制。
          ????????????MaxActive,連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制。
          ????????????maxWait?,最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示
          ?????????????????????無限制。

          3.在你的web應(yīng)用程序的web.xml中設(shè)置數(shù)據(jù)源參考,如下:
          ??在<web-app></web-app>節(jié)點中加入,
          ??<resource-ref>
          ????<description>MySQL?DB?Connection?Pool</description>
          ????<res-ref-name>jdbc/DBPool</res-ref-name>
          ????<res-type>javax.sql.DataSource</res-type>
          ????<res-auth>Container</res-auth>
          ????<res-sharing-scope>Shareable</res-sharing-scope>
          ?</resource-ref>
          ??子節(jié)點說明:?description,描述信息;
          ???????????????res-ref-name,參考數(shù)據(jù)源名字,同上一步的屬性name;
          ???????????????res-type,資源類型,”javax.sql.DataSource”;
          ???????????????res-auth,”Container”;
          ???????????????res-sharing-scope,”Shareable”;

          4.在web應(yīng)用程序的context.xml中設(shè)置數(shù)據(jù)源鏈接,如下:
          ??在<Context></Context>節(jié)點中加入,
          ??<ResourceLink
          ???name="jdbc/DBPool"?
          ???type="javax.sql.DataSource"?
          ???global="jdbc/DBPool"/>
          ???屬性說明:name,同第2步和第3步的屬性name值,和子節(jié)點res-ref-name值;
          ?????????????type,同樣取”javax.sql.DataSource”;
          ?????????????global,同name值。
          ?
          至此,設(shè)置完成,下面是如何使用數(shù)據(jù)庫連接池。
          1.建立一個連接池類,DBPool.java,用來創(chuàng)建連接池,代碼如下:
          import?javax.naming.Context;
          import?javax.naming.InitialContext;
          import?javax.naming.NamingException;
          import?javax.sql.DataSource;

          public?class?DBPool?{
          ????private?static?DataSource?pool;
          ????static?{
          ?????????Context?env?=?null;
          ??????????try?{
          ??????????????env?=?(Context)?new?InitialContext().lookup("java:comp/env");
          ??????????????pool?=?(DataSource)env.lookup("jdbc/DBPool");
          ??????????????if(pool==null)?
          ??????????????????System.err.println("'DBPool'?is?an?unknown?DataSource");
          ???????????????}?catch(NamingException?ne)?{
          ??????????????????ne.printStackTrace();
          ??????????}
          ??????}
          ????public?static?DataSource?getPool()?{
          ????????return?pool;
          ????}
          }

          2. 在要用到數(shù)據(jù)庫操作的類或jsp頁面中,用DBPool.getPool().getConnection(),獲得一個Connection對象,就可 以進行數(shù)據(jù)庫操作,最后別忘了對Connection對象調(diào)用close()方法,注意:這里不會關(guān)閉這個Connection,而是將這個 Connection放回數(shù)據(jù)庫連接池。

          Feedback

          # re: Tomcat5下配置MySQL數(shù)據(jù)庫連接池  回復  更多評論   

          2006-08-03 13:37 by 小李飛刀
          在網(wǎng)上再三查找,并經(jīng)過反復試驗后,總算是把它配置好了,發(fā)現(xiàn)如下幾個問題:
          1。 Tomcat 5.5.17 的Admin功能很不完善,在JNDI的配置上存在BUG,無法把非全局的DataSource 或ResourceLinks寫入%TOMCAT_HOME%/conf/Catalina/localhost/<webname>.xml中;只能手工進行;

          2. CLASSPATH配置可能也有問題,Driver包必須放在%TOMCAT_HOME%\common\lib下才能被找到,%TOMCAT_HOME%/shared/lib下不行,甚至在<webname>/WEB-INF/lib下也不能被找到,應(yīng)該是這個版本的問題,記得以前至少在應(yīng)用下是能找到的;

          總結(jié)一下,主要是三個地方要配置:

          a. %TOMCAT_HOME%/conf/ 下配置DataSource: 配置server.xml 或 localhost/<webname>.xml
          其中server.xml下配置DataSource則可供所有WEB應(yīng)用使用,
          需要在<GlobalNamingResources> 下加上<Resource>項,這個通過Admin頁面也可以完成;然后給需要用到的應(yīng)用中加上<ResourceLink>即可,但只能手工進行
          <ResourceLink name="jdbc/<jndiname>" global="jdbc/<jndiname>" type="javax.sql.DataSource"/>, 放在<Context>下;

          如果只想給某個程序用,不想配置Server.xml的話,可以只在localhost/<webname>.xml中加上<Resource>,把<Resource>加到<Context>下
           
          <Resource
          auth="Container"
          description="DB Connection"
          name="jdbc/<jndiname>"
          type="javax.sql.DataSource"
          driverClassName="com.mysql.jdbc.Driver"
          password="<pass>"
          maxIdle="2"
          maxWait="5000"
          username="<user>"
          url="jdbc:mysql://localhost/<dbname>"
          maxActive="4"/>


          b. 在應(yīng)用的web.xml中配置<resource-ref>
          <resource-ref>
          <description>EMCenter Database for WEB Applications</description>
          <res-ref-name>jdbc/<jndiname></res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
          </resource-ref>

          c. 把driver包拷貝到%TOMCAT_HOME%/common/lib/下,應(yīng)該是最簡配置了,有興趣的可以繼續(xù)試驗,留意看logs/目錄下的日志記錄能加快進程。其實Admin要是能改進一下最好了,這樣太麻煩

          另: 有些不解的是,我用的sqltags包(jstl.jar,standard.jar)放在WEB-INF/lib下卻能被找到,測試代碼如下:

          <%@ page language="java" contentType="text/html; charset=GB18030"
          pageEncoding="GB18030"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


          <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

          <sql:query var="rs" dataSource="jdbc/<jndiname>">
          select * from <tablename>
          </sql:query>

          <html>
          <head>
          <title>DB Test</title>
          </head>
          <body>

          <h2>Results</h2>

          <c:forEach var="row" items="${rs.rows}">
          ID ${row.id}<br/>
          name ${row.name}<br/>
          </c:forEach>

          </body>
          </html>

          # re: Tomcat5下配置MySQL數(shù)據(jù)庫連接池[未登錄]  回復  更多評論   

          2009-01-20 10:32 by HH
          NND,我怎么弄都不行!

          posts - 44, comments - 43, trackbacks - 0, articles - 5

          Copyright © 小李飛刀

          涉足江湖,廣交朋友
          尋找有共同興趣愛好者一起開創(chuàng)掌上移動應(yīng)用!


          歡迎光臨!您是第 hit counter 位訪客。
          主站蜘蛛池模板: 聊城市| 全州县| 田阳县| 扶沟县| 曲沃县| 获嘉县| 平度市| 大田县| 中牟县| 鄂州市| 兴国县| 上杭县| 宁蒗| 罗山县| 新乐市| 改则县| 甘南县| 托克逊县| 上蔡县| 观塘区| 虎林市| 紫金县| 东乌珠穆沁旗| 建瓯市| 镇雄县| 疏勒县| 班玛县| 鸡泽县| 右玉县| 泰顺县| 桐城市| 长岛县| 芜湖市| 盖州市| 静安区| 库尔勒市| 陇川县| 长泰县| 台中县| 乐都县| 荣成市|