com.flipkart.aesop.hbasedatalayer.AbstractHBaseDataLayerFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.flipkart.aesop.hbasedatalayer.AbstractHBaseDataLayerFactory.java

Source

/*******************************************************************************
 *
 * Copyright 2012-2015, the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obta 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 com.flipkart.aesop.hbasedatalayer;

import java.beans.PropertyVetoException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import javax.sql.DataSource;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.trpr.platform.core.impl.logging.LogFactory;
import org.trpr.platform.core.spi.logging.Logger;

import com.flipkart.aesop.destinationoperation.JDBCDataLayer;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * This class was introduced to create separate JDBC pool for all consumers.
 * <code>ComboPooledDataSource</code> always initializes with default
 * configuration in case of Embedded driver.
 * 
 * @author dhirendra.singh
 *
 * @param <T>
 *            Implementation of <code>JDBCDataLayer</code>.
 */
public abstract class AbstractHBaseDataLayerFactory<T extends JDBCDataLayer> implements FactoryBean<T> {
    /** c3p0 properties to be used for creating jdbcTemplate **/
    private Properties dataSourceProperties;
    /** Name of driver class to be used for creating jdbcTemplate **/
    private String driverClass;
    /** jdbc url of hbase **/
    private String jdbcUrl;
    /** name of data source to be used for wirtes **/
    private String dataSourceName;
    /**
     * JDBC Template Map, with Namespace name as key and the corresponding JDBC
     * template as value.
     **/
    private Map<String, NamedParameterJdbcTemplate> jdbcTemplateMap;
    /** Logger for this class. */
    public static final Logger LOGGER = LogFactory.getLogger(AbstractHBaseDataLayerFactory.class);

    /**
     * Creates Destination Later using the JDBC Template.
     * 
     * @param jdbcTemplateMap
     * @return Destination Data Layer
     */
    public abstract T createDestinationOperationHandler(Map<String, NamedParameterJdbcTemplate> jdbcTemplateMap);

    public T getObject() throws Exception {
        createJdbcTemplateMap();
        return createDestinationOperationHandler(jdbcTemplateMap);
    }

    public abstract Class<?> getObjectType();

    /**
     * For each consumer this would return a new instance of this Factory.
     */
    public boolean isSingleton() {
        return false;
    }

    private void createJdbcTemplateMap() {
        jdbcTemplateMap = new HashMap<String, NamedParameterJdbcTemplate>();
        DataSource dataSource = getDataSource();
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        jdbcTemplateMap.put(getDataSourceName(), namedParameterJdbcTemplate);

    }

    private DataSource getDataSource() {
        ComboPooledDataSource comboPooledDataSource = null;
        try {
            comboPooledDataSource = new ComboPooledDataSource();
            comboPooledDataSource.setDriverClass(getDriverClass());
            comboPooledDataSource.setJdbcUrl(getJdbcUrl());
            comboPooledDataSource.setProperties(getDataSourceProperties());
        } catch (PropertyVetoException e) {
            LOGGER.error(e.getMessage());
        }

        return comboPooledDataSource;

    }

    public Properties getDataSourceProperties() {
        return dataSourceProperties;
    }

    public void setDataSourceProperties(Properties dataSourceProperties) {
        this.dataSourceProperties = dataSourceProperties;
    }

    public String getDriverClass() {
        return driverClass;
    }

    public void setDriverClass(String driverClass) {
        this.driverClass = driverClass;
    }

    public String getJdbcUrl() {
        return jdbcUrl;
    }

    public void setJdbcUrl(String jdbcUrl) {
        this.jdbcUrl = jdbcUrl;
    }

    public String getDataSourceName() {
        return dataSourceName;
    }

    public void setDataSourceName(String dataSourceName) {
        this.dataSourceName = dataSourceName;
    }

}