/***************************************************************************** * * * This file is part of the tna framework distribution. * * Documentation and updates may be get from biaoping.yin the author of * * this framework * * * * Sun Public License Notice: * * * * The contents of this file are subject to the Sun Public License Version * * 1.0 (the "License"); you may not use this file except in compliance with * * the License. A copy of the License is available at http://www.sun.com * * * * The Original Code is tag. The Initial Developer of the Original * * Code is biaoping yin. Portions created by biaoping yin are Copyright * * (C) 2000. All Rights Reserved. * * * * GNU Public License Notice: * * * * Alternatively, the contents of this file may be used under the terms of * * the GNU Lesser General Public License (the "LGPL"), in which case the * * provisions of LGPL are applicable instead of those above. If you wish to * * allow use of your version of this file only under the terms of the LGPL * * and not to allow others to use your version of this file under the SPL, * * indicate your decision by deleting the provisions above and replace * * them with the notice and other provisions required by the LGPL. If you * * do not delete the provisions above, a recipient may use your version of * * this file under either the SPL or the LGPL. * * * * biaoping.yin (yin-bp@163.com) * * * *****************************************************************************/ package com.frameworkset.common.poolman.sql; import java.sql.Connection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.apache.log4j.Logger; import com.frameworkset.common.poolman.util.SQLManager; /** * 管理全部数据库链接池的所有主键信息 * @author biaoping.yin * created on 2005-3-30 * version 1.0 */ public class PrimaryKeyCacheManager { private static Logger log = Logger.getLogger(PrimaryKeyCacheManager.class); private Map<String,PrimaryKeyCache> primaryKeyCaches; public static void destroy() { if(self != null) { self._destroy(); self = null; } } void _destroy() { if(primaryKeyCaches != null) { Iterator<Entry<String, PrimaryKeyCache>> it = primaryKeyCaches.entrySet().iterator(); while(it.hasNext()) { Entry<String, PrimaryKeyCache> entry = it.next(); entry.getValue().destroy(); } primaryKeyCaches.clear(); primaryKeyCaches = null; } } public static void reset() { if(self != null) { self._reset(); } } void _reset() { if(primaryKeyCaches != null) { Iterator<Entry<String, PrimaryKeyCache>> it = primaryKeyCaches.entrySet().iterator(); while(it.hasNext()) { Entry<String, PrimaryKeyCache> entry = it.next(); entry.getValue().reset(); } // primaryKeyCaches.clear(); // primaryKeyCaches = null; } } private static PrimaryKeyCacheManager self; private PrimaryKeyCacheManager() { primaryKeyCaches = Collections.synchronizedMap(new HashMap()); } public static PrimaryKeyCacheManager getInstance() { if(self == null) self = new PrimaryKeyCacheManager(); return self; } public void addPrimaryKeyCache(PrimaryKeyCache primaryKeyCache) { primaryKeyCaches.put(primaryKeyCache.getDbname(),primaryKeyCache); } public boolean removePrimaryKeyCache(String dbname) { if(primaryKeyCaches.remove(dbname)!= null) return true; return false; } public PrimaryKeyCache getPrimaryKeyCache(String dbname) { if(SQLManager.getInstance().getPool(dbname) == null) return null; String _dbname = SQLManager.getRealDBNameFromExternalDBNameIfExist(dbname); PrimaryKeyCache keyCache = (PrimaryKeyCache)primaryKeyCaches.get(_dbname); if(keyCache != null) return keyCache; // if(keyCache == null) // try { // keyCache = BaseTableManager.getPoolTableInfos(dbname); // if(keyCache != null) // { // addPrimaryKeyCache(keyCache); // } // } catch (Exception ex) { // log.error(ex); // } return keyCache; } public PrimaryKey loaderPrimaryKey(String dbname,String tableName) { return loaderPrimaryKey(null, dbname, tableName); } /** * 从数据库中加载表的主键信息 * @param con * @param dbname * @param tableName * @return */ public PrimaryKey loaderPrimaryKey(Connection con,String dbname,String tableName) { return getPrimaryKeyCache(dbname).loaderPrimaryKey(con,tableName); } }