package com.taobao.tddl.group.dbselector;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import com.taobao.tddl.group.jdbc.DataSourceWrapper;
/**
* 只有一个数据源的DBSelector
*
* @author linxuan
* @author yangzhu
*/
public class OneDBSelector extends AbstractDBSelector {
private final DataSourceHolder dsHolder;
private final Map<String, DataSource> dsMap;
public OneDBSelector(DataSourceWrapper dsw){
this.dsHolder = new DataSourceHolder(dsw);
dsMap = new LinkedHashMap<String, DataSource>();
dsMap.put(dsw.getDataSourceKey(), dsw.getWrappedDataSource());
}
public DataSource select() {
return dsHolder.dsw;
}
public Map<String, DataSource> getDataSources() {
return dsMap;
}
protected <T> T tryExecuteInternal(Map<DataSource, SQLException> failedDataSources, DataSourceTryer<T> tryer,
int times, Object... args) throws SQLException {
List<SQLException> exceptions;
if (failedDataSources != null && failedDataSources.containsKey(dsHolder.dsw)) {
exceptions = new ArrayList<SQLException>(failedDataSources.size());
exceptions.addAll(failedDataSources.values());
return tryer.onSQLException(exceptions, this.exceptionSorter, args);
}
try {
return tryOnDataSourceHolder(dsHolder, failedDataSources, tryer, times, args);
} catch (SQLException e) {
exceptions = new ArrayList<SQLException>(1);
exceptions.add(e);
}
return tryer.onSQLException(exceptions, this.exceptionSorter, args);
}
protected <T> T tryExecuteInternal(DataSourceTryer<T> tryer, int times, Object... args) throws SQLException {
return this.tryExecute(null, tryer, times, args);
}
public DataSourceWrapper get(String dsKey) {
return dsHolder.dsw.getDataSourceKey().equals(dsKey) ? dsHolder.dsw : null;
}
protected DataSourceHolder findDataSourceWrapperByIndex(int dataSourceIndex) {
return dsHolder.dsw.isMatchDataSourceIndex(dataSourceIndex) ? dsHolder : null;
}
}