/**
*
*/
package org.hivedb.meta.persistence;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hivedb.meta.Node;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
public class CachingDataSourceProvider implements HiveDataSourceProvider {
private static final Log log = LogFactory.getLog(CachingDataSourceProvider.class);
private static CachingDataSourceProvider INSTANCE = new CachingDataSourceProvider();
private Map<String, DataSource> cache = new HashMap<String, DataSource>();
private HiveBasicDataSourceProvider delegate;
private CachingDataSourceProvider() {
this.delegate = new HiveBasicDataSourceProvider();
}
public DataSource getDataSource(Node node) {
return getDataSource(node.getUri());
}
/**
* @see HiveDataSourceProvider#close()
*/
public void close() {
delegate.close();
}
public DataSource getDataSource(String uri) {
DataSource ds = cache.get(uri);
if (ds == null) {
ds = delegate.getDataSource(uri);
cache.put(uri, ds);
}
return ds;
}
public static CachingDataSourceProvider getInstance() {
return INSTANCE;
}
}