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

Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Estas en el tema de Problema con cierre de conexiones a la BD (JSP <-> MySQL) en el foro de Java en Foros del Web. Hola, tengo un problema que me tiene desesperado, y es el tema del cierre de conexiones con la BD. Resulta que tengo una web en ...
  #1 (permalink)  
Antiguo 11/08/2008, 11:08
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 4 meses
Puntos: 2
Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Hola, tengo un problema que me tiene desesperado, y es el tema del cierre de conexiones con la BD. Resulta que tengo una web en la que funciona todo correctamente, pero no se que hago mal que las conexiones no se cierran, a ver si me podeis echar una mano. Os muestro mi servlet FrontController:

Código:
package servlets;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import proyecto.GestorUsuario;
import proyecto.Usuario;

public class FrontController extends HttpServlet {

	private static final long serialVersionUID = 1L;

	String user=null;
	/*	String passwd = "practica";	
	int numVeces = 0;
*/
	GestorUsuario gu = new GestorUsuario();
	
	public void init() throws ServletException {
	}

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	public void processRequest(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
		if (logado(request)) {
			String resource = request.getParameter("res");
			RequestDispatcher d = request.getRequestDispatcher(resource);
			d.forward(request,response);
			System.out.println("LOGADO ACCEDIENDO A " + resource);
		} else {
			response.sendRedirect("error.html");
		}
	}

	private boolean logado(HttpServletRequest request) {
		boolean logado = false;

		HttpSession session = request.getSession(false);

		String userForm = request.getParameter("user");
		String passwdForm = request.getParameter("passwd");
		
		if (session == null) {
			session = request.getSession();
			if (userForm == null || passwdForm == null
					|| userForm.length() == 0 || passwdForm.length() == 0) {
				logado = false;

			} else {
				if (valido(userForm, passwdForm)) {
					logado = true;
					session.setAttribute("session.user", userForm);
				} else {
					logado = false;
				}

			}

		} else {
			if (userForm == null || passwdForm == null) {
				logado = true;
			} else {
				if (valido(userForm, passwdForm)) {
					logado = true;
					session.setAttribute("session.user", userForm);
				} else {
					logado = false;
				}

			}
		}
		return logado;
	}

	public boolean valido(String userForm, String passwdForm) {
		boolean res =false;
		Usuario u =gu.mostrarUsuario(userForm);
		if (u!=null)		
			res= (u.getNick().equals(userForm)&& u.getContraseña().equals(passwdForm));
		return res;
	}

}
Mi clase ConnectionManager:

Código:
package data;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class ConnectionManager {
    private static ConnectionManager cm;
    private Driver dBDriver = null;
    private static Properties dbprops = new Properties();
    
    
      private ConnectionManager() {
       

      try {
    	  InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("dbconfiguration.properties"); 
    	  dbprops.load(is);
    	  //dbprops.load(new FileInputStream("dbconfiguration.properties"));
	} catch (Exception e1) {
		System.err.println("El fichero de propiedades de la BDs no se ha encontrado");
		e1.printStackTrace();
	}

     try {
            String driverName =  dbprops.getProperty("driverName");
        	dBDriver = (Driver) Class.forName(driverName).newInstance();
            DriverManager.registerDriver(dBDriver);
        } catch (Exception e) {
            System.err.println("Unable to register JDBC Driver");
            e.printStackTrace();
        }
    }

    public static synchronized ConnectionManager getInstance() {
        if (cm == null) {
            cm = new ConnectionManager();
        }
        return cm;
    }

    public Connection checkOut() {
        Connection conn = null;

        try {
        	String uri = dbprops.getProperty("dBUri");
        	String user = dbprops.getProperty("username");
        	String passwd  = dbprops.getProperty("password");
            conn = DriverManager.getConnection(uri,user ,passwd);
        } catch (Exception e) {
            System.err.println("Unable to open a new JDBC connection");
            e.printStackTrace();
        }

        return conn;
    }

    public void checkIn(Connection conn) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    protected void finalize() {
        try {
            DriverManager.deregisterDriver(dBDriver);
        } catch (SQLException e) {
            System.err.println("Unable to deregister JDBC driver");
            e.printStackTrace();
        }

    }
}
Y por ultimo uno de los metodos que usan la BD, los demas los tengo todos hechos del mismo estilo:

