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.
