cerrar la conexion en un bean con scope=session

aitor
28 de Septiembre del 2004
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

guavita
28 de Septiembre del 2004
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'.

imaz
28 de Septiembre del 2004
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

aitor
28 de Septiembre del 2004
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

imaz
28 de Septiembre del 2004
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.

Ruben
28 de Septiembre del 2004
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

maramonar
28 de Septiembre del 2004
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.