Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Consulta Pool de conexiones Java

Estas en el tema de Consulta Pool de conexiones Java en el foro de Java en Foros del Web. Buen día, quisiera implementar un pool de conexiones jdbc a una base de datos mysql. Leyendo en Internet he encontrado varias formas de hacerlo, dos ...
  #1 (permalink)  
Antiguo 17/03/2015, 12:58
Avatar de apomaresa  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Consulta Pool de conexiones Java

Buen día, quisiera implementar un pool de conexiones jdbc a una base de datos mysql.
Leyendo en Internet he encontrado varias formas de hacerlo, dos de ellas me llamaron fuertemente la atención. Pero no se cual es la mas adecuada o si da lo mismo de las 2 formas.

De la primera forma:
Se edita el archivo context.xml en Tomcat agregando un "resource" que contenga los parámetros de conexión a la base de datos (user,pass,url,driverclassname) y los parámetros que manejan el numero de conexiones activas etc.

Del lado del código se edita el web.xml del proyecto y se agrega un "resource-ref", que obtiene un datasource del Tomcat y de ese datasource obtiene una conexión y sobre ella se realizan las operaciones SQL.

De la segunda forma:
En el proyecto se crea una clase java (conexion.java) en esta se crea un atributo de tipo DataSource el cual se inicializa con los parametros de conexión a la base de datos (user,pass,url,driverclassname) y los parámetros que manejan el numero de conexiones activas etc.

Luego en otra clase del proyecto creo una instacia de la clase conexion.java y obtengo el atributo DataSource y sobre el utlizo el metodo getConection y obtengo una conexión del pool y sobre ella se realizan las operaciones SQL.

¿Cual de las formas es mejor?
Si utilizo la segunda forma, ¿que ocurre al instanciar varias veces la clase conexion.java, se crean varios pool?

Estoy muy confundido en este tema si alguien me puede explicar se lo agradecería enormemente.
  #2 (permalink)  
Antiguo 17/03/2015, 14:40
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Consulta Pool de conexiones Java

Cita:
¿Cual de las formas es mejor?
Si utilizo la segunda forma, ¿que ocurre al instanciar varias veces la clase conexion.java, se crean varios pool?
Pues dependiendo de cómo lo hagas, sí, podrías crear varios pool de conexiones.

Con respecto a tu otra duda, pues cada una tiene sus ventajas e inconvenientes, aunque la tendencia es hacerlo en el servidor.

Si lo haces en el servidor, liberas a tu código de esa tarea, puedes cambiar de base de datos o propiedades del pool sin tener que desplegar o compilar tu proyecto de nuevo y un mismo pool se comparte fácilmente entre varias aplicaciones.

Como única ventaja de hacerlo en la aplicación ahora sólo se me ocurre que no necesitas acceso al servidor.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 17/03/2015, 15:02
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Consulta Pool de conexiones Java

Hola:

Si sólo esa aplicación usa esa base de datos, puedes poner el pool directamente en tu aplicacion web (la segunda forma).

La primera forma es mejor si vas a tener varias aplicaciones que usen la misma base de datos. Aparte de las ventajas que indica Xerelo hay otra ventaja importante. Normalmente una base de datos admite un número máximo de conexiones simultáneas, así que si vas creando pools en cada una de tus aplicaciones web particulares, en cuanto crezcas un poco puedes llegar a ese tope.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 17/03/2015, 17:50
Avatar de apomaresa  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Consulta Pool de conexiones Java

Gracias por sus respuestas ahora me queda un poco mas claro cuando utilizar cada forma.

Termine optando por la opción 1, lo que hice fue crear una clase java(SQLexe.java) que se encargue de recibir el datasource mediante la función initContext.lookup("java:/comp/env/jdbc/ConexionMySQL"), obtener una conexión y ejecutar sobre esta las consultas SQL.

Pero sigo creando instancias de esta clase (SQLexe.java) para poder ejecutar las consultas, me pregunto si eso estará bien??.

Me explico si necesito ejecutar un SQL en un Servlet, creo una instancia de SQLexe.java y sobre esta ejecuto las consultas.

Código:
package Modelo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

/**
 *
 * @author Abel Pomares Agamez
 */

public class SQLexe {

    private Context initContext;
    private Statement st = null;
    private ResultSet rs = null;
    private DataSource dataSource;

    public SQLexe() {
        Conectar();
    }

    public void Conectar() {

        try {

            initContext = new InitialContext();
            dataSource = (DataSource) initContext.lookup("java:/comp/env/jdbc/ConexionMySQL");

        } catch (Exception e) {
            System.out.print("Error al conectar.");
        }
    }

    
    public boolean insertar(String SQL) throws Exception {
        
        Connection conexion = null;
        boolean s = false;
        try {

           
            conexion = dataSource.getConnection();
           
            if (conexion != null) {

                Statement ps = conexion.createStatement();
                ps.executeUpdate(SQL);
                s = true;
            } else {
                s = false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            liberaConexion(conexion);
        }
        return s;
    }
    
    public ArrayList consultar(String consulta) {
        Connection conexion = null;
        ArrayList results = new ArrayList();
        try {
            conexion = dataSource.getConnection();
            Statement sentencia = conexion.createStatement();
            rs = sentencia.executeQuery(consulta);

            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();
            

            while (rs.next()) {
                HashMap row = new HashMap();
                results.add(row);

                for (int i = 1; i <= columns; i++) {
                    row.put(md.getColumnName(i), rs.getObject(i));
                }
            }
            
        } catch (SQLException e) {
            System.out.println("Error en la consulta: " + e);
        } finally {

            liberaConexion(conexion);
        }
    return results;
    }

    private void liberaConexion(Connection conexion) {
        try {
            if (null != conexion) {
// En realidad no cierra, solo libera la conexion.
                conexion.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


}
  #5 (permalink)  
Antiguo 18/03/2015, 13:44
Avatar de apomaresa  
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Consulta Pool de conexiones Java

Hola, leyendo y buscando conseguí esto en la pagina de Tomcat, explican como se debe realizar el pool según tus necesidades, como configurarlo y como utilizarlo.

Les dejo el link para el que tenga las mismas dudas:
http://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html

Etiquetas: clase, conexiones, pool, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.