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

pool de conexiones mysql (con código)

Estas en el tema de pool de conexiones mysql (con código) en el foro de Java en Foros del Web. Hola a todos, mi problema es el siguiente: para optimizar el acceso a la base de datos mysql de la que dispongo, he decidido crear ...
  #1 (permalink)  
Antiguo 15/06/2007, 09:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 34
Antigüedad: 17 años, 1 mes
Puntos: 1
Mensaje pool de conexiones mysql (con código)

Hola a todos, mi problema es el siguiente:
para optimizar el acceso a la base de datos mysql de la que dispongo, he decidido crear un pool de conexiones, este es el código que he utilizado:
Estoy trabajando con java, concretamente con jsp, y este es el javascript:


import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class poolBaseDatos extends HttpServlet

{
private DataSource fuenteDatos = null;

public void init(ServletConfig config) throws ServletException
{
try
{
// recuperamos el contexto inicial y la referencia a la fuente de datos
Context ctx = new InitialContext();
fuenteDatos = (DataSource) ctx.lookup("java:comp/env/jdbc/tutoriales");
}
catch (Exception e)
{
throw new ServletException("Imposible recuperar java:comp/env/jdbc/tutoriales",e);
}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Connection con = null; // conexion parcial

response.setContentType("text/html"); // retornamos el tipo de respuesta
PrintWriter out = response.getWriter();

out.println("Prueba del Pool de Objetos");
out.println("Buscamos tutorial con sentencias preparadas");

try {

out.println("Probamos a recuperar conexión");

synchronized (fuenteDatos)
{
con = fuenteDatos.getConnection(); // cogemos la conexion
}

if(con == null)
{
out.println("Error al recuperar la conexion, es nula");
throw new ServletException("Problemas con la conexion");
}

out.println("Preparamos la consulta");

PreparedStatement pstmt = con.prepareStatement("SELECT * FROM tutoriales WHERE id < ?");
pstmt.setInt(1,10); // establecemos el entero
ResultSet results = pstmt.executeQuery();

while (results.next())
{
String id = results.getString(1);
String titulo = results.getString(2);
out.println("El titulo es " + titulo + " para id " + id + "");
}
}
catch (Exception e)
{
out.println("Error al procesar consulta " + e.getMessage());
}
finally // pase lo que pase retornamos la conexion
{
try
{
con.close();
}
catch (Exception e)
{
out.println("Error en proceso " + e.getMessage());
}
}
out.println("-Fin-"); // cerramos la respuesta
out.close(); // Cerramos buffer
}
}


El fichero web.xml está modificado acorde a este javascript también.

¿para poder utilizar este pool de conexiones debo dejar este servlet e invocarle, o no me sirve para nada y en cada clase que vaya a utilizar la base de datos tengo que poner el mismo código del servlet?
¿Alguien podría darme un ejemplo concreto de utilización del pool de conexiones?
Muchísimas gracias a todos por leerlo.

Última edición por veroman; 15/06/2007 a las 09:53
  #2 (permalink)  
Antiguo 15/06/2007, 22:27
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: pool de conexiones mysql (con código)

Trasladado de BD a Java y JPS.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 16/06/2007, 02:51
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 19 años, 11 meses
Puntos: 0
Re: pool de conexiones mysql (con código)

Yo te cuento como tengo definido mi pool de conexión. En mís métodos tengo:

Código PHP:
....
Context initCtx = new InitialContext();
Context envCtx = (ContextinitCtx.lookup("java:comp/env");

DataSource ds = (DataSourceenvCtx.lookup("jdbc/dsPYC");
con ds.getConnection();
    
ps con.prepareStatement("SELECT NOMBRE FROM TABLA WHERE ID=?");
.... 

Mi fichero server.xml tiene:
<resource-ref>
<description>Elemento necesario para configurar un datasource en server.xml de Tomcat</description>
<res-ref-name>jdbc/dsPYC</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


Y finalmente defino un Contexto en el fichero server.xml de Tomcat:

<Context path="/tuApp" docBase="tuApp" debug="0" reloadable="false">

<Resource name="jdbc/dsPYC"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="usu"
password="pass"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/tuBD?autoReconnect=true"/>
.....



Espero que te sirva de algo.

Un saludo.
  #4 (permalink)  
Antiguo 16/06/2007, 03:46
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: pool de conexiones mysql (con código)

Sólo para aclarar, Veroman, eso que muestras no es JavaScript. Es Java.

S!
  #5 (permalink)  
Antiguo 16/06/2007, 06:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 34
Antigüedad: 17 años, 1 mes
Puntos: 1
Re: pool de conexiones mysql (con código)

Gracias por la aclaración, perdón por confundir términos, al fin y al cabo es java. Y sobre todo gracias a Rascayu, en cuanto lo intente comentaré si me ha sido de ayuda o si tengo algún problema, porque no utilizo PHP, y tendré que adaptar el código.
Muchas gracias de nuevo
  #6 (permalink)  
Antiguo 16/06/2007, 08:46
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: pool de conexiones mysql (con código)

No te confundas por el texto que dice "codigo PHP". En realidad es un bug del foro y debería poner unicamente "codigo". Ese es concreto es código Java.

S!
  #7 (permalink)  
Antiguo 10/07/2007, 11:20
 
Fecha de Ingreso: marzo-2007
Mensajes: 34
Antigüedad: 17 años, 1 mes
Puntos: 1
gracias

Siento mucho haber tardado tanto en contestar.
Todo lo que me dejaste funcionó bien, así que ya tenemos nuestro pool funcionando.
Muchas gracias y un saludo.
  #8 (permalink)  
Antiguo 10/07/2007, 12:43
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: pool de conexiones mysql (con código)

Sólo un detalle, la parte en la que sincronizas el acceso a fuenteDatos para obtener una conexion no es realmente necesaria. El resto del codigo es correcto y es la forma apropiada de hacerlo (try/catch/finally) para no perder conexiones.



S!
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 18:25.