小熊泡泡

          常用鏈接

          統計

          最新評論

          使用全局數據庫連接池資源(轉載)

          我們希望每個應用服務器只有一個連接池的實例,在這個應用服務器上運行的所有項目都可以使用這個連接池,下面介紹這種方式在Tomcat和Resin下的配置。

          Tomcat使用JNDI Resource來配置各種資源,包括數據庫連接池。這些Resource有兩種運行范圍,第一個就是Context級別,也就是說Context特有的 Resource,該Resource只能被其所屬的Context訪問,顯然這不是我們所要的。
          另外一種就是定義全局命名資源,然后在Context中進行引用,下面是一個配置的例子(server.xml):

          <Server port="8005" shutdown="SHUTDOWN">
          ? <GlobalNamingResources>
          ? ?<!-- 全局有效的JDBC資源 -->
          ?<Resource name="jdbc/dlog" auth="Container" type="javax.sql.DataSource"
          ?????????????? maxActive="100" maxIdle="30" maxWait="10000" defaultTransactionIsolation="1" defaultAutoCommit="false"
          ?????????????? poolPreparedStatements="true" maxOpenPreparedStatements="1000" initialSize="1"
          ?????????????? username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
          ?????????????? url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
          ? </GlobalNamingResources>

          ? <!-- Define the Tomcat Stand-Alone Service -->
          ? <Service name="Catalina">

          ??? <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
          ??? <Connector port="8080" maxHttpHeaderSize="8192"
          ?????????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          ?????????????? enableLookups="false" redirectPort="8443" acceptCount="100"
          ?????????????? connectionTimeout="20000" disableUploadTimeout="true" />
          ???
          ??? <!-- Define the top level container in our container hierarchy -->
          ??? <Engine name="Catalina" defaultHost="localhost">

          ????? <Host name="localhost" appBase="webapps">
          ?<Context path="" docBase="C:\PROJECTS\JAVA\DLOG4J_V3\webapp" reloadable="true">
          ?? <!-- 在Context引用全局JDBC資源 -->
          ?? <ResourceLink name="jdbc/dlog" global="jdbc/dlog"/>
          ?</Context>
          ????? </Host>
          ?????
          ??? </Engine>

          ? </Service>

          </Server>

          相比較Tomcat來說,Resin更為簡單,在Resin2中連接池的配置如下

          <caucho.com>

          <http-server>

          ? <http port='80'/>
          ?
          ? <servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
          ? <servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>

          ? <resource-ref res-ref-name="java:/comp/env/jdbc/dlog" res-type="javax.sql.DataSource">
          ??? <init-param driver-name="com.mysql.jdbc.Driver"/>
          ??? <init-param url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
          ??? <init-param user="root"/>
          ??? <init-param password="moabc"/>
          ??? <init-param maxConnections="100"/>
          ? </resource-ref>

          ? <!-- default host if no other host matches -->
          ? <host id=''>
          ?
          ??? <web-app id='' app-dir='C:\PROJECTS\JAVA\DLOG4J_V3\webapp' />
          ?????
          ? </host>

          </http-server>
          </caucho.com>


          你可以把這段配置放在web-app中,則該連接池只有對應的webapp才能訪問,放在<host>則,host中的所有web-app都可以訪問,放在<http-server>中,則整個resin的所有webapp都可以訪問。
          (實驗過程中發現resin2的文檔有誤,如果res-ref-name寫為jdbc/dlog,則webapp怎么都找不到這個資源,改成java:/comp/env/jdbc/dlog即可。)

          接下來我們就可以在應用中使用如下代碼來獲取連接池的DataSource實例

          Context initContext = new InitialContext();
          Context envContext? = (Context)initContext.lookup("java:/comp/env");
          DataSource ds = (DataSource)envContext.lookup("jdbc/dlog");

          其他的應用服務器的配置可以按照這個思路參考它的手冊進行配置。應該說不管是采用何種方式,性能上不會有太大的區別,如何選擇就在于你整個服務器的項目結構。

          另外從上面Tomcat和Resin的配置來看,盡管Resin的配置要簡單于Tomcat,但是靈活性和擴展性就相對要差一些。

          posted on 2006-07-10 10:33 小熊泡泡 閱讀(503) 評論(1)  編輯  收藏 所屬分類: 數據庫

          評論

          # re: 使用全局數據庫連接池資源(轉載) 2013-05-06 12:41 薩提亞

          謝謝  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巴东县| 湖南省| 伊金霍洛旗| 海南省| 彭州市| 准格尔旗| 皋兰县| 甘南县| 云龙县| 阿克陶县| 阜南县| 萨嘎县| 和林格尔县| 边坝县| 泌阳县| 攀枝花市| 邢台市| 北川| 宾川县| 昭觉县| 监利县| 汕头市| 玉山县| 余江县| 连平县| 嵊州市| 乌兰浩特市| 开平市| 乐平市| 双江| 修文县| 霸州市| 忻城县| 讷河市| 沅陵县| 黄龙县| 班玛县| 阜阳市| 南乐县| 江津市| 武鸣县|