org.onexus.collection.store.mysql.internal.MysqlCollectionStore.java Source code

Java tutorial

Introduction

Here is the source code for org.onexus.collection.store.mysql.internal.MysqlCollectionStore.java

Source

/**
 *  Copyright 2012 Universitat Pompeu Fabra.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *
 */
package org.onexus.collection.store.mysql.internal;

import com.mysql.jdbc.Driver;
import org.apache.commons.dbcp.ConnectionFactory;
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;
import org.onexus.collection.api.ICollectionStore;
import org.onexus.collection.store.sql.SqlCollectionStore;
import org.onexus.resource.api.IResourceManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MysqlCollectionStore extends SqlCollectionStore implements ICollectionStore {

    private static final Logger LOGGER = LoggerFactory.getLogger(MysqlCollectionStore.class);

    private String server;

    private String port;

    private String database;

    private String username;

    private String password;

    private String poolMaxActive;

    private String poolWhenExhausted;

    private String poolMaxWait;

    private IResourceManager resourceManager;

    public MysqlCollectionStore() {
        super();
    }

    protected DataSource newDataSource() {

        try {
            Class.forName(Driver.class.getName());
        } catch (Exception e) {
            LOGGER.error("Exception: " + e.getMessage());
        }

        // Config parameters
        int maxActive = 8;
        try {
            maxActive = Integer.valueOf(getPoolMaxActive().trim()).intValue();
        } catch (Exception e) {
            LOGGER.error("Malformed config parameter 'poolMaxActive'");
        }

        byte whenExhausted = GenericObjectPool.WHEN_EXHAUSTED_BLOCK;
        try {
            if (getPoolWhenExhausted().trim().equalsIgnoreCase("FAIL")) {
                whenExhausted = GenericObjectPool.WHEN_EXHAUSTED_FAIL;
            }
            if (getPoolWhenExhausted().trim().equalsIgnoreCase("GROW")) {
                whenExhausted = GenericObjectPool.WHEN_EXHAUSTED_GROW;
            }
        } catch (Exception e) {
            LOGGER.error("Malformed config parameter 'poolWhenExhausted'");
        }

        long maxWait = GenericObjectPool.DEFAULT_MAX_WAIT;
        try {
            maxWait = Long.valueOf(getPoolMaxWait().trim()).longValue();
        } catch (Exception e) {
            LOGGER.error("Malformed config parameter 'poolMaxWait'");
        }

        // Initialize the DataSource with a connection pool
        ConnectionFactory connectionFactory = new MysqlConnectionFactory();
        GenericObjectPool connectionPool = new GenericObjectPool(null, maxActive, whenExhausted, maxWait);
        connectionPool.setTestWhileIdle(true);
        connectionPool.setTimeBetweenEvictionRunsMillis(3600);
        connectionPool.setMinEvictableIdleTimeMillis(3600);

        @SuppressWarnings("unused")
        PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory,
                connectionPool, null, null, false, true);
        poolableConnectionFactory.setValidationQuery("SELECT 1");
        return new PoolingDataSource(connectionPool);

    }

    @Override
    public Statement createReadStatement(Connection dataConn) throws SQLException {
        Statement st = super.createReadStatement(dataConn);

        st.setFetchDirection(ResultSet.FETCH_FORWARD);
        st.setFetchSize(Integer.MIN_VALUE);

        return st;
    }

    public String getDatabase() {
        return database;
    }

    public void setDatabase(String database) {
        this.database = database;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public String getServer() {
        return server;
    }

    public void setServer(String server) {
        this.server = server;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPoolMaxActive() {
        return poolMaxActive;
    }

    public void setPoolMaxActive(String poolMaxActive) {
        this.poolMaxActive = poolMaxActive;
    }

    public String getPoolWhenExhausted() {
        return poolWhenExhausted;
    }

    public void setPoolWhenExhausted(String poolWhenExhausted) {
        this.poolWhenExhausted = poolWhenExhausted;
    }

    public String getPoolMaxWait() {
        return poolMaxWait;
    }

    public void setPoolMaxWait(String poolMaxWait) {
        this.poolMaxWait = poolMaxWait;
    }

    public IResourceManager getResourceManager() {
        return resourceManager;
    }

    public void setResourceManager(IResourceManager resourceManager) {
        this.resourceManager = resourceManager;
    }

    public class MysqlConnectionFactory implements ConnectionFactory {

        @Override
        public Connection createConnection() throws SQLException {
            return DriverManager.getConnection("jdbc:mysql://" + server + ":" + port + "/" + database, username,
                    password);
        }
    }

}