亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? connectionpool.java

?? 采用JAVA開發
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package com.ywh.dbcp;

/**
 * <p>Title: greatom toolkit</p>
 * <p>Description: db util</p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: 北京長通聯合寬帶網絡技術有限公司</p>
 * @author zhengzp
 * @version 1.0
 */

/**
 * add a comment test the notify function.
 * **/

import java.io.*;
import java.sql.*;
import java.util.*;
import org.apache.log4j.*;


/**
*  封裝數據庫連接,實現連接池。<br>
*ConnectionPool在內部維護激活連接和未激活連接兩個鏈表,客戶申請一個連接時,從未激活連接中找到一個連接,
*返回給客戶,并把這個連接加入到激活連接中。用戶關閉連接時,做相反的操作。
*同時,ConnectionPool使用一個后臺進程定時掃描激活連接,看是否激活的時間過長了。如果是,說明程序中沒有釋放,
*ConnectionPool做一個記錄,并關閉此連接。
*后臺進程還要掃描未激活連接,執行一個簡單的sql查詢,如在oracle中可以執行"select * from dual;",以確保連接不會因為超時
*而斷開,一旦連接斷開,后臺進程會重新建立連接。
* @author zhengzp
* @version 1.0
*@see java.sql.Connection
*/
public class ConnectionPool implements Serializable, IConnectionPool{
  private class ScanTask extends Thread{
    /**連接池的自動維護線程,這個線程要做兩個操作:<br>
     *1、掃描激活的連接,如果連接時間過長,則認為程序沒有釋放,記錄下錯誤,并釋放連接。<br>
     *2、掃描未激活的連接,如果空閑時間過長,則做一次測試,即做一次簡單查詢,以保證連接可用。
     *   如果連接不可用,則重新生成連接。
     * */
    public void run(){
      while (!_runner.isInterrupted()) {
        synchronized (this) {
          ////log the autoscan
          cat.debug("ConnectionPool AutoScan start");
          //log.debug("ConnectionPool AutoScan start");
          long now = System.currentTimeMillis();
          ConnectionWrap cw;
          ListIterator iterator = _activeConnList.listIterator();
          while (iterator.hasNext()) {
            cw = (ConnectionWrap) iterator.next();
            if (now - cw.getDate().getTime() > overdurPeriod) {
              ////log the error
              cat.warn("ConnectionPool auto scan found a overdue active connection, the connection owner Class is " +
                       cw.getOwnerClassName());
              cat.warn("");
              //如果一個活動的連接超時,就把他從活動鏈表中刪除,并關閉這個連接
              iterator.remove();
              --_activeConnCount;
              try {
                --_poolSize;
                cw.conn.close();
              }
              catch (SQLException e) { /*do nothing*/}
            } //if
          } //while

          iterator = _inactiveConnList.listIterator();
          while (iterator.hasNext()) {
            cw = (ConnectionWrap) iterator.next();
            if (now - cw.getDate().getTime() > testPeriod) {
              try {
                cat.debug("ConnectionPool autoscan test a connection..");
                //log.debug("ConnectionPool autoscan test a connection..");
                Statement stat = cw.createStatement();
                stat.execute(testCommand);
                stat.close();
                cw.setDate();
                cat.debug("ConnectionPool autoscan test a connection OK..");
                //log.debug("ConnectionPool autoscan test a connection OK..");
              }
              catch (SQLException e) {
                ////log the error
                cat.error(
                    "ConnectionPool auto scan test Inactive connection Error:",
                    e);
                //log.error("ConnectionPool auto scan test Inactive connection Error:",e);
                try {
                  --_poolSize;
                  iterator.remove();
                  cw.conn.close();
                }
                catch (SQLException e1) { /*do nothing*/}
                try {
                  iterator.add(createConnection());
                  ++_poolSize;
                }
                catch (SQLException e1) { /*do nothing*/}
              } //try
            } //if
          } //while
          //如果pool中的數量少于初始化的數量。在free中增加。
          while (_poolSize < initPoolSize) {
            try {
              _inactiveConnList.addLast(createConnection());
              ++_poolSize;
            }
            catch (SQLException e1) { /*do nothing*/}
          }
          //如果pool中的數量太多,應該關閉一些。
          while ( (_poolSize - _activeConnCount) > initPoolSize) {
            try {
              cw = (ConnectionWrap) _inactiveConnList.removeLast();
              cw.conn.close();
              --_poolSize;
            }
            catch (SQLException e1) {
              cat.error("close inactive connection error", e1);
            }
          }
        } //synchronized
        ////log the autoscan
        cat.debug("ConnectionPool AutoScan end");
        //log.debug("ConnectionPool AutoScan end");
        try {
          _runner.sleep(scanPeriod); //等待掃描時間,或被close方法觸發
        }
        catch (InterruptedException e) {
          break;
        }
      } //while
    }
  }
//  public ini
  private static Logger cat = Logger.getLogger(ConnectionPool.class);
  private ScanTask _runner;  //后臺的自動維護線程
  private LinkedList _activeConnList; //活動連接鏈表
  private LinkedList _inactiveConnList; //空閑連接鏈表
  private int _poolSize; //連接池大小
  private int _activeConnCount; //活動連續數
  private DBInfo dbInfo;
  /* the period the scaner run once,default is 10 minute*/
  private long scanPeriod=1000*60*10L;//1000*60*30l;
  /* the period we think the active connection is overdue, default is 5 minute */
  private long overdurPeriod=1000*60*5L;//1000*60*60l;
  /* the period the scaner should do a test to check inactive connection*/
  private long testPeriod = scanPeriod;
  /* the SQL command the test should excute */
  private String testCommand="select * from t_cms_tree";
  private int maxPoolSize;  //連接池的最大容量
  private int initPoolSize; //連接池的初始大小

