Menú Curso Java Web (JSP's/Servlets) : Código Fuente ConexionPoolBasico.java para generar "Pool" de Base de Datos

(Anterior) Acceso a Base de Datos

ConexionPoolBasico.java

La siguiente Clase representa el "Pool" de conexiones que implementa la interfase diseñada anteriormente.

package com.osmosislatina.basesdedatos;

import java.sql.*;
import java.util.*;

public class ConexionPoolBasico implements IConexionPool { 

    protected Stack pool;
    protected String connectionURL;
    protected String userName;
    protected String password;

    /**
     * Genera Pool básico de conexión utilizando URL , contraseña y nombre
     */
 
 

    public ConexionPoolBasico(String aConnectionURL, String aUserName, String aPassword)
    {
	connectionURL = aConnectionURL;
	userName = aUserName;
	password = aPassword;
	pool = new Stack();
    } 
/** Adquiere conexión del Pool o genera una nueva si el pool esta vacío */ public synchronized Connection extraerConexion() throws SQLException { // Si el pool no esta vacio, tomar una conexion if(!pool.empty()) { return (Connection) pool.pop(); } else { // Entonces generar una conexion nueva return DriverManager.getConnection(connectionURL, userName, password); } }
 

    
    /** Regresar conexion al pool 
     */
	public synchronized void liberarConexion(Connection conn)
	throws SQLException 
	{ 
            conn.close();
	    pool.push(conn);
	   } 
	   
}

  • Primeramente se define la librería ("package") a la cual debe pertenecer la Clase.

  • Son importadas las diversas librerías ("packages") de las que hará uso el "Pool" de Conexiones; java.sql contiene Clases comunes para conectarse a Bases de Datos mientras java.util contiene Clases auxiliares para el lenguaje Java (como Stack); todas estas Clases forman parte del JDK.

  • Es declarada la Clase principal (ConexionPoolBasico) que implementa la Interfase IConexionPool definida anteriormente.

  • Son definidos cuatro campos que representan los siguientes conceptos: Un URL de conexión para la Base de Datos, el nombre del usuario autorizado para accesar la Base de Datos, la contraseña del usuario autorizado, y un campo para contener una instancia de la Clase Stack el cual contendrá las conexiones "latentes" hacia la Base de Datos.

    • NOTA sobre URL de Conexión : Un URL para conexión hacia Bases de Datos representa la ubicación física de la misma, este parámetro puede contener desde el Puerto TCP de Operación hasta el nombre virtual de la Base de Datos, generalmente varía dependiendo del creador del Driver JDBC el cual proporciona dichos detalles en su documentación.

  • Se define el Constructor de esta Clase, el cual al ser invocado asigna los diversos valores a los campos antes mencionados.

  • Es implementado el método extraerConexion el cual revisa la instancia del Objeto pool, si este se encuentra vacío es invocada la Clase DriverManager, mediante esta Clase se genera una conexión directa hacia la Base de Datos en cuestión; si el Objeto pool contiene elementos ("Conexiones Latentes") se extrae una de ahí mismo.

    DriverManager vs. DataSource

    En este "Pool" se emplea la Clase DriverManager para adquirir una conexión hacia una Base de Datos, sin embargo, a partir del JDK 1.4 se recomienda emplear otra Clase llamada DataSource para adquirir este tipo de conexiones.

    La diferencia entre ambas es solo una cuestión de eficiencia, ya que el resultado obtenido por ambas Clases es un Objeto del tipo Connection; el "Pool" de Apache (DBCP) que será descrito en otros ejemplos de este curso emplea la Clase DataSource en su diseño interno.

  • Al implementarse el metodo liberarConexion, la conexión utilizada como parametro de entrada es retornada al Objeto pool mediante el metodo push; esto permite que dicha conexión regrese al grupo de conexiones "latentes" y sea reutilizable a través del metodo extraerConexion.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com