连接池管理的代码

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航