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

net.paoding.rose.jade.context.spring.SpringDataSourceFactoryDelegate Maven / Gradle / Ivy

package net.paoding.rose.jade.context.spring;

import net.paoding.rose.jade.annotation.DAO;
import net.paoding.rose.jade.dataaccess.DataSourceFactory;
import net.paoding.rose.jade.dataaccess.DataSourceHolder;
import net.paoding.rose.jade.statement.StatementMetaData;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.ListableBeanFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * @author qieqie
 */
public class SpringDataSourceFactoryDelegate implements DataSourceFactory {

    private final ListableBeanFactory beanFactory;

    private final Map dataSourceFactoryMap = new HashMap<>();

    public SpringDataSourceFactoryDelegate(ListableBeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }

    @Override
    public DataSourceHolder getHolder(StatementMetaData metaData, Map runtimeProperties) {
        Class daoClass = metaData.getDAOMetaData().getDAOClass();
        String catalog = daoClass.getAnnotation(DAO.class).catalog();
        DataSourceFactory dataSourceFactory = null;
        String key = daoClass.getName() + "-" + metaData.getSQLType();
        if (dataSourceFactoryMap.containsKey(key)) {
            dataSourceFactory = dataSourceFactoryMap.get(key);
        } else {
            String beanName = "jade.dataSourceFactory";
            String catlogBeanName = StringUtils.isEmpty(catalog) ? beanName : beanName + "." + catalog;
            ListableBeanFactory beanFactory = this.beanFactory;
            if (beanFactory != null) {
                if (beanFactory.containsBeanDefinition(catlogBeanName) || beanFactory.containsBean(catlogBeanName)) {
                    dataSourceFactory = beanFactory.getBean(catlogBeanName, DataSourceFactory.class);
                } else if (beanFactory.containsBeanDefinition(beanName) || beanFactory.containsBean(beanName)) {
                    dataSourceFactory = beanFactory.getBean(beanName, DataSourceFactory.class);
                } else {
                    dataSourceFactory = new SpringDataSourceFactory(beanFactory);
                }
                dataSourceFactoryMap.put(key, dataSourceFactory);
            }
        }
        assert dataSourceFactory != null;
        return dataSourceFactory.getHolder(metaData, runtimeProperties);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy