Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package testconnpoolproject;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Set;
- public abstract class TestPool<T> {
- long deadTime;
- HashMap<T, Long> available;
- HashMap<T, Long> used;
- TestPool() {
- deadTime = 50 * 1000;
- available = new HashMap<T, Long>();
- used = new HashMap<T, Long>();
- }
- abstract T create();
- abstract long dead(T o);
- abstract boolean validate(T o);
- synchronized void putBack(T obj) {
- used.remove(obj);
- available.put(obj, System.currentTimeMillis());
- }
- synchronized T getObject() {
- long cuTime = System.currentTimeMillis();
- T t = null;
- if (available.size() > 0) {
- Set<T> keys = available.keySet();
- if (keys != null && keys.size() > 0) {
- Iterator<T> iter = keys.iterator();
- if (iter.hasNext()) {
- t = iter.next();
- Long sleepTime = available.get(t);
- if ((cuTime - sleepTime) > deadTime) {
- available.remove(t);
- dead(t);
- t = null;
- } else {
- if (validate(t)) {
- available.remove(t);
- used.put(t, cuTime);
- return (t);
- } else {
- available.remove(t);
- dead(t);
- t = null;
- }
- }
- }
- }
- }
- t = create();
- available.put(t, cuTime);
- return t;
- }
- }
- package testconnpoolproject;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- public class MyConnectionPool extends TestPool<Connection> {
- String dsn, usr, pwd;
- MyConnectionPool(String driver, String dsn, String usr, String pwd) {
- super();
- try {
- Class.forName(driver).newInstance();
- } catch (Exception e) {
- e.printStackTrace();
- }
- this.dsn = dsn;
- this.usr = usr;
- this.pwd = pwd;
- }
- @Override
- Connection create() {
- try {
- return DriverManager.getConnection(dsn, usr, pwd);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- long dead(Connection o) {
- try {
- o.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return 0;
- }
- @Override
- boolean validate(Connection o) {
- try {
- return (!((Connection) o).isClosed());
- } catch (SQLException e) {
- e.printStackTrace();
- return (false);
- }
- }
- }
- public class ConnectionPool {
- public static void main() {
- MyConnectionPool conn = new MyConnectionPool("org.hsqldb.jdbcDriver", "jdbc:hsqldb: //localhost/mydb", "sa",
- "password");
- conn.getObject();
- }
- }
Add Comment
Please, Sign In to add comment