Código:
	public Usuario selectUsuario(String nick) {
		PreparedStatement stmt = null;
        ResultSet result = null;
        Usuario u = null;
        String sql = "SELECT * FROM Usuarios WHERE (OID = ?) ";
        String usuarioOID = this.selectOIDOfUsuario(conn, nick);
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, usuarioOID);
            result = stmt.executeQuery();

            if(result.next()){
            	u = new Usuario();
                u.setNumSocio(result.getInt("numSocio"));
            	u.setNick(result.getString("nick"));
            	u.setContraseña(result.getString("contraseña"));
            	u.setNombre(result.getString("nombre"));
            	u.setApellidos(result.getString("apellidos"));
            	u.setEmail(result.getString("email"));
            	u.setSexo(result.getString("sexo"));
            	u.setCiudad(result.getString("ciudad"));
            	u.setAdministrador(result.getString("administrador"));
            	u.setNumAciertosSemanaAnterior(result.getInt("numAciertos"));
            	u.setNumVictorias(result.getInt("numVictorias"));
            }
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }
        return u;
	}
A ver si me podeis arrojar algo de luz porque ya no se por donde meterle mano :S

Gracias de antemano.
  #2 (permalink)  
Antiguo 11/08/2008, 12:56
 
Fecha de Ingreso: agosto-2008
Ubicación: Cajamarca
Mensajes: 49
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Hola JuaNiNNaio,

No tengo una solucion para tu problema, pero tengo un consejo : usa un framwork como iBatis o Hibernate con Spring. Estos frameworks hacen todo para las conecciones a las bases.

Cimballi
  #3 (permalink)  
Antiguo 11/08/2008, 15:54
Avatar de Felippe  
Fecha de Ingreso: octubre-2006
Mensajes: 54
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Secundo la mocion de Cimbali, usa algun framework de persistencia.
  #4 (permalink)  
Antiguo 12/08/2008, 00:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Igualmente, con el codigo que muestras no podemos saber cual es tu problema, ya que no está todo y no están las partes más importantes, que es donde obtienes las conexiónes y las devuelves.

Es decir, en selectUsuario no se muestra como se llama a checIn y checkOut, así que no sabemos si se devuelven o no las conexiones.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 12/08/2008, 01:58
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Cita:
Iniciado por Cimballi Ver Mensaje
Hola JuaNiNNaio,

No tengo una solucion para tu problema, pero tengo un consejo : usa un framwork como iBatis o Hibernate con Spring. Estos frameworks hacen todo para las conecciones a las bases.

Cimballi
Vale lo he solucionado, al final era que creaba una conexion general en cada clase del DAO, lo que he hecho es crear una conexion al empezar cada metodo, y cerrarla justo al salir, asi parece que funciona sin ningun problema.

Cimballi, eso que dices de Hibernate... me interesaria introducirme en el tema, la cuestion es que no se por donde empezar ¿Me aconsejas algun tuto/web interesante?

Gracias a Felippe y GreenEyed por sus respuestas también.

Un saludo amigos!
  #6 (permalink)  
Antiguo 12/08/2008, 06:49
 
Fecha de Ingreso: agosto-2008
Ubicación: Cajamarca
Mensajes: 49
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Para Hibernate :
http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html#tutorial-firstapp

Para Hibernate con Spring :
http://static.springframework.org/spring/docs/2.0.x/reference/orm.html#orm-hibernate-straight

Te consejo de usar Spring y Hibernate, es el mas facil para mi. Spring hace las conecciones et las transacciones.

Cimballi
  #7 (permalink)  
Antiguo 12/08/2008, 09:52
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Problema con cierre de conexiones a la BD (JSP <-> MySQL)

Muchisimas gracias, me pondre con ello!
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 03:05.