2012-09-04 24 views
6

Tengo una aplicación JSF que, en un bean administrado, llama a la lógica empresarial desde un bean de sesión con estado remoto (EJB 3.0).¿Pueden los beans de sesión con estado provocar una fuga cuando no se llama al método @Remove anotado?

En este momento hay un HttpSessionListener que llama a un método anotado @Remove en ese bean de sesión con estado, de modo que el bean de sesión con estado puede ser eliminado por el contenedor tan pronto como se destruya la HttpSession.

Ahora me pregunto qué sucede si no llamo a ese método anotado @Remove y la HttpSession se destruye. El cliente del bean de sesión con estado no existe en ese momento. ¿El contenedor alguna vez eliminará el bean de sesión con estado? ¿O existirá para siempre causando algún tipo de fuga (memoria/disco)?

Respuesta

9

Sí, el contenedor eliminará el bean de sesión con estado no utilizado cuando se agote el tiempo de espera. De todos modos, llamar al método @Remove anotado cuando el estado del bean ya no es necesario es el patrón a seguir.

El tiempo de espera de eliminación de beans de sesión con estado se puede establecer en la configuración de su servidor de aplicaciones.

4

Si la anotación @Remove no se ha especificado, bean stateful permanecerá en el contexto hasta el tiempo de espera especificado. No llama directamente a una fuga, pero si no está gestionando las dependencias correctamente y quedan algunas referencias, puede tener una potencial pérdida de memoria. Por lo tanto, es aconsejable utilizar la anotación @Remove.

Cuestiones relacionadas