package com.chamago.bison.dbpool;
import com.chamago.bison.util.xml.JXmlWapper;
import java.io.File;
import java.util.Enumeration;
import java.util.Hashtable;
public class JdbcPoolManager
{
public static final String JDBC_POOL_NAME = "MY_JDBC_POOLS";
private Hashtable<String, JdbcConnectPool> pools;
public static final String JDBC_LOGGER_KEY = "jdbc";
private String configFile;
public JdbcPoolManager(String cfgFile)
{
this.configFile = cfgFile;
this.pools = new Hashtable();
}
public void loadDataSource() {
JXmlWapper xmlConfig = JXmlWapper.parse(new File(this.configFile));
int count = xmlConfig.countXmlNodes("dataSource");
for (int i = 0; i < count; i++) {
JXmlWapper xmlds = xmlConfig.getXmlNode("dataSource[" + i + "]");
String dataSource = xmlds.getStringValue("@name");
String strDescName = xmlds.getStringValue("@desc");
String driverName = xmlds.getStringValue("@driverName");
String dbUrl = xmlds.getStringValue("@dbUrl");
String dbUrlBak = xmlds.getStringValue("@dbUrlBak");
String userName = xmlds.getStringValue("@userName");
String passWord = xmlds.getStringValue("@passWord");
String checkSql = xmlds.getStringValue("@checkSql");
String serverType = xmlds.getStringValue("@serverType");
int startNum = xmlds.getIntValue("@startNum", 1);
int maxNum = xmlds.getIntValue("@maxNum", 5);
int maxCallNum = xmlds.getIntValue("@maxCallNum", 0);
int interval = xmlds.getIntValue("@interval", 60);
JdbcConnectPool pool = new JdbcConnectPool();
pool.setCheckSql(checkSql);
pool.setDataSource(dataSource);
pool.setDbUrl(dbUrl);
pool.setDbUrlBak(dbUrlBak);
pool.setDescName(strDescName);
pool.setDriverName(driverName);
pool.setInterval(interval);
pool.setMaxCallNum(maxCallNum);
pool.setMaxNum(maxNum);
pool.setPassWord(passWord);
pool.setServerType(serverType);
pool.setStartNum(startNum);
pool.setUserName(userName);
try {
pool.startCheckThread();
pool.createConnects();
}
catch (Exception localException) {
}
this.pools.put(dataSource, pool);
}
}
public void reload()
{
}
public JdbcConnectPool findDataSource(String dataSource)
{
return (JdbcConnectPool)this.pools.get(dataSource.toLowerCase());
}
public Enumeration<String> getAllDataSourceName() {
return this.pools.keys();
}
public synchronized JdbcConnect getJdbcConnect(String dataSource)
{
JdbcConnectPool pool = (JdbcConnectPool)this.pools.get(dataSource.toLowerCase());
return pool.getJdbcConnect();
}
public JdbcConnect getJdbcConnect()
{
return getJdbcConnect("default");
}
public void addDataSource(JdbcConnectPool pool) {
this.pools.put(pool.getDataSource(), pool);
}
public void removeDataSource(String dataSource) {
JdbcConnectPool pool = findDataSource(dataSource);
if (pool != null) {
pool.stopCheckThread();
pool.destory();
this.pools.remove(dataSource);
pool = null;
}
}
public void destory() {
if (this.pools != null) {
Enumeration enum1 = this.pools.keys();
while (enum1.hasMoreElements()) {
String s = (String)enum1.nextElement();
JdbcConnectPool pool = (JdbcConnectPool)this.pools.get(s);
pool.stopCheckThread();
pool.destory();
this.pools.remove(s);
pool = null;
}
this.pools.clear();
}
}
}