連接池-Proxool

          Posted on 2006-06-28 09:51 多力宇揚 閱讀(606) 評論(0)  編輯  收藏 所屬分類: View tier
          ? Tomcat從5.x開始就可以在server.xml里配置數據源,后來用到了Proxool對比了一下覺得Proxool更方便更好用,它提供了更多的方法,簡單,推薦大家使用.
          ? 下載地址:http://proxool.sourceforge.net/ 最新版本為: Proxool 0.9.0RC2
          ? 下載后解壓縮Proxool 0.9.0RC2后,把Proxool 0.9.0RC2/lib下的.jar文件部署到WEB-INF/lib下.
          ? 看看下面的范例(example for Oracle):
          ? Proxool.jsp

          <%@ page import="java.sql.*"%>
          <%@ page contentType="text/html;charset=gb2312"%>

          <html>
          ?? ?<head>
          ?? ??? ?<title>Proxool.jsp</title>
          ?? ?</head>
          ?? ?<body>
          ?? ??? ?<h2>使用Proxool.jsp</h2>
          ?? ??? ?<%
          ?? ??? ??? Connection con=null;
          ?? ??? ??? Statement stmt=null;
          ?? ??? ??? ResultSet rs=null;
          ?? ??? ?? ?
          ?? ??? ??? String ename="";
          ?? ??? ?? ?
          ?? ??? ??? try
          ?? ??? ??? {
          ?? ??? ????? Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
          ?? ??? ????? con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:
          ?????????????????????? jdbc:oracle:thin:@yang:1521:orcl","scott","ss");?? ??? ???? ?
          ?? ??? ????? stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
          ?? ??? ?????????????????????????????? ResultSet.CONCUR_UPDATABLE);
          ?? ??? ????? String query="select * from emp";
          ?? ??? ????? rs=stmt.executeQuery(query);
          ?? ??? ????? while(rs.next())
          ?? ??? ????? {
          ?? ??? ??????? ename=rs.getString("ename");
          ????? %>
          ??????? 從emp表中取出姓名<%=ename%><br>
          ????? <%
          ?? ??? ????? }
          ?? ??? ????? stmt.close();
          ?? ??? ????? con.close();
          ?? ??? ??? }
          ?? ??? ??? catch(SQLException e)
          ?? ??? ??? {
          ?? ??? ????? out.println("發生異常"+e);
          ?? ??? ??? }
          ?? ??? ??? finally
          ?? ??? ??? {
          ?? ??? ????? try
          ?? ??? ????? {
          ?? ??? ??????? if(con!=null)
          ?? ??? ??????? {
          ?? ??? ????????? con.close();
          ?? ??? ??????? }
          ?? ??? ????? }
          ?? ??? ????? catch(SQLException ne)
          ?? ??? ????? {
          ?? ??? ??????? out.println("SQLException:"+ne);
          ?? ??? ????? }
          ?? ??? ??? }
          ?? ??? ?%>
          ?? ?</bdoy>
          </html>
          Proxool.jsp通過Proxool連接池取得Connection,然后顯示emp表格中的ename.
          首先動態加載Proxool的driver:
          ? Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);
          然后將Proxool URL分為三個部分: 連接池的別名,JDBC驅動程序(DataBase JDBC Drivers),連接URL.

          設定Proxool
          proxool提供了許多連接池的參數,例如:連接池最多有幾個Connection,最少有幾個Connection,Connection生命期限等等。
          Proxool主要有以下四種設定方式:
          (一) 通過java.util.Properties對象來設定,例如:
          Properties info=new Properties();
          info.setProperty("proxool.maximum-connection-count","20");
          info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");
          info.setProperty("user","your DB username");
          info.setProperty("password","your DB prassword");
          String alias="Develop"; //Proxool連接池的別名,根據自己喜好隨便寫^_^
          String driverClass="oracle.jdbc.driver.OracleDriver";
          String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";
          String url="proxool."+alias+":"+drvierClass+":"+driverUrl;
          connection=DrvierManager.getConnection(rul,info);

          (二) 通過XML文件來設定,例如:
          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.-->
          <proxool>
          ? <alias>Develop</alias>
          ? <driver-url>
          ??? jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
          ? </driver-url>
          ? <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
          ? <driver-properties>
          ??? <property name="user" value="your database name"/>
          ??? <property name="password" value="your DB password"/>
          ? </driver-properties>
          ? <maximum-connection-count>10</maximum-connection-count>
          ? <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
          </proxool>
          然后通過JAXPConfiguration讀取XML文件:
          JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);

          (三) 先通過Properties文件來設定,例如:
          jdbc-0.proxool.alias=Develop
          jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
          jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;
          jdbc-0.user=your database username
          jdbc-0.password=your database password
          jdbc-0.proxool.maximum-connection-count=10
          jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
          然后通過PropertyConfigurator讀取Properties文件:
          PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");

          (四)在web.xml中,通過servlet來設定.方法又有三種,前兩種是按照格式來的:
          1.XML文件
          <servlet>
          ? <servlet-name>ServletConfigurator</servlet-name>
          ? <servlet-class>
          ???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
          ? </servlet-class>
          ? <init-param>
          ???? <param-name>xmlFile</param-name>
          ???? <param-value>WEB-INF/classes/Proxool.xml</param-value>
          ? </init-param>
          ? <load-on-start>1</load-on-start>
          </servlet>

          2.Properties文件
          <servlet>
          ? <servlet-name>ServletConfigurator</servlet-name>
          ? <servlet-class>
          ???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
          ? </servlet-class>
          ? <init-param>
          ???? <param-name>propertyFile</param-name>
          ???? <param-value>WEB-INF/classes/Proxool.properties</param-value>
          ? </init-param>
          ? <load-on-start>1</load-on-start>
          </servlet>

          3.Init Prameter
          <servlet>
          ? <servlet-name>ServletConfigurator</servlet-name>
          ? <servlet-class>
          ???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
          ? </servlet-class>
          ? <init-param>
          ???? <init-name>jdbc-0.proxool.alias</init-param>
          ???? <init-value>Develop</init-value>
          ? </init-param>
          ? <init-param>
          ???? <init-name>jdbc-0.proxool.driver-rul</init-param>
          ???? <init-value>
          ??????? jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
          ???? </init-value>
          ? </init-param>
          ? <init-param>
          ???? <init-name>jdbc-0.proxool.driver-class</init-param>
          ???? <init-value>oracle.jdbc.driver.OracleDriver</init-value>
          ? <init-param>
          </servlet>

          建議大家使用第四種方法,好處在于當Container啟動時,Proxool的參數會自動設定加載到內存中,原因在于:
          <servlet>
          ......略
          <load-on-start>1</load-on-start>

          一個完整的示例如下:
          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/web-app_2_4.xsd"
          ???????? version="2.4">
          .......略
          ? <servlet>
          ???? <servlet-name>ServletConfigurator</servlet-name>
          ???? <servlet-class>
          ?????? org.logicalcobwebs.proxool.configuration.ServletConfigurator
          ???? </servlet-class>
          ???? <init-param>
          ?????? <param-name>propertyFile</param-name>
          ?????? <param-value>WEB-INF/classes/Proxool.properties</param-value>
          ???? </init-param>
          ???? <load-on-start>1</load-on-start>
          ? </servlet>
          .......略
          </web-app>

          Proxool.proterties
          jdbc-0.proxool.alias=Develop
          jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver
          jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
          jdbc-0.proxool.maximum-connection-count=10
          jdbc-0.proxool.prototype-count=4
          jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
          jdbc=0.proxool.verbose=true

          我們可以用下面的Test Page來進行測試
          Proxool-config.jsp
          ____________________________________________________
          <%@ page import="java.sql.*"%>
          <%@ page contentType="text/html;charset=gb2312"%>

          <html>
          ?? ?<head>
          ?? ??? ?<title>Proxool.jsp</title>
          ?? ?</head>
          ?? ?<body>
          ?? ??? ?<h2>使用Proxool.jsp</h2>
          ?? ??? ?<%
          ?? ??? ??? Connection con=null;
          ?? ??? ??? Statement stmt=null;
          ?? ??? ??? ResultSet rs=null;
          ?? ??? ?? ?
          ?? ??? ??? String ename="";
          ?? ??? ?? ?
          ?? ??? ??? try
          ?? ??? ??? {
          ?? ??? ????? con=DriverManager.getConnection("proxool.Develop");?? ??? ???? ?
          ?? ??? ????? stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
          ?? ??? ?????????????????????????????? ResultSet.CONCUR_UPDATABLE);
          ?? ??? ????? String query="select * from emp";
          ?? ??? ????? rs=stmt.executeQuery(query);
          ?? ??? ????? while(rs.next())
          ?? ??? ????? {
          ?? ??? ??????? ename=rs.getString("ename");
          ????? %>
          ??????? 從emp表中取出姓名<%=ename%><br>
          ????? <%
          ?? ??? ????? }
          ?? ??? ????? stmt.close();
          ?? ??? ????? con.close();
          ?? ??? ??? }
          ?? ??? ??? catch(SQLException e)
          ?? ??? ??? {
          ?? ??? ????? out.println("發生異常"+e);
          ?? ??? ??? }
          ?? ??? ??? finally
          ?? ??? ??? {
          ?? ??? ????? try
          ?? ??? ????? {
          ?? ??? ??????? if(con!=null)
          ?? ??? ??????? {
          ?? ??? ????????? con.close();
          ?? ??? ??????? }
          ?? ??? ????? }
          ?? ??? ????? catch(SQLException ne)
          ?? ??? ????? {
          ?? ??? ??????? out.println("SQLException:"+ne);
          ?? ??? ????? }
          ?? ??? ??? }
          ?? ??? ?%>
          ?? ?</bdoy>
          </html>
          測試結果為:
          =====================================
          使用Proxool.jsp
          從emp表中取出姓名SMITH
          從emp表中取出姓名ALLEN
          從emp表中取出姓名WARD
          從emp表中取出姓名JONES
          從emp表中取出姓名MARTIN
          從emp表中取出姓名BLAKE
          從emp表中取出姓名CLARK
          從emp表中取出姓名SCOTT
          從emp表中取出姓名KING
          從emp表中取出姓名TURNER
          從emp表中取出姓名ADAMS
          從emp表中取出姓名JAMES
          從emp表中取出姓名FORD
          從emp表中取出姓名MILLER
          從emp表中取出姓名feiyang
          從emp表中取出姓名yang
          從emp表中取出姓名feifei
          從emp表中取出姓名fei

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


          網站導航:
           
          主站蜘蛛池模板: 铁岭市| 突泉县| 杨浦区| 聂荣县| 竹北市| 九台市| 鄂伦春自治旗| 平陆县| 淮北市| 章丘市| 都昌县| 衡阳县| 新邵县| 炉霍县| 铅山县| 翁牛特旗| 临潭县| 广水市| 大同县| 玉林市| 阜城县| 孟津县| 乌什县| 河南省| 环江| 通化县| 治县。| 松潘县| 云南省| 鄂伦春自治旗| 北碚区| 惠安县| 永寿县| 文山县| 保定市| 类乌齐县| 吴旗县| 华坪县| 资阳市| 昌邑市| 清河县|