<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.本人當(dāng)前使用的Tomcat版本為:6.0.20,oracle為穩(wěn)定的9i版本

    2.下文為方便起見,依習(xí)慣以%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應(yīng)用下單獨配置連接池了,且Tomcat會自動重載。當(dāng)然你也可以更改%Tomcat_Home%\conf下的context.xml文件,將所有web應(yīng)用下的連接池進行統(tǒng)一配置。

    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 為當(dāng)前數(shù)據(jù)源JNDI的名字,可以隨意設(shè)定;

    auth 為驗證方式;

    type 資源類型;

    driverClassName 為Oracle驅(qū)動引用;

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

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

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

                  表示無限制。;

    username 為oracle數(shù)據(jù)庫的一個用戶名;

    password 為username的密碼;

    url 為連接oracle的連接地址;

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

    3.在程序中的調(diào)用形式為:

    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”紅色標(biāo)記文字為步驟1里設(shè)置的Resource name

    則可以將建立connection的方式以上述形式取代傳統(tǒng)方式:

    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驅(qū)動類庫導(dǎo)入到%Tomcat_Home%\lib目錄下

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

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

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

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

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

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

    轉(zhuǎn)載一篇tomcat加載類的順序

     

     

    bin:存放啟動和關(guān)閉tomcat的腳本文件; 

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

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

    /server/webapps:存放tomcat自帶的兩個web應(yīng)用:admin應(yīng)用和manager應(yīng)用。 

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

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

    /logs:存放tomcat的日志文件 

    /webapps:當(dāng)發(fā)布web應(yīng)用時,默認(rèn)情況下把web應(yīng)用文件放于此目錄下 

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

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

     

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

     

    Tomcat的class加載的優(yōu)先順序一覽 

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

    2.環(huán)境變量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驅(qū)動之類的jar文件可以放在這里,這樣就可以避免在server.xml配置好數(shù)據(jù)源卻出現(xiàn)找不到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加載成不同的實例。 

    例如假設(shè)下面兩個不同內(nèi)容的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結(jié)果是不同的,且互不影響。 

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

    javax.* 

    org.xml.sax.* 

    org.w3c.dom.* 

    org.apache.xerces.* 

    org.apache.xalan.* 

     

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

    例如某jar的MAINFEST.MF內(nèi)容如下: 

    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可能會產(chǎn)生意想不到的后果,,尤其是不同版本的jar文件,因此在實際應(yīng)用部署web應(yīng)用時候要特別留心. 

     

    例如 使用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中使用到j(luò)avamail進行郵件發(fā)送的時候,便會出現(xiàn)No provider for smtp的錯誤。



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

    歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人

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

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品无码国产污污污免费网站国产 | 外国成人网在线观看免费视频 | 国内一级一级毛片a免费| 亚洲毛片无码专区亚洲乱| 99热在线观看免费| 亚洲系列中文字幕| 97热久久免费频精品99| 亚洲一欧洲中文字幕在线| 久久精品无码一区二区三区免费| 亚洲制服丝袜第一页| 四虎影视大全免费入口| 免费一级特黄特色大片| 亚洲午夜久久久久妓女影院| 男女一进一出抽搐免费视频| 久久国产精品亚洲一区二区| 91精品国产免费入口| 中文日韩亚洲欧美制服| 国产精品高清全国免费观看| 人人爽人人爽人人片av免费| 亚洲中文字幕不卡无码| 一级毛片免费观看| wwwxxx亚洲| 亚洲一级片内射网站在线观看| 99re6在线视频精品免费| 亚洲网红精品大秀在线观看| 青青久在线视频免费观看| 男性gay黄免费网站| 久久久久亚洲AV片无码| 三年片在线观看免费观看高清电影 | 老司机亚洲精品影视www| 久久国产精品国产自线拍免费| 久久精品蜜芽亚洲国产AV| 成年女人18级毛片毛片免费观看| 日韩一级片免费观看| 亚洲综合婷婷久久| 又粗又黄又猛又爽大片免费| 免费日本一区二区| 亚洲国产成人AV在线播放| 亚洲αv在线精品糸列| 青青草国产免费久久久下载| 国产精品网站在线观看免费传媒|