package com.lizard.fastdb.connection; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.lizard.fastdb.datasource.DataSourceException; import com.lizard.fastdb.util.ReflectUtils; import com.lizard.fastdb.util.StringUtils; /** * 负责根据具体的ConnectionProvider实现类初始化ConnectionProvider实例 * * @author SHEN.GANG */ public final class ConnectionProviderFactory { private final static Log logger = LogFactory.getLog(ConnectionProviderFactory.class); private ConnectionProviderFactory() { } /** * 根据数据源配置信息,创建ConnectionProvider实例 * * @param ds 数据源配置 * @return ConnectionProvider */ public static ConnectionProvider createConnectionProvider(Properties ds) { // Connection provider 提供者 String provider_class = ds.getProperty("connection-provider"); // 如果没有发现有效的 ConnectionProvider,则抛出异常 if (StringUtils.isEmptyString(provider_class)) { logger.error("Can not found valid Connection Provider, it is empty!"); throw new DataSourceException("Can not found valid Connection Provider, it is empty!"); } ConnectionProvider connP = null; try { // 实例化 ConnectionProvider connP = (ConnectionProvider) ReflectUtils.newInstance(provider_class); // 执行连接池初始化 connP.configure(ds); } catch (Exception e) { logger.error("Failed to initial the instance of Connection Provider[" + provider_class + "]"); throw new DataSourceException("Failed to initial the instance of Connection Provider[" + provider_class + "]", e); } return connP; } }