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

Popular posts from this blog

Tutorial básico de aplicaciones Web con NetBeans parte 1

NetBeans ofrece un excelente soporte para el desarrollo de aplicaciones Web, en esta ocasión lo haremos utilizando el Framework Java Server Faces 2.0. En el Menu Seleccionamos Nuevo->Proyecto y luego en Categorias Java Web y en tipo de Proyectos Web  Application indicamos el nombre del proyecto Seleccinamos el servidor Web, usamos GlassFish ya que este soporta EJB3.0 y JSF 2.0 Framework Java Server Faces El IDE genera el esquelto del proyecto Web Pages   almacenamos las paginas .html, xhtml, jsf, los archivos de recursos, los scripts .js, imagenes Source Packages    Son las clases Java  Test Packages    Son las clases que usamos para los Test Libraries     Tenemos las bibliotecas de Java y GlassFish necesarias para ejecutar la aplicación Web. Test Libraries     Están las bibliotecas usadas para los test  Configuration Files    Archivos de configuración de la aplicación. Ejecutamos la...

Incrementar Memoria NetBeans

Algunas veces necesitamos incrementar la memoria para un mejor rendimiento. http://www.netbeans.org/community/releases/55/uml-download.html Este es un ejemplo para UML. Descripción en ingles. Increasing Memory Settings (applicable to all builds) The default memory settings for NetBeans should be increased for UML projects. If you have the available memory, Locate your NetBeans installation directory ($install_dir). This can be found by starting up NetBeans and selecting Help -> About then select the Detail tab. Edit the $install_dir/etc/netbeans.conf file. Find the line defining netbeans_default_options . Increase the maximum memory attribute to -J-Xmx512m. If you experience heap overflows while working with larger files, you should increase this value further.

Cambiando el estado de un checkbox

Cambiando el Estado de un CheckBox Algunas veces deseamos controlar el estado de un checkbox o cambiarlo segùn determinadas condiciones. Pasos: 1. Creamos un proyecto Web. 2. En el diseñador agregamos un checkbox y dos botones. * Dar click derecho en el checkbox y luego seleccionar Add Binding Attribute, para agregar los atributos al checkbox, de manera que los podamos usar en nuestro código. Generando automáticamente private Checkbox checkbox1 = new Checkbox(); public Checkbox getCheckbox1() { return checkbox1; } public void setCheckbox1(Checkbox c) { this.checkbox1 = c; } 3.Damos click derecho en el botón Habilitar, y seleccionamos Edit Action Event Handler. A continuación, agregamos el código: this.checkbox1.setSelected(true);, el método setSelected con valor true, marca el checkbox como seleccionado, y un valor de false, quita la marca. public String button1_action() { // TODO: Process the action. Return value is a navigation // ...