/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.plugin.externalds.generate.service.dbcp;
import javax.sql.DataSource;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.ObjectPoolFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ewcms.plugin.BaseRuntimeExceptionWrapper;
/**
* @author 吴智俊
*/
public class DbcpDataSource implements DbcpDataSourceable {
private static final Logger logger = LoggerFactory.getLogger(DbcpDataSource.class);
private final ObjectPool connectionPool;
private final PoolingDataSource dataSource;
public DbcpDataSource(ObjectPoolFactory objectPoolFactory, String url, String username, String password) {
connectionPool = createPool(objectPoolFactory);
createPoolableConnectionFactory(url, username, password);
dataSource = new PoolingDataSource(connectionPool);
}
protected ObjectPool createPool(ObjectPoolFactory objectPoolFactory) {
ObjectPool objectPool = objectPoolFactory.createPool();
return objectPool;
}
protected void createPoolableConnectionFactory(String url, String username, String password) {
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, username, password);
new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, true, false);
}
@Override
public DataSource getDataSource() {
return dataSource;
}
@Override
public void release() {
try {
connectionPool.close();
} catch (Exception e) {
logger.error("关闭DBCP连接池时产生错误", e);
throw new BaseRuntimeExceptionWrapper(e);
}
}
}