package jelectrum; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.apache.commons.pool.ObjectPool; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.PoolingDriver; import org.apache.commons.dbcp.PoolableConnectionFactory; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import java.util.Properties; public class DB { private static void loadDriver(String driver) throws SQLException { try { Class.forName(driver).newInstance(); } catch(Exception e) { throw new SQLException("Unable to load driver: " + driver); } } public static void openConnectionPool(String pool_name, String driver_class, String uri, String user, String pass, int max_active, int max_idle) throws SQLException { Properties props = new Properties(); props.put("autoReconnect","true"); props.put("user",user); props.put("password",pass); props.put("socketTimeout", "15"); loadDriver(driver_class); loadDriver("org.apache.commons.dbcp.PoolingDriver"); GenericObjectPool connectionPool = new GenericObjectPool(null); connectionPool.setMaxActive(max_active); connectionPool.setMaxIdle(max_idle); ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(uri, props); new PoolableConnectionFactory(connectionFactory,connectionPool,null,null,false,true); PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:"); driver.registerPool(pool_name,connectionPool); } public static Connection openConnection(String pool_name) throws SQLException { Connection conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:" + pool_name); conn.setAutoCommit(true); return conn; } public static void safeClose(Connection conn) { if (conn==null) return; try { conn.close(); } catch(SQLException e) { e.printStackTrace(); } } public static void printDriverStats(String pool_name) throws Exception { PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:"); ObjectPool connectionPool = driver.getConnectionPool(pool_name); System.out.println("NumActive: " + connectionPool.getNumActive()); System.out.println("NumIdle: " + connectionPool.getNumIdle()); } }