Example usage for org.apache.commons.dbcp2 BasicDataSource getConnection

List of usage examples for org.apache.commons.dbcp2 BasicDataSource getConnection

Introduction

In this page you can find the example usage for org.apache.commons.dbcp2 BasicDataSource getConnection.

Prototype

@Override
public Connection getConnection() throws SQLException 

Source Link

Document

Create (if necessary) and return a connection to the database.

Usage

From source file:uk.co.platosys.db.jdbc.ConnectionBroker.java

private void init() {

    List<DatabaseCredentials> databases = properties.getDatabases();
    for (DatabaseCredentials credentials : databases) {

        String name = "";
        String driver = "";
        String userName = "";
        String password = "";
        String url = "";
        try {//from   w  w w  . ja  va2s . c  o  m
            name = credentials.getName();
            logger.log("ConnectionBroker initialising database " + name);
            driver = credentials.getDriver();
            url = credentials.getUrl();
            userName = credentials.getUsername();
            password = credentials.getPassword();
            logger.log("ConnectionBroker credentials for " + name + " are " + driver + " " + url + " "
                    + userName + " " + password);

        } catch (Exception e) {
            logger.log("ConnectionBroker had a problem getting credentials for " + name, e);
        }
        /* try{
            //although we only use postgresql, there's no reason we couldn't use a different sql rdbms with a different driver for each
            //database.
        Class.forName(driver);
         }catch(ClassNotFoundException e){
        logger.log("ConnectionBroker couldn't load database driver", e);
         }*/
        try {
            /*connFac = new DriverManagerConnectionFactory(url, userName, password);
            PoolableConnectionFactory poolableConFac = new PoolableConnectionFactory(connFac, null);
            GenericObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<PoolableConnection>(poolableConFac);
            pools.put(name, connectionPool);
            poolableConFac.setPool(connectionPool);
            PoolingDataSource<PoolableConnection> dataSource = new PoolingDataSource<PoolableConnection>(connectionPool);*/
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUsername(userName);
            dataSource.setPassword(password);
            dataSource.setUrl(url);
            dataSource.setMinIdle(2);
            dataSource.setMaxTotal(MAX_ACTIVE);
            logger.log(5, "ConnectionBroker has made BasicDataSource " + dataSource.toString());
            logger.log("Datasource " + name + " has " + dataSource.getMaxTotal() + " maxConnections");
            try {
                Connection connection = dataSource.getConnection();
                connection.close();
                dataSources.put(name, dataSource);
                dataSet.add(dataSource);
                logger.log(5, "ConnectionBroker has initialised database " + name);
            } catch (PSQLException psqe) {
                logger.log("could not make a test connection to database: " + name, psqe);
            }
        } catch (Exception e) {
            logger.log("ConnectionBroker had a problem configuring the pool with " + name, e);
        }
    }
    done = true;
}

From source file:uk.co.platosys.db.jdbc.ConnectionBroker.java

protected Connection getConnection(String databaseName) throws PlatosysDBException {
    Connection connect;//w w w .  j a v a 2s  .c  o m
    while (!done) {
    } //wait for databases to be set up.
    try {
        if (dataSources.containsKey(databaseName)) {
            BasicDataSource dataSource = dataSources.get(databaseName);

            /* GenericObjectPool<PoolableConnection> pool = pools.get(databaseName);*/
            //logger.log("1 "+databaseName+" has "+dataSource.getNumIdle()+"  idle plus "+dataSource.getNumActive()+" borrowed");
            Connection connection = dataSource.getConnection();
            if (connection != null) {
                //logger.log("2 "+databaseName+" has "+dataSource.getNumIdle()+"  idle plus "+dataSource.getNumActive()+" borrowed");
                connect = connection;
            } else {
                logger.log("dataSource returned a null connection");
                return null;
            }
        } else {
            logger.log("not found first time, reloading datasources");
            done = false;
            init();
            while (!done) {
            } //
            if (dataSources.containsKey(databaseName)) {
                BasicDataSource dataSource = dataSources.get(databaseName);
                /*GenericObjectPool<PoolableConnection> pool = pools.get(databaseName);*/
                //logger.log("3 "+databaseName+" has "+dataSource.getNumIdle()+"  idle plus "+dataSource.getNumActive()+" borrowed");
                Connection connection = dataSource.getConnection();
                if (connection != null) {
                    // logger.log("4 "+databaseName+" has "+dataSource.getNumIdle()+"  idle plus "+dataSource.getNumActive()+" borrowed");
                    connect = connection;
                } else {
                    logger.log("dataSource returned a null connection");
                    return null;
                }
            } else {
                logger.log(2, "CB - Database " + databaseName + " is not known ");
                throw new PlatosysDBException("CB says Database " + databaseName + " is not known");
            }
        }
        //refresh connection counters:
        int idleConnections = 0;
        int activeConnections = 0;
        int totalConnections = 0;
        int maxTotal = 0;
        for (BasicDataSource bds : dataSet) {
            idleConnections = idleConnections + bds.getNumIdle();
            activeConnections = activeConnections + bds.getNumActive();
            maxTotal = maxTotal + bds.getMaxTotal();
        }
        totalConnections = idleConnections + activeConnections;
        logger.log("CB has " + totalConnections + "; of which " + activeConnections + " active and "
                + idleConnections + " idle");
        return connect;
    } catch (Exception e) {
        throw new PlatosysDBException("ConnectionBroker issues", e);
    }
}