codefans

          導航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          程序設計鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          一個簡單的pool代碼

          the detail pool management code

          DBConnectionManager.java

          package com.coa.cim.database;

          /**
          * <p>Title: CIM SYSTEM</p>
          * <p>Description: The Customer Infomation Managment System</p>
          * <p>Copyright: Copyright (c) 2002</p>
          * <p>Company: COA Sci&Tech</p>
          * @author Mula Liu
          * @version 1.0
          */

          import java.sql.*;
          import java.util.*;
          import java.io.*;

          public class DBConnectionManager {


          private static DBConnectionManager instance=null;
          private DBConnectionPool pool;
          private static int client;
          private Properties dbProps;
          private Vector drivers;

          public DBConnectionManager() {
          init();
          }

          public synchronized static DBConnectionManager getInstance(){
          if(instance==null){
          instance=new DBConnectionManager();
          }
          client++;
          return(instance);
          } //create an instance of connection manager. if exits ,just returen the instance

          void init(){
          drivers=new Vector();
          InputStream is=this.getClass().getResourceAsStream("../resource/Res.properties");
          try{
          dbProps=new Properties();
          dbProps.load(is);
          }catch(Exception ex){
          System.out.println("Miss Resource File "+ex.getMessage());
          }
          loadDriver();
          createPool();
          } //using Properties.load() method to locate outter properties file

          public void loadDriver(){
          String driverClasses=dbProps.getProperty("dbDriver");
          StringTokenizer st =new StringTokenizer(driverClasses);
          while(st.hasMoreElements()){
          String driverClassName=st.nextToken().trim();
          try{
          Driver driver=(Driver)Class.forName(driverClassName).newInstance();
          DriverManager.registerDriver(driver);
          drivers.addElement(driver);
          }catch(Exception ex){
          ex.printStackTrace();
          }
          }
          } //parse the file, load mutil driver class in

          public void createPool(){
          String userName=dbProps.getProperty("dbUserName");
          String password=dbProps.getProperty("dbPassword");
          String url=dbProps.getProperty("connectionURL");
          int maxConn;
          try{
          maxConn=Integer.valueOf(dbProps.getProperty("maxConnection","0")).intValue();
          }catch(NumberFormatException ex){
          maxConn=0;
          }
          pool=new DBConnectionPool(userName,password,url,maxConn);
          } //parse the file, load username,password,url and maxconnection in

          public synchronized int getClientCount(){
          return(client);
          }

          public Connection getDBConnection(){
          if(pool != null){
          return(pool.getDBConnection());
          }
          return(null);
          }//act as facade

          public Connection getDBConnection(long timeout){
          if(pool != null){
          return(pool.getDBConnection(timeout));
          }
          return(null);
          }//act as facade

          public void freeDBConnection(Connection conn){
          if(pool != null){
          pool.freeDBConnection(conn);
          }
          }//act as facade

          public void realse(){
          if(this.client != 0){
          return;
          }
          if(pool != null){
          pool.release();
          Enumeration enum=drivers.elements();
          while(enum.hasMoreElements()){
          Driver driver=(Driver)enum.nextElement();
          try{
          DriverManager.deregisterDriver(driver);
          }catch(Exception ex){
          System.out.println("Can not deregister driver "+driver.getClass().getName());
          }
          }
          }
          }//act as facade then de register driver

          }


          ________________________________________

          DBConnectionPool.java

          package com.coa.cim.database;

          /**
          * <p>Title: CIM SYSTEM</p>
          * <p>Description: The Customer Infomation Managment System</p>
          * <p>Copyright: Copyright (c) 2002</p>
          * <p>Company: COA Sci&Tech</p>
          * @author Mula Liu
          * @version 1.0
          */

          import java.sql.*;
          import java.util.*;

          public class DBConnectionPool {

          private String dbUserName;
          private String dbPassword;
          private String connectionURL;
          private int maxConnection;
          private Vector freeConnections;
          private int checkedOut;

          public DBConnectionPool(String userName,String password,String url,int maxConn) {
          this.dbUserName=userName;
          this.dbPassword=password;
          this.connectionURL=url;
          this.maxConnection=maxConn;
          freeConnections=new Vector();
          }// initalize

          public synchronized Connection getDBConnection(){
          Connection conn=null;
          if(freeConnections.size() > 0){
          conn=(Connection)freeConnections.elementAt(0);
          freeConnections.removeElementAt(0);
          try{
          if(conn.isClosed()){
          conn=getDBConnection();
          }
          }catch(SQLException ex){
          conn=getDBConnection();
          }
          }else if(maxConnection==0 || checkedOut < maxConnection){
          conn=newDBConnection();
          }
          if(conn!=null){
          checkedOut++;
          }
          return(conn);
          }// using FIFO method to get connection instance

          public synchronized Connection getDBConnection(long timeout){
          long startTime=new java.util.Date().getTime();
          Connection conn;
          while((conn=getDBConnection())==null){
          try{
          wait(timeout);
          }catch(InterruptedException ex){}
          if(new java.util.Date().getTime()-startTime >= timeout){
          return(null);
          }
          }
          return conn;
          }

          public Connection newDBConnection(){
          Connection conn=null;
          try{
          if(dbUserName==null){
          conn=DriverManager.getConnection(connectionURL);
          }else{
          conn=DriverManager.getConnection(connectionURL,dbUserName,dbPassword);
          }
          }catch(SQLException ex){
          ex.printStackTrace();
          }
          return(conn);
          }

          public synchronized void freeDBConnection(Connection conn){
          freeConnections.addElement(conn);
          checkedOut--;
          notifyAll();
          }

          public synchronized void release(){
          Enumeration allConnections=freeConnections.elements();
          while(allConnections.hasMoreElements()){
          try{
          Connection conn=(Connection)allConnections.nextElement();
          conn.close();
          }catch(SQLException ex){
          ex.printStackTrace();
          }
          }
          freeConnections.removeAllElements();
          }

          }

          posted on 2005-11-22 11:23 春雷的博客 閱讀(121) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 长子县| 富民县| 柘城县| 建宁县| 蓬溪县| 泰和县| 新宾| 凤冈县| 沁源县| 宜兰县| 凌源市| 米易县| 永寿县| 鄂托克前旗| 黄石市| 吐鲁番市| 大宁县| 昔阳县| 密山市| 乌兰察布市| 吉隆县| 郴州市| 北票市| 黄龙县| 黄冈市| 松溪县| 厦门市| 满洲里市| 屏东县| 武宁县| 晋江市| 大邑县| 邳州市| 资兴市| 丹凤县| 德令哈市| 枝江市| 江达县| 桃园县| 沽源县| 东海县|