package es.ejie.frmk.infraestructura.tablas;

import java.sql.DriverManager;
import java.sql.SQLException;

import es.ejie.frmk.infraestructura.poolCache.Q70ConexionPoolableImpl;
import es.ejie.frmk.infraestructura.poolCache.Q70PoolException;
import es.ejie.frmk.infraestructura.poolCache.Q70RecursoPoolImpl;
import es.ejie.frmk.infraestructura.poolCache.Q70RecursoPoolable;


public class Q70HSQLConnectionPool extends Q70RecursoPoolImpl {
    private String user;
    private String password;
    private String url;
    
    /**
     * @param poolName nombre del pool
     * @param url dirección url
     * @param user usuario
     * @param password contraseña
     * @param max tamaño máximo del pool
     * @param init número de recursos iniciales
     * @param timeout tiempo de timeout
     */
    public Q70HSQLConnectionPool(String poolName, String url, String user, String password, int max, int init, int timeout) {
      super(init, max, timeout);
    
      this.url      = url;
      this.user     = user;
      this.password = password;
    }
    
    /**
     * @see es.ejie.frmk.infraestructura.poolCache.Q70RecursoPoolImpl#newResource()
     */
    protected Q70RecursoPoolable newResource() throws Q70PoolException {
		Q70RecursoPoolable resource = null;

      try
      {
		  resource = new Q70ConexionPoolableImpl(DriverManager.getConnection(url, user, password));   
      }
      catch (SQLException ex)
      {
		throw new Q70PoolException(this.getClass().getName(), "getResource", "Error al obtener recurso del pool", ex);             
      }

      return resource;
    }
    
    /**
     * @see es.ejie.frmk.infraestructura.poolCache.Q70RecursoPoolImpl#release(es.ejie.frmk.infraestructura.poolCache.Q70RecursoPoolable)
     */
    protected void release(Q70RecursoPoolable resource) {
      Q70ConexionPoolableImpl con = (Q70ConexionPoolableImpl)resource;

      try {con.close();}
      catch (SQLException ex) {}
    }
}
