分享
 
 
 

使用Commons-Pool写的数据库连接池

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1.数据库链接的接口类:DatabaseConnection package net.pingsoft.kelefa.pool;

import java.sql.*;

import javax.sql.*;

import com.wish.JDBC.WConnection;

import org.apache.commons.pool.*;

import org.apache.commons.pool.impl.*;

/**

* 数据库链接的接口类.直接调用静态方法getDBConnection()取得Connection对象.

* 相关的参数由PoolConfigServlet类根据web.xml设置,所以web.xml需要注册PoolConfigServlet

*

* Copyright: Copyright (c) 2004

* @author kelefa yang

* @version 1.0

* @see PoolConfigServlet

*/

public class DatabaseConnection

{

/** 数据库的用户名 */

public static String USER = "sa";

/** 数据库的用密码 */

public static String PASS = "yf1";

/** 数据库的启动程序类名 */

public static String DBDRIVER =

"com.microsoft.jdbc.sqlserver.SQLServerDriver";

/** 数据库的链接地址 */

public static String DBURL =

"jdbc:microsoft:sqlserver://192.9.200.23:1433;DatabaseName=FC";

/** 是否使用jndi */

public static boolean useJNDI = false;

/** jndi的名字,useJNDI==false时无效 */

public static String JNDI = "wishJndi";

/**

* 是否对数据库链接进行编码转换

* @deprecated 没有进行测试,应该直接设置数据库或在链接url加上编码参数

*/

public static boolean convertConnetion = false;

/** 是否缓冲链接 */

public static boolean POOL_CONNECTION = false;

/**

* 没有必要生成实例

*/

private DatabaseConnection()

{}

/**

* 根据相应参数取回实际的数据库链接.

* 如果useJNDI为真,根据JNDI名字从数据源取链接;否则直接从jdbc取链接.

* 如果convertConnetion为真,对链接再封装,实现编码的转换.

* @throws Exception 当useJNDI==false,并且USER,PASS,DBDRIVER,DBURL其中一个为空时

* 抛出"DatabaseConnection didn't init!!"异常

* @return Connection 数据库链接,取不到时返回null

*/

static Connection getConnection() throws Exception

{

Connection conn = null;

if( !useJNDI )

{

if( ( USER == null ) || ( PASS == null ) || ( DBDRIVER == null ) ||

( DBURL == null ) )

throw new Exception( "DatabaseConnection didn't init!!" );

Class.forName( DBDRIVER );

conn = DriverManager.getConnection( DBURL, USER, PASS );

}

else

{

DataSource ds = ServiceLocator.getInstance().getDataSource( JNDI );

conn = ds.getConnection();

}

if( convertConnetion && conn != null )

return new WConnection( conn );

else

return conn;

}

/** 链接池工厂 */

private static GenericObjectPoolFactory poolFactory =

new GenericObjectPoolFactory( new ConnectionFactory() );

/** 数据库链接池 */

private static ObjectPool pool = poolFactory.createPool();

/**

* if POOL_CONNECTION is true, return the pooled connetion.

* POOL_CONNECTION will be set in Class PoolConfigServlet when webapp start,

* you can change the value in web.xml.

* * <init-param>

* <param-name>poolConnection</param-name>

* <param-value>true</param-value>

* </init-param>

*

* @throws Exception

* @return Connection

*/

public static Connection getDBConnection() throws Exception

{

if( POOL_CONNECTION )

{

Object obj = pool.borrowObject();

if( null == obj )

return null;

PoolableConnection conn = ( PoolableConnection )obj;

conn.setPool( pool );

return conn;

}

else

return getConnection();

}

}

2. 数据库链接工厂类ConnectionFactory package net.pingsoft.kelefa.pool;

import org.apache.commons.pool.*;

import java.sql.Connection;

/**

* 数据库链接对象工厂,负责创建数据库链接对象,并把它封装成可缓冲的对象以及关闭数据库链接。

* 这个工厂实例作为org.apache.commons.pool.impl.GenericObjectPoolFactory的构造函数的

* 参数。

*

* Copyright: Copyright (c) 2004

* @author kelefa yang

* @version 1.0

* @see org.apache.commons.pool.impl.GenericObjectPoolFactory

*/

public class ConnectionFactory extends BasePoolableObjectFactory

{

public ConnectionFactory()

{

}

/**

* Creates a Connection instance that can be returned by the pool.

*

* @return an instance that can be returned by the pool.

* @throws Exception

* @todo Implement this org.apache.commons.pool.PoolableObjectFactory method

*/

public Object makeObject() throws Exception

{

Connection conn = DatabaseConnection.getConnection();

if (conn==null)

return null;

return new PoolableConnection(conn);

}

/**

* close a Connection instance no longer needed by the pool.

*

* @param obj the instance to be destroyed

* @throws Exception

* @todo Implement this org.apache.commons.pool.PoolableObjectFactory method

*/

public void destroyObject( Object obj ) throws Exception

{

PoolableConnection conn = (PoolableConnection)obj;

conn.setPool( null );

conn.close();

}

}

3. 重载Connection.close()方法,使得可以返回数据库链接池 package net.pingsoft.kelefa.pool;

import java.sql.Connection;

import java.sql.SQLException;

import org.apache.commons.pool.*;

/**

* 重载Connection.close()方法,使得可以返回数据库链接池.

*

* Copyright: Copyright (c) 2004

* @author kelefa yang

* @version 1.0

*/

public class PoolableConnection extends ConnectionWrap

{

/** 数据库链接池 */

private ObjectPool pool;

public PoolableConnection(Connection conn)

{

super(conn);

}

/**

* 如果数据库链接池存在,则将这个链接返回数据库链接池;否则关闭这个数据库链接

* @throws SQLException

*/

public void close() throws SQLException

{

try

{

if (pool != null)

pool.returnObject( this );

else

super.close();

}

catch( Exception ex )

{

}

}

/**

* 设置这个链接所在的链接池.

* 如果pool等于null,链接用完直接关闭,否则用完后返回链接池中.

* @param pool 数据库链接池

*/

public void setPool(ObjectPool pool)

{

this.pool = pool;

}

}

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