  /**一個靜態的連接池。
   * */
 // private static ConnectionPool pool;

  /**初始化缺省連接池。
   * @param config 連接池的配置,必需是xml格式
   * @return 如果成功,將靜態連接池初始化,返回true,否則返回false
   * *//*

  public static boolean initial(Element config)
  {
    boolean result = false;
    DBInfo dbInfo = new DBInfo(config.getChild("database"));
    ConnectionPoolInfo poolInfo = new ConnectionPoolInfo(config);
    try
    {
      pool = new ConnectionPool(dbInfo, poolInfo);
      result = true;
    }catch(Exception e)
    {
      e.printStackTrace();
    }
    return result;
  }*/
  /**初始化缺省連接池。
   * @param fileName 一個xml格式的文件。
   * @see #initial(Element config)
   * @return 如果成功,將靜態連接池初始化,返回true,否則返回false。
   * *//*
  public static boolean initial(String fileName)
  {
    boolean result = false;
    if ( pool != null )
    {
      pool.close();
    }
    try{
      InputStream in = new BufferedInputStream(new FileInputStream(fileName));
      SAXBuilder builder = new SAXBuilder();
      Document configDoc = builder.build(in);
      Element rootConfig = configDoc.getRootElement();
      result = initial(rootConfig);
    }catch(Exception t){
      t.printStackTrace();
    }
    return result;
  }*/

  /**得到一個靜態連接池,全局實例
   * 可以在不同類之間共享連接池。
   * @return 得到一個靜態連接池。
   *

  public static ConnectionPool getPool()
  {
    return pool;
  }*/

  public ConnectionPool(){}


  /**根據給定的連接池參數,創建一個新的連接。
   * @return 根據給定的連接池參數,創建一個新的連接*/
  private ConnectionWrap createConnection() throws SQLException{
    ConnectionWrap cw;
    try {
      cw=new ConnectionWrap(this, dbInfo.getConnection());
      cw.setDate();
    }
    catch (SQLException e){
      //log the error
      //log.error(e);
      cat.error("create connection error", e);
      throw e;
    }
    return (cw);
  }

