Skip to main content

pool de conexiones netbeans


POOL DE CONEXIONES

  1. Que es?

  2. Archivos .jar necesarios

  3. Configuración

  4. Clases para manejar el pool



Que es

El pool de conexiones nos permite administrar eficientemente las conexiones de nuestra aplicación a una base de datos. Cuando necesitemos interactuar con la base de datos simplemente lo hacemos a través del pool, este creara una sola conexión a la base de datos , a la que podemos acceder.


Archivos .jar necesarios

Dependiendo de la base de datos que usemos, debemos obtener los .jar jdbc y copiarlos dentro:

netbeans_home\enterprise2\jakarta-tomcat-5.5.7\common\lib


Configuración

  1. Para configurar el pool, buscamos el archivo context.xml, ubicado dentro de la carpeta META-INF de nuestro proyecto. Indicamos la configuración para el pool, colocando el nombre para el pool, el driver jdbc, la base datos, el usuario y password.


name="jdbc/avbravo"

type="javax.sql.DataSource"

driverClassName="org.postgresql.Driver"

password="postgres"

maxIdle="2"

maxWait="5000"

username="postgres"

url="jdbc:postgresql://localhost:5432/academicoazuero"

maxActive="4"/>















Figura del context.xml

























  1. Configurar el archivo web.xml, para permitir a nuestras clases java, usar el pool. Añadimos eñ resource-ref.



jdbc/avbravo

javax.sql.DataSource

Container




  1. Clases que usan el pool.

Definimos una clase que se encargue de manejar la conexión con el pool, y ejecutar las sentencias sql.

Crear el paquete com.avbravo.basedatos para la clase conexión y el paquete com.avbravo.usuarios para almacenar la clase del usuario.






/*

* conexion.java

*

* Created on 17 de noviembre de 2005, 08:58 AM

*

* To change this template, choose Tools | Template Manager

* and open the template in the editor.

*/


package com.avbravo.basedatos;


/**

*

* @author aristides

*/

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

import java.util.logging.Level;

import java.util.logging.Logger;

import java.sql.Statement;

public class conexion {

private Connection conn;

private Statement stmt;

private ResultSet rs;

private String myError="";

private Logger logger = Logger.getLogger("com.avbravo.basedatos");

/** Creates a new instance of conexion */

//PROPERTY myError

public String getError() {

return this.myError;

}

//PROPERTY: rs

public ResultSet getResultSet() {

return this.rs;

}

//carga el pool de conexiones

public boolean conectarPool(){

try{

Context ctx = new InitialContext();

if (ctx == null) {

this.myError ="No initial context";

return false;

}

DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/avbravo");

if (ds == null) {

this.myError= "No data source";

return false;

}

conn = ds.getConnection();

if (conn == null){

this.myError = "No connection";

return false;

}

return true;

}catch (SQLException ex) {

this.myError = "SQLException " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

} catch (NamingException ex) {

this.myError = "NamingException " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

} catch (Exception ex) {

this.myError = "Exception " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

}

}//conectarPool()

//ejecutarQuery(String)

//ejecuta una sentencia sql

public boolean ejecutarQuery(String sql) {

try{

if (sql.equals("")){

this.myError ="Sentencia sql vacia";

return false;

}

if (conectarPool() == false)

return false;

else {

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

rs = stmt.executeQuery(sql);

return true;

}

}catch (SQLException ex) {

this.myError = "SQLException " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

} catch (Exception ex) {

this.myError = "Exception " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

}

}//ejecutarQuery

//ejecutarUpdate(String)

//ejecuta una sentencia sql

public boolean ejecutarUpdate(String sql) {

try{

if (sql.equals("")){

this.myError ="Sentencia sql vacia";

return false;

}

if (conectarPool() == false)

return false;

else {

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

stmt.executeUpdate(sql);

return true;

}

}catch (SQLException ex) {

this.myError = "SQLException " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

} catch (Exception ex) {

this.myError = "Exception " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

return false;

}

}//ejecutarQuery

//cerrarPool()

//cierra el pool de conexiones

public void cerrarPool() {

try{

conn.close();

}catch (SQLException ex) {

this.myError = "SQLException " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

} catch (Exception ex) {

this.myError = "Exception " + ex.getMessage();

logger.log(Level.SEVERE, "loginAction", ex);

}

}

}//class

clase usuarios.

