/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.db;
import java.util.Properties;
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.impl.GenericObjectPool;
/**
* <code>DataSource</code> dbcp's implement.
*
* @author back
*
*/
public class DataSourceProviderDbcpImpl extends DataSource {
private javax.sql.DataSource ds = null;
private String name;
private Properties prop;
public String getName() {
return name;
}
public void setName( String name ) {
this.name=name;
}
public void setup( Properties prop ) {
this.prop=prop;
GenericObjectPool.Config conPoolCfg = new GenericObjectPool.Config();
conPoolCfg.maxActive = Integer.parseInt( prop.getProperty( "connectionPoolMaxSize", "15" ) );
conPoolCfg.maxIdle = Integer.parseInt( prop.getProperty( "connectionPoolMaxIdle", "8" ) );
conPoolCfg.maxWait = Integer.parseInt( prop.getProperty( "connectionPoolMaxWait", "60000" ) );
conPoolCfg.minIdle = Integer.parseInt( prop.getProperty( "connectionPoolMinSize", "2" ) );
ObjectPool connectionPool = new GenericObjectPool( null, conPoolCfg );
try {
Class.forName( prop.getProperty( "jdbcDriver" ) );
} catch( ClassNotFoundException e ) {
e.printStackTrace();
throw new RuntimeException();
}
ConnectionFactory connectionFactory = new
DriverManagerConnectionFactory( prop.getProperty( "jdbcUrl" ),
prop.getProperty( "jdbcUser" ),
prop.getProperty( "jdbcPassword" ) );
new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true);
PoolingDataSource dataSource = new PoolingDataSource(connectionPool);
ds = dataSource;
}
public javax.sql.DataSource getDataSource() {
return ds;
}
public String getValidInfo( Properties prop ) {
this.prop=prop;
if( prop.containsKey( "jdbcUrl" )
&& prop.containsKey( "jdbcUser" )
&& prop.containsKey( "jdbcPassword" )
&& prop.containsKey( "jdbcDriver" ) ) {
return null;
}
return "Required properties: jdbcUrl,jdbcUser,jdbcPassword,jdbcDriver";
}
public String toString() {
String line=System.getProperty( "line.separator" );
StringBuffer buff=new StringBuffer();
buff.append( "PoweredBy DBCP [ jdbcDriver:" ).append( prop.getProperty( "jdbcDriver" ) ).append( line );
buff.append( " \tjdbcUrl:" ).append( prop.getProperty( "jdbcUrl" ) ).append( line );
buff.append( " \tjdbcUser:" ).append( prop.getProperty( "jdbcUser" ) ).append( "]" );
return buff.toString();
}
}