Ver Mensaje Individual
  #17 (permalink)  
Antiguo 16/10/2009, 20:28
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: Conexion Cerrada ayuda

Hola christmetal,

Bueno, ahora es un poco diferente, y viendo el código es un poco más evidente el problema,

En la clase _ClienteDaoImpl guardas la conexión para usarla posteriormente, en otras palabras _ClienteDaoImpl siempre quiere usar la misma conexión,

Código Java:
Ver original
  1. private Connection con;
  2.     public _ClienteDaoImpl(Connection con){
  3.         this.con=con;
  4.     }

Y como en la clase _ClienteLogic tienes un Factory de ClienteDAO que siempre devuelve el mismo Objeto de acceso a datos, siempre usa la misma conexión y después de abrirla, usarla y cerrarla la primera vez, la siguiente vez regresa una conexión cerrada.

Código Java:
Ver original
  1. public static _ClienteDao getClienteDao(Connection con){
  2.         if(clienteDao==null)
  3.             clienteDao=new _ClienteDaoImpl(con);
  4.         return clienteDao;
  5.     }

Ahora bien, como me mencionaron a mí en otro post, no hay que ser tan puristas con la implementación, pero evidentemente tu diseño está bastante mal.

La solución fácil es 'no cerrar la conexión', puesto que la vas a seguir usando durante todo el programa,

Código Java:
Ver original
  1. /*if(con!=null)
  2.                 con.close();*/

La solución difícil, rediseñar tu aplicación para que realmente implementes una buena estructura de acceso a las conexiones, es decir '_ClienteDaoImpl' no debe guardar la conexión para su uso posterior, es el Factory 'public static Connection getConnection()' el encargado de abrir la conexión, guardarla y regresar siempre la misma, y al final del programa cerrar la conexión,

Saludos,

ps:

Yo uso diferentes conexiones en la capa de DA, es decir, abro y cierro cada conexión que uso para cada instrucción, cuando se trata de MSSQL, puesto que de por sí, MSSQL tiene un pool de conexiónes que reusa y no consume tantos recursos, aunque la aplicación no esté ejecutándose dentro de un servidor de aplicaciones.