⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmdboconnectionmanager.java

📁 梦界家园程序开发基底框架
💻 JAVA
字号:
package jm.dbo;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Map;

import jm.util.JMMap;
import jm.util.JMVector;

/**
 * DBConnectionManager
 * @author fu_changyong(1shome)
 * @see jdk1.5.2
 * @version 1.5.2.2
 *
 */
public class JMDBOConnectionManager implements JMDBOCommandKeys {
    public static final String CLASS_NAME = "DBConnectionManager";

    private static int clients = 0;

    private static JMDBOConnectionManager instance;

    private JMVector<JMDBOConntionInfoKeyValue> drivers = new JMVector<JMDBOConntionInfoKeyValue>();

    private JMMap<String, JMDBOConnectionPool> pools = new JMMap<String, JMDBOConnectionPool>();

    private JMDBOConnectionManager() {
        init();
    }

    public static synchronized JMDBOConnectionManager getInstance() {
        if (instance == null) {
            instance = new JMDBOConnectionManager();
        }
        clients++;
        return instance;
    }

    private void init() {
        loadDrivers();
        createPools();
    }

    public void freeConnection(String name, Connection con) {
        JMDBOConnectionPool pool = pools.get(name);
        if (pool != null) {
            pool.freeConnection(con);
        }
    }

    public Connection getConnection(String name) {
        if (pools == null||pools.size()==0) {
            return null;
        }

        JMDBOConnectionPool pool = pools.get(name);
        if (pool == null) {
            return null;
        }
        return pool.getConnection();
    }

    public Connection getConnection(String name, long time) {
        JMDBOConnectionPool pool = pools.get(name);
        if (pool != null) {
            return pool.getConnection(time);
        }
        return null;
    }

    public synchronized void release() {
        if (--clients != 0) {
            return;
        }
        Map.Entry entry = null;
        for (Iterator iter = pools.entrySet().iterator(); iter.hasNext();) {
            entry = (Map.Entry) iter.next();
            JMDBOConnectionPool pool = (JMDBOConnectionPool) entry.getValue();
            pool.release();
        }
        for (Iterator iter = drivers.iterator(); iter.hasNext();) {
            Driver driver = (Driver) iter.next();
            try {
                DriverManager.deregisterDriver(driver);
            } catch (SQLException e) {
            }
        }
    }

    private final String DATABASE_CONFIG_FILE_NAME = "database.xml";
    private void loadDrivers() {
        try {
            drivers = JMDBOConntionDriversManger.getInstance(DATABASE_CONFIG_FILE_NAME).getDbDrivers();
            for (JMDBOConntionInfoKeyValue dbset : drivers) {
                Driver driver = (Driver) Class.forName(dbset.getDriver())
                        .newInstance();
                DriverManager.registerDriver(driver);
            }
        } catch (Exception e) {
        }
    }

    private void createPools() {
        try {
            for (JMDBOConntionInfoKeyValue dbset : drivers) {
                JMDBOConnectionPool pool = new JMDBOConnectionPool(dbset);
                pools.put(dbset.getDatabase().toUpperCase(), pool);
            }
        } catch (Exception e) {
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -