All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cloudhopper.commons.sql.proxool.ProxoolDataSourceAdapter Maven / Gradle / Ivy

There is a newer version: 1.3.2
Show newest version
package com.cloudhopper.commons.sql.proxool;

/*
 * #%L
 * ch-commons-sql
 * %%
 * Copyright (C) 2012 - 2013 Cloudhopper by Twitter
 * %%
 * 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.
 * #L%
 */

import com.cloudhopper.commons.sql.*;
import com.cloudhopper.commons.sql.adapter.*;
import com.cloudhopper.commons.util.ManagementUtil;
import java.lang.management.ManagementFactory;
import java.util.Properties;
import org.logicalcobwebs.proxool.ProxoolDriver;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;

/**
 * Adapter for a Proxool DataSource.
 * 
 * @author joelauer
 */
public class ProxoolDataSourceAdapter implements DataSourceAdapter {

    public boolean isPooled() {
        return true;
    }

    public boolean isJmxCapable() {
        return true;
    }

    public ManagedDataSource create(DataSourceConfiguration config) throws SQLMissingDependencyException, SQLConfigurationException {

        // verify proxool driver exists and register it
        try {
            // create a new instance
            ProxoolDriver driver = new ProxoolDriver();
        } catch (Exception e) {
            throw new SQLMissingDependencyException("Proxool driver '" + ProxoolDriver.class.getName() + "' failed to load. Perhaps missing proxool jar file?", e);
        }

        // create new set of proxool properties
        Properties info = new Properties();

        // setup properties to use
        info.setProperty("proxool.minimum-connection-count", Integer.toString(config.getMinPoolSize()));
        info.setProperty("proxool.maximum-connection-count", Integer.toString(config.getMaxPoolSize()));

        // set the validation query
        info.setProperty("proxool.house-keeping-test-sql", config.getValidationQuery());

        // amount of time (in ms) to wait for getConnection() to succeed
        // not supported by Proxool -- maybe driver dependant????
        //config.getCheckoutTimeout());

        // checkin/checkout validation
        info.setProperty("proxool.test-after-use", Boolean.toString(config.getValidateOnCheckin()));
        info.setProperty("proxool.test-before-use", Boolean.toString(config.getValidateOnCheckout()));

        // amount of time to wait to validate connections
        info.setProperty("proxool.house-keeping-sleep-time", Long.toString(config.getValidateIdleConnectionTimeout()));

        // set idleConnectionTimeout
        // not supported by prooxool -- this is implicitly done...

        // set activeConnectionTimeout
        info.setProperty("proxool.maximum-active-time", Long.toString(config.getActiveConnectionTimeout()));

        // should jmx be turned on/off?
        if (config.getJmx()) {
            // enable jmx for proxool (no support for renaming domain, object name)
            info.setProperty("proxool.jmx", "true");
            // create list of all mbean servers...
            String serverId = ManagementUtil.getMBeanServerId(ManagementFactory.getPlatformMBeanServer());
            // add agent-id property
            info.setProperty("proxool.jmx-agent-id", serverId);
        } else {
            info.setProperty("proxool.jmx", "false");
        }
        
        info.setProperty("user", config.getUsername());
        info.setProperty("password", config.getPassword());
        String alias = config.getName();
        String driverClass = config.getDriver();
        String driverUrl = config.getUrl();

        // create new url for proxool
        String proxoolUrl = "proxool." + alias + ":" + driverClass + ":" + driverUrl;

        // register this connection
        // normally, you'd do this ProxoolFacade.registerConnectionPool(url, info);
        try {
            ProxoolFacade.registerConnectionPool(proxoolUrl, info);
        } catch (ProxoolException e) {
            throw new SQLConfigurationException("Failed while registering proxool connection", e);
            //throw new SQLMissingDependencyException("Proxool '" + PROXOOL_FACADE_CLASS + "' failed to load. Perhaps missing proxool jar file?", e);
        }

        // create basic DataSource wrapper to handle calls to the DriverManager
        BasicDataSource ds = new BasicDataSource(proxoolUrl, config.getUsername(), config.getPassword());

        // done creating datasource wrapper, return it
        return new ProxoolManagedDataSource(this, config, ds);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy