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

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

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

    隨筆 - 45, 文章 - 6, 評論 - 4, 引用 - 0
    數據加載中……

    tomcat數據源的配置和使用

    原創  tomcat數據源的配置和使用 收藏

    一、數據源簡介:
    ************************************************************************************
    在Java語言中,DataSource對象就是一個代表數據源實體的對象。一個數據源就是一個用來存儲數據的工具,它可以是復雜的大型企業級數據庫,也可以是簡單得只有行和列的文件。數據源可以位于在服務器端,也可以位于客服端。

    應用程序通過一個連接來訪問數據源,那么一個DataSource對象就是用于提供連接數據源的工具。DataSource接口提供了兩個方法用于建立和數據源的連接
    使用DataSource對象建立和數據庫的連接比起使用DriverManager接口更加高效,雖然兩者的使用范圍都很相似,并且都提供了方法用于建立和數據庫的連接,設置連接的最大超時時間,獲取流、登錄。
       
    但兩者之間的區別更加明顯。和DriverManager不同,一個DataSource對象能夠識別和描述它所代表的數據源的屬性,而且DataSource對象的工作和JNDI(Javatm Naming and Directory Interfaceti)具有密切的關系,DataSource的建立、發布、獨立于應用程序的管理都依靠JNDI技術。
        
    在JDBC2.0或JDBC3.0中,所有的數據庫驅動程序提供商必須提供一個實現了DataSource接口的類,要使用數據源必須首先在JNDI中注冊該數據源對象。
    如果在JNDI中注冊了數據源對象,將會比起使用DriverManager來具有兩個方面的優勢:
    首先程序不需要像使用DriverManager一樣對加載的數據庫驅動程序信息進行硬編碼,程序員可以選擇先在JNDI中注冊這個數據源對象,然后在程序中使用一個邏輯名稱來引用它,JNDI會自動根據你給出的名稱找到與這個名稱綁定的DataSource對象。然后就可以使用這個DataSource對象來建立和具體數據庫的連接了。

    其次,使用實現了DataSource接口的類所具有的第二個優勢體現在連接池和分布式事務上。連接池通過對連接的復用而不是新建一個物理連接來顯著地提高程序的效率。從而適用于任務繁忙、負擔繁重的企業級分布式事務。
    *************************************************************************************

    二、JNDI簡介:
    *************************************************************************************
    JNDI是用于向Java程序提供目錄和命名功能的API。它被設計成獨立于特定的目錄服務,所以各種各樣的目錄都可以通過相同的方式進行訪問。

    可以簡單地把JNDI理解為一種將對象和名字綁定的技術,對象工廠負責生產出對象,這些對象都和惟一的名字綁定。外部程序可以通過名字來獲取對某個對象的引用。

    在Intranets(企業內部網)和Internates(互聯網)中目錄服務(Directory service)扮演了一個非常重要的角色,它能夠在眾多的用戶、機器、網絡、服務、應用程序中訪問各種各樣的信息。目錄服務提供了一系列的命名措施,用人類可以理解的命名方式來刻畫各種各樣的實體之間的關系

    一個企業式計算環境(computing environment)通常是由若干代表不同部分的命名復合而成。比如在一個企業級環境中DNS(Domain Name System)通常被當成頂層的命名方案(top-level namein facility)區分不同的部門或組織。而這些部門或組織自己又可以使用諸如LADP或NDS的目錄服務

    從用戶的角度來看,這些都是由不同的命名方案構成的復合名稱。URL就是一個很典型的例子,它由多個命名方案構成。使用目錄服務的應用程序必須支持這種復合構成方式

    使用目錄服務API的Java開發人員獲得的好處不僅在于API獨立于特定的目錄或命名服務,而且可以通過多層的命名方案無縫訪問(seamless acess)目錄對象。實際上,任何的應用程序都可以將自身的對象和特定的命名綁定起來,這種功能可以使到任何的Java程序查找和獲取任何類型的對象

    終端用戶可以方便地使用邏輯名稱從而輕易地在網絡上查找和識別各種不同的對象,目錄服務的開發人員可以使用API方便地在不同的客服端之間切換而不需要作任何更改
    *************************************************************************************


    三、數據源和連接池的關系:
    *************************************************************************************
    JDBC2.0提供了javax.sql.DataSource接口,它負責建立與數據庫的連接,在應用程序訪問數據庫時不需要編寫連接數據庫的代碼,可以直接從數據源獲得數據庫連接。

    在DataSource中事先建立了多個數據庫連接,這些數據庫連接保存在連接池(Connect Pool)中。Java程序訪問數據庫時,只需要從連接池中取出空閑狀態的數據庫連接;當程序訪問數據庫結束,再將數據庫連接放回連接池。
    *************************************************************************************


    四、數據源和JNDI的關系:
    *************************************************************************************
    DataSource對象是由Tomcat提供的,因此不能在程序中采用創建一個實例的方式來生產DataSource對象,而需要采用Java的另一個技術JNDI,來獲得DataSource對象的引用。

    Tomcat把DataSource作為一種可以配置的JNDI資源來處理。生成DataSource對象的工廠為org.apache.commons.dbcp.BasicDataSourceFactory。

    在javax.naming包中提供了Context接口,該接口提供了將對象和名字綁定,以及通過名字檢索對象的方法。Context中的主要方法有:
    bind(String name,Object object):將對象與一個名字綁定
    lookup(String name):返回與指定的名字綁定的對象
    *************************************************************************************


    五、Tomcat中數據源的配置:
    *************************************************************************************
    數據源的配置涉及修改server.xml和web.xml,在server.xml中加入定義數據源的元素<Resource>,在web.xml加入<resource-ref>元素,聲明該Web應用所引用的數據


    A.在server.xml中加入<Resource>元素:<Resource>元素用來定義JNDI Resource。

    屬性    描述
    name    指定Resource的JNDI名字
    auth    指定管理Resource的Manager,它有兩個可選值:Container、Application
    type    指定Resource所屬的Java類名

    <Resource name = "jdbc/BookDb" 
    auth = "Container" 
            type = "javax.sql.DataSource" />

    B.在<Resource>元素中加入<ResourceParams>元素:<ResourceParams>元素用來指定各種參數值

    屬性    描述
    factory    指定生成的DataResource的factory類名
    maxActive    指定數據庫連接池中處于活動狀態的最大連接數目,0表示不受限制
    maxIdle    指定數據庫連接池中處于空閑狀態的最大連接數目,0表示不受限制
    maxWait    指定連接池中連接處于空閑狀態的最長時間,超過會拋出異常,-1表示無限
    username    指定連接數據庫的用戶名
    password    指定連接數據庫的口令
    driverClassName    指定連接數據庫的JDBC驅動程序
    url             指定連接數據庫的URL

       <ResourceParams name = "jdbc/BookDb">

        <parameter>
           <name>factory</name>
           <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>

        <parameter>
           <name>maxActive</name>
           <value>100</value>
        </parameter>

        <parameter>
           <name>maxIdle</name>
           <value>30</value>
        </parameter>

        <parameter>
           <name>maxWait</name>
           <value>10000</value>
        </parameter>

        <parameter>
           <name>username</name>
           <value>user</value>
        </parameter>

        <parameter>
           <name>password</name>
           <value>1234</value>
        </parameter>  

        <parameter>
           <name>driverClassName</name>
           <value>com.mysql.jdbc.Driver</value>
        </parameter>

        <parameter>
           <name>url</name>
           <value>jdbc:mysql//localhost:3306/BookDb?autoReconnect=true</value>
        </parameter>  

    </ResourceParams>

    C.在web.xml中加入<resource-ref>元素:<resource-ref>元素表示在Web應用中引用JNDI資源

    屬性                  描述
    description    對所引用的資源的說明
    res-ref-name    指定所引用資源的JNDI名字,與<Resource>元素中的name屬性對應
    res-type             指定所引用資源的類名字,與<Resource>元素中的type屬性對應
    res-auth             指定所引用資源的Manager,與<Resource>元素中的auth屬性對應

    *************************************************************************************


    六、在Web應用中使用數據源:
    *************************************************************************************
    javax.naming.Context提供了查找JNDI Resource的接口,可以通過三個步驟來使用數據源對象:

    A.獲得對數據源的引用:
    Context ctx = new InitalContext();
    DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/BookDb");

        B.獲得數據庫連接對象:
            Connection con = ds.getConnection();

        C.返回數據庫連接到連接池:
            con.close();



    在連接池中使用close()方法和在非連接池中使用close()方法的區別是:前者僅僅是把數據庫連接對象返回到數據庫連接池中,是連接對象又恢復到空閑狀態,而非關閉數據庫連接,而后者將直接關閉和數據庫的連接
    *************************************************************************************


    七、發布使用數據源的Web應用:
    *************************************************************************************
    如果直接同JDBC訪問數據庫,可以把JDBC驅動程序拷貝到Web應用的WEB-INF/lib目錄或者Tomcat安裝目錄下的common/lib目錄下。

    如果通過數據源訪問數據庫,由于數據源由Servlet容器創建并維護,所以必須把JDBC驅動程序拷貝到Tomcat安裝目錄下的common/lib目錄下,確保Servlet容器能夠訪問驅動程序。
    *************************************************************************************

    posted on 2009-10-12 16:53 liyang 閱讀(2012) 評論(0)  編輯  收藏 所屬分類: tomcat

    主站蜘蛛池模板: 国产一区二区三区在线免费观看 | 日本久久久免费高清| 亚洲韩国在线一卡二卡| 99热在线观看免费| 亚洲电影一区二区三区| 97公开免费视频| 久久精品国产亚洲AV久| 色窝窝免费一区二区三区| 中日韩亚洲人成无码网站| 老司机永久免费网站在线观看| 亚洲色大18成人网站WWW在线播放| 成人激情免费视频| 亚洲AV无码AV吞精久久| 亚洲第一成人影院| 好吊色永久免费视频大全| 亚洲妇熟XXXX妇色黄| 久久久久久精品成人免费图片| 亚洲中文无码线在线观看| 一本无码人妻在中文字幕免费| 亚洲国产精品自在自线观看| 亚洲片国产一区一级在线观看| 久久免费精品视频| 亚洲午夜成激人情在线影院 | 69式国产真人免费视频| 亚洲色欲色欲www在线播放| 免费久久精品国产片香蕉| 中文字幕免费在线播放| 91精品国产亚洲爽啪在线影院| 免费精品国产自产拍在线观看图片| 亚洲精华国产精华精华液好用 | 亚洲中文无码永久免| 免费一级毛片在线播放不收费| 久久性生大片免费观看性| 亚洲精品在线免费观看| 国产成人涩涩涩视频在线观看免费| 日韩精品无码免费视频| 亚洲综合精品一二三区在线| 夜夜爽免费888视频| 免费萌白酱国产一区二区三区| 麻豆狠色伊人亚洲综合网站| MM131亚洲国产美女久久|