<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tinguo002

     

    Tomcat6.0 連接池的配置

     Tomcat6.0 連接池的配置

    1.本人當前使用的Tomcat版本為:6.0.20,oracle為穩定的9i版本

    2.下文為方便起見,依習慣以%Tomcat_Home%表示Tomcat安裝的目錄,本人安裝目錄為“E:\Program Files\WindowsXP\tomcat6”

    配置步驟如下:

    1.Tomcat 6的配置和以前的不同了,不推薦在server.xml中進行配置,而是在%Tomcat_Home%\webapps\yourApp\META-INF \context.xml中進行配置才是更好的方法。而不是以前版本%Tomcat_Home%\conf下的context.xml文件。這樣就可以在不同的web應用下單獨配置連接池了,且Tomcat會自動重載。當然你也可以更改%Tomcat_Home%\conf下的context.xml文件,將所有web應用下的連接池進行統一配置。

    2.將代碼修改如下:

    view plaincopy to clipboardprint?
    <Context reloadable="true"> 
        <WatchedResource>WEB-INF/web.xml</WatchedResource> 
        <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"   
        maxActive="100"   
        maxIdle="30" 
        maxWait="10000" 
        username="scott"   
        password="tiger" 
        driverClassName="oracle.jdbc.driver.OracleDriver" 
        url="jdbc:oracle:thin:@localhost:1521:ora9"/> 
    </Context> 
    <Context reloadable="true">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
     maxActive="100"
     maxIdle="30"
     maxWait="10000"
     username="scott"
     password="tiger"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     url="jdbc:oracle:thin:@localhost:1521:ora9"/>
    </Context>

    name 為當前數據源JNDI的名字,可以隨意設定;

    auth 為驗證方式;

    type 資源類型;

    driverClassName 為Oracle驅動引用;

    maxActiv 為連接池最大激活的連接數,設為0表示無限制;

    maxIdle 表示即使沒有數據庫連接時依然可以保持30個空閑的連接,而不被清除,隨時處于待命狀態。設為0表示無限制;

    maxWait 為連接最大的等待時間,單位毫秒,取值10000,表示10000秒后超時。設為-1

                  表示無限制。;

    username 為oracle數據庫的一個用戶名;

    password 為username的密碼;

    url 為連接oracle的連接地址;

    注:本人嘗試將代碼“driverClassName="oracle.jdbc.driver.OracleDriver"”改為“driverClassName="oracle.jdbc.OracleDriver"”程序依然運行正常,剛開始以為老師的代碼有問題

    3.在程序中的調用形式為:

    view plaincopy to clipboardprint?
    Context context = new InitialContext();  
    DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");  
    Connection conn = ds.getConnection(); 
    Context context = new InitialContext();
    DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
    Connection conn = ds.getConnection();

    注:“java:/comp/env/jdbc/oracleds”紅色標記文字為步驟1里設置的Resource name

    則可以將建立connection的方式以上述形式取代傳統方式:

    view plaincopy to clipboardprint?
    String driver = "oracle.jdbc.driver.OracleDriver";  
    String url = "jdbc:oracle:thin:@localhost:1521:ora9";  
    String username = "scott";  
    String password = "tiger";  
    Class.forName(driver);  
    Connection conn = DriverManager.getConnection(url, username, password); 
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:ora9";
    String username = "scott";
    String password = "tiger";
    Class.forName(driver);
    Connection conn = DriverManager.getConnection(url, username, password);

    4.另外還需將用到的jdbc驅動類庫導入到%Tomcat_Home%\lib目錄下

    否則會拋出如下異常:
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

    依上述步驟就能成功的配置Tomcat6.0 連接池,還有網友貼文說需

    在web.xml文件中的web-app節點下加入如下代碼形式:
    <resource-ref>
    <res-ref-name>jdbc/myoracle</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    </resource-ref>

    因本人未添加此項,程序依然正確,故本人認為此步驟為非必要項

     ---------------------------------------------------------------------------

    今天需要在另一臺機器上重新部署系統,重新設置db的連接池。當我把tomcat拷貝到那臺機器,并且修改META-INF\context.xml,然后重新啟動tomcat,但發現系統連接的仍然是老的db。再次檢查了META-INF\context.xml文件,確信了這個文件已經正確設置db連接了,這也說明這個文件并沒有真正起作用。查看了tomcat下conf\context.xml也沒有設置db的連接池。那是哪個文件在起作用呢?折騰了辦法,后來發現tomcat在conf\Catalina\localhost下生成了一個和原來META-INF\context.xml相同內容的文件,懷疑一定是這個文件在起作用?刪除conf\Catalina\localhost目錄,重啟tomcat,問題消失。

    轉載一篇tomcat加載類的順序

     

     

    bin:存放啟動和關閉tomcat的腳本文件; 

    /conf:存放tomcat的各種配置文件,比如:server.xml 

    /server/lib:存放tomcat服務器所需要的各種jar文件(jar文件只可被tomcat 服務器訪問) 

    /server/webapps:存放tomcat自帶的兩個web應用:admin應用和manager應用。 

    /common/lib:存放tomcat服務器以及所有web應用都可以訪問的jar文件夾(web和tomcat服務器都可訪問此jar) 

    /shared/lib:存放web都可訪問的jar文件。(可以被所有的web訪問,但不能被tomcat訪問) 

    /logs:存放tomcat的日志文件 

    /webapps:當發布web應用時,默認情況下把web應用文件放于此目錄下 

    /work:tomcat把由jsp生成的Servlet放于此目錄 

    另:在web應用中,WEB-Inf目錄下,也可以建立lib子目錄,在此子目錄下可以存放各種jar文件,這些jar文件只能被當前web應用訪問。其中,在web-inf目錄下的lib與classes目錄,Tomcat類裝載器先裝載classes目錄下的類,再裝載lib目錄下的類。因為類同名時,classes優先。 

     

    其中jsp運行時,查找class的順序為:項目文件夾(WEB-INF\lib)===》容器文件夾(tomcat\common\lib)==》jdk文件夾(jdk\jre\lib\ext) 

     

    Tomcat的class加載的優先順序一覽 

    1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 

    2.環境變量CLASSPATH中的jar和class文件。 

    3.$CATALINA_HOME/common/classes下的class文件。 

    4.$CATALINA_HOME/commons/endorsed下的jar文件。 

    5.$CATALINA_HOME/commons/i18n下的jar文件。 

    6.$CATALINA_HOME/common/lib 下的jar文件。 

    (JDBC驅動之類的jar文件可以放在這里,這樣就可以避免在server.xml配置好數據源卻出現找不到JDBC Driver的情況。) 

    7.$CATALINA_HOME/server/classes下的class文件。 

    8.$CATALINA_HOME/server/lib/下的jar文件。 

    9.$CATALINA_BASE/shared/classes 下的class文件。 

    10.$CATALINA_BASE/shared/lib下的jar文件。 

    11.各自具體的webapp /WEB-INF/classes下的class文件。 

    12.各自具體的webapp /WEB-INF/lib下的jar文件。 

     

    class的搜尋順序如下 

    ------------- 

    /WEB-INF/classes of your web application 

    /WEB-INF/lib/*.jar of your web application 

    $CATALINA_HOME/common/classes 

    $CATALINA_HOME/common/endorsed/*.jar 

    $CATALINA_HOME/common/i18n/*.jar 

    $CATALINA_HOME/common/lib/*.jar 

    $CATALINA_BASE/shared/classes 

    $CATALINA_BASE/shared/lib/*.jar 

    -------------- 

    因此放在不同webapp里的class文件,會被classloader加載成不同的實例。 

    例如假設下面兩個不同內容的class。分別放在不同的webapp的class目錄下。 

    package com.lizongbo; 

    public class TestClass { 

      private String NAME="lizongbo"; 

     

    package com.lizongbo; 

    public class TestClass { 

      private String NAME="li_zongbo"; 

     

    在不同的webapp得到的com.lizongbo.NAME結果是不同的,且互不影響。 

    但是注意,以下包名開頭的class例外: 

    javax.* 

    org.xml.sax.* 

    org.w3c.dom.* 

    org.apache.xerces.* 

    org.apache.xalan.* 

     

    ps,注意.在各個jar中的\META-INF\MAINFEST.MF文件里Class-Path鍵值對,也會提供jar的加載優先順序。 

    例如某jar的MAINFEST.MF內容如下: 

    Manifest-Version: 1.0 

    Created-By: lizongbo 

    Class-Path: commons-beanutils.jar 

    Class-Path: commons-collections.jar 

    Class-Path: commons-dbcp.jar 

    Class-Path: commons-digester.jar 

    Class-Path: commons-logging.jar 

    Class-Path: commons-pool.jar 

    Class-Path: commons-services.jar 

    Class-Path: commons-validator.jar 

    Class-Path: jakarta-oro.jar 

    Main-Class: com.lizongbo.MyTestClass 

     

     

    那么在加載這個jar的時候,會先在此jar所在目錄下依次先加載commons-beanutils.jar,commons-collections.jar。。。等jar文件。 

     

    在不同的地方放置jar和class可能會產生意想不到的后果,,尤其是不同版本的jar文件,因此在實際應用部署web應用時候要特別留心. 

     

    例如 使用javamail常見的一個出錯信息: 

    javax.mail.NoSuchProviderException: No provider for smtp 

    其真實原因就很可能如下: 

    在不同的加載jar的目錄下放置了不同版本的mail.jar,比如一個是javamail1.3.1的mail.jar 

    在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一個是javamail1.3.2的mail.jar在 

    D:\jakarta-tomcat-5.5.8\webapps\lizongbo\WEB-INF/lib下, 

    那么lizongbo這個webapp中使用到javamail進行郵件發送的時候,便會出現No provider for smtp的錯誤。



    詳細出處參考:http://www.tkk7.com/gm_jing/articles/308828.html

    歡迎大家訪問我的個人網站 萌萌的IT人

    posted on 2014-06-18 14:54 一堣而安 閱讀(499) 評論(0)  編輯  收藏 所屬分類: tomcat

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本免费网站在线观看| 午夜一级毛片免费视频| 亚洲开心婷婷中文字幕| h在线看免费视频网站男男| 亚洲麻豆精品国偷自产在线91| 日韩成人毛片高清视频免费看| 国产午夜无码视频免费网站| 在线91精品亚洲网站精品成人| 免费国产a国产片高清网站| 成年网在线观看免费观看网址| 亚洲乱码国产乱码精品精| 久久国产精品成人免费| 亚洲伊人久久大香线蕉苏妲己| 91av视频免费在线观看| 亚洲精品中文字幕无乱码麻豆| 国产亚洲精品免费| 国产裸体美女永久免费无遮挡| 久久精品夜色国产亚洲av| 97性无码区免费| 国产AV无码专区亚洲AV麻豆丫| 亚洲日本中文字幕天堂网| 日韩免费在线观看视频| 亚洲人成电影青青在线播放| 国产精品va无码免费麻豆| 成在人线av无码免费高潮水| 91亚洲导航深夜福利| 日本不卡在线观看免费v| 久久成人永久免费播放| 亚洲精品国产情侣av在线| 永久免费视频v片www| 99精品全国免费观看视频..| 亚洲最新黄色网址| 免费国产怡红院在线观看| 亚洲免费观看视频| 亚洲欧美综合精品成人导航| 亚洲色偷拍另类无码专区| 一级女人18毛片免费| 一级毛片免费播放男男| 亚洲视频在线观看网址| 免费人成激情视频| 亚洲黄色免费观看|