  /**得到連接池的初始容量。
   * @return 得到連接池的初始容量。
   * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频在线观看91| 国产米奇在线777精品观看| 偷拍亚洲欧洲综合| 国产精品资源站在线| 欧美精品日韩一区| 亚洲视频图片小说| 国内成人自拍视频| 欧美视频一区在线| 国产精品午夜久久| 国产一区二区免费视频| 欧美一区二区三区四区久久| 亚洲男人的天堂在线aⅴ视频| 国产一区日韩二区欧美三区| 在线电影院国产精品| 亚洲激情在线激情| 播五月开心婷婷综合| 2023国产一二三区日本精品2022| 亚洲成人av一区| 色综合天天综合网国产成人综合天| 久久综合久久综合久久| 美国毛片一区二区| 欧美一区二区黄色| 日韩成人一级片| 欧美色图激情小说| 亚洲视频免费在线观看| 99久久精品免费| 欧美国产国产综合| 成人听书哪个软件好| 久久久久综合网| 国产最新精品精品你懂的| 日韩视频一区在线观看| 日本成人中文字幕在线视频| 精品视频1区2区3区| 图片区小说区区亚洲影院| 欧美日韩高清影院| 婷婷久久综合九色国产成人| 欧美久久久一区| 热久久免费视频| 欧美va日韩va| 国产原创一区二区三区| 国产日韩欧美电影| 91在线小视频| 亚洲成人av一区| 日韩欧美aaaaaa| 国产精品一二一区| 国产精品欧美一级免费| 色婷婷国产精品久久包臀 | 在线播放中文一区| 日本视频一区二区| 精品日韩99亚洲| 国产91精品久久久久久久网曝门| 一区在线播放视频| 欧美亚洲免费在线一区| 麻豆高清免费国产一区| 久久久国产一区二区三区四区小说| 成人久久18免费网站麻豆 | 久久精品国产成人一区二区三区| 欧美tk—视频vk| av资源站一区| 日韩和欧美的一区| 国产午夜精品美女毛片视频| 91亚洲精品乱码久久久久久蜜桃| 午夜影院在线观看欧美| 久久影院视频免费| 91激情五月电影| 久久99精品久久久久婷婷| 国产精品高潮久久久久无| 欧美日韩一区中文字幕| 国产精品一级二级三级| 亚洲国产中文字幕在线视频综合 | 美女国产一区二区三区| 国产精品久久久久aaaa| 欧美日韩免费一区二区三区 | 免费一级片91| 自拍偷拍国产精品| 日韩一区二区精品在线观看| 99免费精品视频| 美女精品一区二区| 亚洲精品中文字幕乱码三区| 精品国产欧美一区二区| 在线观看国产日韩| 高清不卡一二三区| 美女爽到高潮91| 亚洲电影中文字幕在线观看| 欧美经典一区二区| 日韩欧美国产综合在线一区二区三区 | 一区二区在线免费| 亚洲国产电影在线观看| 日韩视频免费观看高清在线视频| 丁香啪啪综合成人亚洲小说 | 精品蜜桃在线看| 欧美日韩卡一卡二| 91色在线porny| 国产精品亚洲а∨天堂免在线| 人人狠狠综合久久亚洲| 亚洲一区二区三区影院| 1024精品合集| 国产女人18水真多18精品一级做| 91精品国产91久久久久久最新毛片| 91香蕉视频mp4| 丁香另类激情小说| 国产精品一区二区男女羞羞无遮挡| 日本在线播放一区二区三区| 一区二区三区在线视频播放| 中文字幕中文字幕一区| 国产肉丝袜一区二区| 久久伊人蜜桃av一区二区| 欧美一区二区精品在线| 777午夜精品免费视频| 欧美理论在线播放| 欧美另类高清zo欧美| 欧美日韩视频在线观看一区二区三区| 91国产丝袜在线播放| 欧美视频精品在线| 欧美亚洲高清一区二区三区不卡| 91极品视觉盛宴| 欧美视频一二三区| 555夜色666亚洲国产免| 日韩精品中文字幕在线不卡尤物| 欧美tickling网站挠脚心| 精品国产3级a| 国产亚洲精品aa| 中文字幕av一区二区三区高 | 国产人久久人人人人爽| 国产日本欧美一区二区| 成人免费一区二区三区视频 | 17c精品麻豆一区二区免费| 亚洲另类在线一区| 亚洲动漫第一页| 免费三级欧美电影| 国产激情一区二区三区四区| 国产aⅴ综合色| 色悠悠久久综合| 欧美巨大另类极品videosbest| 欧美一区二区三区免费在线看| 欧美大胆一级视频| 国产亚洲女人久久久久毛片| 亚洲精品欧美二区三区中文字幕| 亚洲国产日韩a在线播放| 天堂资源在线中文精品| 精品一区二区在线免费观看| 国产精品一区二区不卡| 在线视频欧美区| 欧美成人a∨高清免费观看| 国产女同性恋一区二区| 亚洲一区二区视频| 韩国成人在线视频| 色婷婷一区二区| 欧美一区二区三区公司| 中文天堂在线一区| 亚洲综合清纯丝袜自拍| 激情综合色综合久久| 3d动漫精品啪啪1区2区免费 | 欧美色大人视频| 精品成人一区二区| 一区二区三区视频在线观看| 美女视频黄久久| 在线亚洲一区观看| 久久久国产精品麻豆 | 亚洲精品久久久久久国产精华液| 亚洲国产wwwccc36天堂| 国产精品18久久久久久久久| 在线免费观看成人短视频| 久久先锋影音av鲁色资源网| 一区二区三区蜜桃| 国产91精品露脸国语对白| 欧美一级黄色片| 亚洲卡通欧美制服中文| 成人一区二区三区| 日韩欧美国产成人一区二区| 亚洲午夜影视影院在线观看| 国产精品91一区二区| 日韩免费看的电影| 亚洲成人免费在线观看| eeuss鲁片一区二区三区| 欧美大片顶级少妇| 日本中文在线一区| 欧美日韩在线观看一区二区| 亚洲色图一区二区三区| 国产精品一区二区在线看| 日韩欧美一区二区不卡| 天堂久久一区二区三区| 欧美性xxxxxxxx| 悠悠色在线精品| www.av精品| 国产精品久久久久久福利一牛影视 | 色综合天天性综合| 中文字幕不卡三区| 国产乱码精品一区二区三区忘忧草 | 免费成人性网站| 欧美系列在线观看| 亚洲日本乱码在线观看| 国产91精品一区二区麻豆亚洲| 久久伊99综合婷婷久久伊| 国产一区二区三区在线观看免费 | 99视频国产精品| 国产精品国产三级国产普通话99| 国产精品影视天天线| 久久久久久久网| 国产成人免费视频|