/*

* usuarios.java

*

* Created on 17 de noviembre de 2005, 09:02 AM

*

Comments

Unknown said…
Hola soy Mauricio Villa. Estoy hace días complicado con esto del pool. Podrías mostrar la clase Usuario que estas utilizando en el ejemplo.
Muchas gracias.
Unknown said…
Hola soy Mauricio Villa. Estoy hace días complicado con esto del pool. Podrías mostrar la clase Usuario que estas utilizando en el ejemplo.
Muchas gracias.
avbravo said…
Mauricio me puedes indicar tu email. Solo necesitas especificarlo dentro del tomcat, el código para manipular las aplicaciones web con visual web pack, ahorran mucho trabajo incluyendo el uso de DataProvider y RowSet.
Me he fijado que en el contexto se establece un usuario y contraseña para el acceso a la base de datos.
Pero ¿qué sucede si, a parte de la seguridad de la aplicacion, existe seguridad en la base de datos y cada usuario tiene acceso a solo determinadas tablas para lo que utiliza un usuario y password de base de datos propio?
En este caso, ya no sería util el pool de conexiones, ¿verdad?.
¿Se te ocurre alguna manera de optimizar la velocidad de conexión, etc... con la base de datos?

Gracias, Kike
Anonymous said…
necesito la clase usuarios.java por favor soy nuevo y no me sale el pool desde netbeans mi correo es kayba21@gmail.com gracias de antemano
Anonymous said…
hola
disculpa, podrias enviarme la clase usuarios a mi correo: jpmoralesf@hotmail.com
Muchas gracias
Unknown said…
Amigo, mi pregunta es si puedo utilizar el pool de conexiones cliente/servidor?
avbravo said…
te refieres a una aplicacion web con desktop
Andres said…
Hola soy Andrés Forero de Bogotá Colombia, quería pedirte un favor, quería saber como se hace la conexion a una base de datos mysql desde netbeans visual web pack 5.5.1 donde se introduzca un usuario y contraseña y se pueda acceder a otra pagina donde indique que el usuario existe en la base de datos. Si tienes un ejemplo me lo puedes enviar, por fa..., mi correo es anfefomu@gmail.com
Gracias.
Andres said…
Hola soy Andrés Forero de Bogotá Colombia, quería pedirte un favor, quería saber como se hace la conexion a una base de datos mysql desde netbeans visual web pack 5.5.1 donde se introduzca un usuario y contraseña y se pueda acceder a otra pagina donde indique que el usuario existe en la base de datos. Si tienes un ejemplo me lo puedes enviar, por fa..., mi correo es anfefomu@gmail.com
Gracias.
Andres said…
Hola soy Andrés Forero de Bogotá Colombia, quería pedirte un favor, quería saber como se hace la conexion a una base de datos mysql desde netbeans visual web pack 5.5.1 donde se introduzca un usuario y contraseña y se pueda acceder a otra pagina donde indique que el usuario existe en la base de datos. Si tienes un ejemplo me lo puedes enviar, por fa..., mi correo es anfefomu@gmail.com
Gracias.
Anonymous said…
Hola, felicitaciones por el articulo, me parece bastante util esto del pool de conexiones con netbeans e integrado con apache tomcat. Te agradeceria si me pudieras enviar la info a maurior@gmail.com, es que las imagenes no son muy legibles, y algunas no cargan en la ampliacion. Muchas gracias.
avbravo said…
amigo puedes escribirme a avbravo@gmail.com, tu email fue rechazado.
Con visual web, te permite utilizar las bases de datos de manera sencilla.
Anonymous said…
ramirocapiz@yahoo.com.ar

necesito las url para conectarme con los jdbc de SQL-pl/slqserver200x/oracle
y donde los encuentro.
todos configurados en SQLEXPLORER.

pliiis podrias darme consejos.
Anonymous said…
hola soy nuevo en java, deseo instalar apache roller en un ubuntu server con glassfish no tengo netbeans instalado, mi pregunta es la siguiente tengo que crear un Pool de conexiones para cada aplicación intalada en mi ubuntu por ejemplo si instalo 10 veces la aplaicación apache roller con diferente usuario tengo que crearle un pool de conexion a cada una o ya no se le puede crear un pool de conecciones ya que apache roller es una aplicacion ya creada.
Anonymous said…
hola soy nuevo en java, deseo instalar apache roller en un ubuntu server con glassfish no tengo netbeans instalado, mi pregunta es la siguiente tengo que crear un Pool de conexiones para cada aplicación intalada en mi ubuntu por ejemplo si instalo 10 veces la aplaicación apache roller con diferentes usuarios tengo que crearle un pool de conexion a cada una, o ya no se le puede crear un pool de conecciones ya que apache roller es una aplicacion ya creada.
Anonymous said…
Hello Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.
omarend said…
Amigo favor la ayuda en terminar la clase de usuarios ... ya que no se me ocurre como termina el tema , gracias. (omarend@gmail.com)
omarend said…
Amigo, favor la ayuda en enviar la clase usuario y que mas se debe hacer para testiar lo creado, gracias. omarend@gmail.com