org.ralasafe.db.DataSourceProviderDbcpImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.ralasafe.db.DataSourceProviderDbcpImpl.java

Source

/**
 * 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();
    }
}