1 10 package mondrian.rolap; 11 12 import mondrian.olap.Util; 13 import org.apache.commons.dbcp.*; 14 import org.apache.commons.pool.ObjectPool; 15 import org.apache.commons.pool.impl.GenericObjectPool; 16 17 import javax.sql.DataSource ; 18 import java.util.Map ; 19 import java.util.HashMap ; 20 21 26 class RolapConnectionPool { 27 28 public static RolapConnectionPool instance() { 29 return instance; 30 } 31 private static final RolapConnectionPool instance = new RolapConnectionPool(); 32 33 private final Map <Object , ObjectPool> mapConnectKeyToPool = 34 new HashMap <Object , ObjectPool>(); 35 36 private RolapConnectionPool() { 37 } 38 39 40 59 public synchronized DataSource getPoolingDataSource(Object key, 60 ConnectionFactory connectionFactory) { 61 ObjectPool connectionPool = getPool(key, connectionFactory); 62 return new PoolingDataSource(connectionPool); 64 } 65 66 69 void clearPool() { 70 mapConnectKeyToPool.clear(); 71 } 72 73 77 private synchronized ObjectPool getPool( 78 Object key, 79 ConnectionFactory connectionFactory) 80 { 81 ObjectPool connectionPool = mapConnectKeyToPool.get(key); 82 if (connectionPool == null) { 83 connectionPool = new GenericObjectPool( 85 null, 50, GenericObjectPool.WHEN_EXHAUSTED_BLOCK, 3000, 10, false, false, 60000, 5, 30000, true ); 97 98 AbandonedConfig abandonedConfig = new AbandonedConfig(); 100 abandonedConfig.setRemoveAbandoned(true); 102 abandonedConfig.setRemoveAbandonedTimeout(300); 104 abandonedConfig.setLogAbandoned(true); 107 PoolableConnectionFactory poolableConnectionFactory 108 = new PoolableConnectionFactory( 109 connectionFactory, 111 connectionPool, 113 null, 116 null, 120 false, 122 true, 124 abandonedConfig 127 ); 128 Util.discard(poolableConnectionFactory); 131 mapConnectKeyToPool.put(key, connectionPool); 132 } 133 return connectionPool; 134 } 135 136 } 137 138 | Popular Tags |