首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

动态创设多个连接池

2012-06-29 
动态创建多个连接池系统场景:系统依赖多个数据库。其中一台数据库服务器运行ORACLE,同时还有数台机器上跑着

动态创建多个连接池
系统场景:系统依赖多个数据库。其中一台数据库服务器运行ORACLE,同时还有数台机器上跑着ObjectServer内存数据库。由于到部署时才能确定从机的数量,因此需要动态创建连接池

方案:Oracle数据库用c3p0来管理连接池。另外写一个连接管理器来动态创建内存数据库连接池

代码:经过简化,只贴出关键代码,去掉日志、异常处理、null检查等

// ObjectServer连接管理器public class DBConnectionManager{    private Hashtable<String, DBConnectionPool> pools;// 连接池集合,每个OS域都有一个连接池       private static final byte[] lock = new byte[0];// 同步锁            // 返还连接    public void freeConnection(String domainName, Connection conn)    {        synchronized (lock)        {                     DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);// 得到域名对应的连接池                       pool.freeConnection(conn, lock);                 }    }    // 获得某从机上的可用连接    public Connection getConnection(String domainName)    {        synchronized (lock)        {                                 DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);            if (null != pool)// 连接池已存在,直接使用            {                return pool.getConnection(lock);                       }            else            {                registerNewConnectionPool(poolProvide);// 注册新连接池                return getConnection(domainName);// 递归调用                    }            return null;        }    }}

热点排行