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,
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 originalpublic static _ClienteDao getClienteDao
(Connection con
){ if(clienteDao==null)
clienteDao=new _ClienteDaoImpl(con);
return clienteDao;
}
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,
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.