指引网

当前位置: 主页 > 编程开发 > Java >

连接池管理的代码

来源:网络 作者:佚名 点击: 时间:2017-11-14 06:17
[摘要] the detail pool management code DBConnectionManager.java package com.coa.cim.database; /** * Title: CIM SYSTEM * Description: The Customer Infomation Managment System * Copyright: Copyright (c) 2002 * Company: COA Sci import java.util.*; import java

  the detail pool management code
  DBConnectionManager.java
  
  package com.coa.cim.database;
  
  /**
  *

Title: CIM SYSTEM


  *

Description: The Customer Infomation Managment System


  *

Copyright: Copyright (c) 2002


  *

Company: COA Sci&Tech


  * @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;
  
  /**
  *

Title: CIM SYSTEM


  *

Description: The Customer Infomation Managment System


  *

Copyright: Copyright (c) 2002


  *

Company: COA Sci&Tech


  * @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();
  }
  
  }
  
  
------分隔线----------------------------