分享
 
 
 

连接池管理的代码

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

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有