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

Cerrar conexion con JAVA

Estas en el tema de Cerrar conexion con JAVA en el foro de Java en Foros del Web. Hola a tod@s .... Tengo una aplicacion en JAVA que se conecta a una base de datos ORACLE a través de una Datasource... en el ...
  #1 (permalink)  
Antiguo 23/09/2011, 13:34
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Busqueda Cerrar conexion con JAVA

Hola a tod@s ....

Tengo una aplicacion en JAVA que se conecta a una base de datos ORACLE a través de una Datasource... en el pool tiene 25 conexiones permitidas como máximo, pero se me ha estado cayendo y algunas veces indica que las conexiones están completas cuando solo hay 2 o 3 usuarios conectados.

Pensé que depronto me habia quedado faltando en alguna sentencia cerrar la conexion pero veo que siempre está el llamado a la funcion, entonces no se que puede ser.... que me recomiendan???

Este es mi cod para cerrar las conx
Código:
public void cerrarConexion() throws ConnectionException {
	  	try {
		   con.close();
		}catch (SQLException  sqle) {
			throw new ConnectionException("Ha ocurrido un error al intentar cerrar la conexion con Oracle. Error:" + sqle.getMessage());                                   
		}
	}
Tks
__________________
Gabo Duk3
I.S
  #2 (permalink)  
Antiguo 23/09/2011, 13:55
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Cerrar conexion con JAVA

Sólo falta saber si llamas siempre que es necesario a cerrarConexion().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 23/09/2011, 14:34
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Cerrar conexion con JAVA

Cita:
Iniciado por chuidiang Ver Mensaje
Sólo falta saber si llamas siempre que es necesario a cerrarConexion().

Se bueno.
Si... acabo de revisar todo el código y siempre lo llamo
__________________
Gabo Duk3
I.S
  #4 (permalink)  
Antiguo 23/09/2011, 14:51
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Cerrar conexion con JAVA

Cita:
Iniciado por gabrican Ver Mensaje
Si... acabo de revisar todo el código y siempre lo llamo
¿La aplicación no te muestra ninguna excepción al llamar a cerrarConexion?
¿Te aseguraste que la referencia de la conexion, con, este seteada correctamente y pueda ser accedido desde tu metodo?
  #5 (permalink)  
Antiguo 23/09/2011, 15:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Cerrar conexion con JAVA

Las llamadas a cerrarConexion() deberías ponerlas en los finally del try-catch. ¿Lo haces así?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 23/09/2011, 17:51
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Cerrar conexion con JAVA

Cita:
Iniciado por Ronruby Ver Mensaje
¿La aplicación no te muestra ninguna excepción al llamar a cerrarConexion?
¿Te aseguraste que la referencia de la conexion, con, este seteada correctamente y pueda ser accedido desde tu metodo?
Hola...
Con respecto a la excepción no muestra nada... y en el trace del servidor tampoco aparece... y la referencia tambien esta bien seteada:

Código:
public class Conexion {
	
	private static Connection con;
	
	public Connection conectarBD()throws ConnectionException {
        
		try {
			InitialContext initialContext = new InitialContext();
			DataSource ds =(DataSource)initialContext.lookup("jdbc/ds");

			try {
				con = ds.getConnection();
				Statement statement = con.createStatement();
				
			}catch (SQLException sqle) {
				System.out.println("Error obteniendo la conexión en ConexionDAO: "+sqle.getMessage());
			}
		}catch (NamingException ne) {
			System.out.println("Error en el método getConnection() de la clase ConexionDAO: "+ne.getMessage());
		}
		return con;
	}
				
	public static Connection getInstance(){
		return con;
	}

	
	public void cerrarConexion() throws ConnectionException {
	  	try {
		   con.close();
		}catch (SQLException  sqle) {
			throw new ConnectionException("Ha ocurrido un error al intentar cerrar la conexion con Oracle. Error:" + sqle.getMessage());                                   
		}
	}
__________________
Gabo Duk3
I.S
  #7 (permalink)  
Antiguo 23/09/2011, 17:54
Avatar de gabrican  
Fecha de Ingreso: junio-2008
Ubicación: Medellin
Mensajes: 89
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Cerrar conexion con JAVA

Cita:
Iniciado por chuidiang Ver Mensaje
Las llamadas a cerrarConexion() deberías ponerlas en los finally del try-catch. ¿Lo haces así?

Se bueno.
Hola...

Mira tal cual estan....

Código:
public Vector consultarEmpresar(String valor) throws ConnectionException{
		Vector empresas= new Vector();
			
		try{				
			EmpresaDTO empresa;
			PreparedStatement ps;
			ResultSet rslt;
			String sql = null;
			conectar();
			
			sql="select * from tabla";
			ps = conexion.prepareStatement(sql);
			
			ps.setString(1, "%"+valor+"%");
			rslt = ps.executeQuery();			
			
			while (rslt.next()) {
				empresa = new EmpresaDTO();
...
...
...
...
...			}
			
			/* Cierra conexiones establecidas */
			ps.close();
			cerrarConexion();
							
		}catch(SQLException e){
			e.printStackTrace();
		}
			
		return empresas;
	}
__________________
Gabo Duk3
I.S
  #8 (permalink)  
Antiguo 24/09/2011, 04:18
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Cerrar conexion con JAVA

Hola:

Es dificil de entender y ver el error. En el último trozo de código que has puesto obtienes una conexion no se sabe cómo a la que llamas conexion. El cerrrarConexion cierra un static con qu está en la clase Conexion. ¿Está el método consultarEmpresa también en la clase Conexion? ¿Estas totalmente seguro que ese conexion que tienes en consultarEmpresa es el mismo que el que tienes guardado en el static con de la clase Conexion?

Por otro lado, La clase Conexion tiene un método conectarBD no estático que es el que establece conexión y la guarda en con. No veo dónde llamas a eso, pero cada llamada a conexionBD "machaca" la conexión anterior que hubiera almacenada en Conexion.con. Es posible que por ahí se te queden sin cerrar, ya que la llamada a cerrarConexion() cerrrará la última obtenida, pero no puede nunca cerrar las anteriores si han sido "machacadas".

Mi consejo es que no guardes con en static ni en ningún lado. Haz el método conectarBD() estático, que devuelva una Connection y que el que la pida se encargue de cerrarla. Puedes poner el método cerrarConexion en Conexion también static, pero que cierre la conexión que le pasen por parámetro.

Código java:
Ver original
  1. public void consultaEmpresa () {
  2.    Connection conexion = null;;
  3.    try {
  4.        conexion = Conexion.conectarBD();
  5.        // aquí tus SQL
  6.    } catch (Exception e) {
  7.       e.printStackTrace();
  8.    } finally {
  9.         Conexion.cerrarConexion(conexion);
  10.    }
  11. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: cerrar, conexion, sql, aplicaciones
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 21:13.