cerrar la conexion en un bean con scope=session
buenas.
estoy programando una aplicacion que utiliza varios beans y jsps. uno de los beans tiene scope=session durante toda la aplicacion y en el constructor abre una conexion a una BD. sin embargo, al finalizar la aplicacion me gustaria poder cerrar esa conexion y no se como. alguien me puede ayudar?
gracias, agur
estoy programando una aplicacion que utiliza varios beans y jsps. uno de los beans tiene scope=session durante toda la aplicacion y en el constructor abre una conexion a una BD. sin embargo, al finalizar la aplicacion me gustaria poder cerrar esa conexion y no se como. alguien me puede ayudar?
gracias, agur
Bien, en primer lugar debes usar la especificacion de Java Servlets 2.3. Crea una clase que implemente la interfaz HttpSessionListener. Esta clase tiene un método que se invoca automáticamente al cerrar la sesion. Envíame un mail y te explico en detalle.
pd.
El metodo de HttpSessionListener es public void sessionDestroyed(HttpSessionEvent e) . En el debes cerrar la conexion, Lo ideal es que tu oyente de Sesiones sea un Bean con alcance de aaplicacion scope='application'.
pd.
El metodo de HttpSessionListener es public void sessionDestroyed(HttpSessionEvent e) . En el debes cerrar la conexion, Lo ideal es que tu oyente de Sesiones sea un Bean con alcance de aaplicacion scope='application'.
Aupa.
Puedes crear un metodo en el Bean, ejem:
public void CerrarCon()
{
nombre_conexion.close();
}
En el jsp
<% nombre_Bean.CerrarCon();%>
Es una forma, a mi no me gusta. Prefiero abrir la conexion, sacar los datos, enviarlas al jsp y luego cerrar la conexion.
agur
Puedes crear un metodo en el Bean, ejem:
public void CerrarCon()
{
nombre_conexion.close();
}
En el jsp
<% nombre_Bean.CerrarCon();%>
Es una forma, a mi no me gusta. Prefiero abrir la conexion, sacar los datos, enviarlas al jsp y luego cerrar la conexion.
agur
aupa
eskerrik asko erantzuteagatik. el problema es que el bean tiene scope=session y si cierro la conexion y luego voy a otra pagina no se ejecuta el constructor del bean (y la conexion esta cerrada). he probado a implementar el metodo finalize() pero no se si funciona muy bien.
lo que dices tu tambien he probao. lo que pasa es que ese bean comparte datos con otros beans con scope=page, incluida la propia conexion, y la conexion debe permanecer abierta.
de todas formas eskerrik asko.
agur
eskerrik asko erantzuteagatik. el problema es que el bean tiene scope=session y si cierro la conexion y luego voy a otra pagina no se ejecuta el constructor del bean (y la conexion esta cerrada). he probado a implementar el metodo finalize() pero no se si funciona muy bien.
lo que dices tu tambien he probao. lo que pasa es que ese bean comparte datos con otros beans con scope=page, incluida la propia conexion, y la conexion debe permanecer abierta.
de todas formas eskerrik asko.
agur
Bien, en vez de usar el constructor para hacer la conexion, crea un metodo para hacer la conexion.
El constructor se ejecuta cuando creas el objeto y creo que tu lo haces una vez en toda la aplicacion.
es cuestion de probar.
El constructor se ejecuta cuando creas el objeto y creo que tu lo haces una vez en toda la aplicacion.
es cuestion de probar.
Existe una interfaz q se llama HttpSessionBindingListener
la cual debes implemetar desde el Bean. La cual te cierra la conexion al cerrar el navegador. Por van los tiros yo por hay ando, tengo un problemilla de ese estilo asi q si consigues algo te agradeceria q me mandaras algo
la cual debes implemetar desde el Bean. La cual te cierra la conexion al cerrar el navegador. Por van los tiros yo por hay ando, tengo un problemilla de ese estilo asi q si consigues algo te agradeceria q me mandaras algo
El tema es que cerrar el navegador no hace que se cierre tu sesión en el servidor. Si se cierra el navegador la sesión se cerrará recién cuando llegue al timeout establecido. Para liberar recursos lo que hemos hecho es tener en todas las paginas un Logout que cierra la sesión y libera recursos y para los usuarios "rebeldes" que cierran directamente el browser tenemos una implementación de la interfaz HttpSessionListener. A estos listeners se les notifica sobre eventos de creación y destrucción de los objetos HttpSession, entonces en el método sessionDestroyed(HttpSessionEvent se) podrías liberar los recursos. De todas maneras, coincido con alguna respuesta anterior que menciona que lo ideal sería obtener y liberar la conexion a la DB cada vez que terminas de ejecutar un método.