2011-11-22 11 views
9

¿Cómo se define la sesión en @SessionScoped CDI bean?
¿Es esta anotación válida solo cuando se llama desde el contenedor del servlet, donde la sesión está bien definida en el formulario de HttpSession?¿Cómo funciona @SessionScoped con EJB? ¿CDI es solo para web-tier?

Si no, ¿cómo puede saber un EJB con @Inject @SessionScoped MyBean myBeancuál es realmente la sesión? Quiero decir, los métodos de este EJB podrían haber sido invocados por un cliente independiente, RESTful WS o por alguna otra vista.
¿Qué debería pasar en tal caso? Si la anotación no tiene sentido, ¿debería inyectarse una nueva instancia MyBean para cada solicitud o quizás debería conservar la misma instancia en todas las solicitudes?

Respuesta

3

tomado de la @SessionScoped specification

El ámbito de sesión está activa:

durante el método de servicio() de cualquier servlet en la aplicación web, durante el método doFilter() de cualquier filtro de servlet y cuando el contenedor llama a cualquier HttpSessionListener, AsyncListener o ServletRequestListener.

En resumen, sí. Está vinculado a la HttpSession. También:

El contexto de la sesión se comparte entre todas las solicitudes de servlets que ocurren en la misma sesión HTTP. El contexto de la sesión se destruye cuando se agota el tiempo de espera de la sesión HTTPSession , después de que todos los HttpSessionListeners hayan sido llamados , y al final de cualquier solicitud en la que invalidate() fue llamado, después de que todos los filtros y ServletRequestListeners hayan sido llamados .

+0

Realmente, ¿cómo más se define una sesión incluso para algo así como un SFSB? Por supuesto, no hay nada que te prohíba crear tu propio alcance y vincularlo a lo que quieras. – LightGuard

+0

@LightGuard, supongo que en SFSB la "sesión" dura desde la instanciación de SFSB hasta su eliminación (o tiempo de espera). Así que, mientras tenga una referencia, llegaré al mismo entorno (sesión). –

+0

@Gonzalo, gracias por esta información. Me pregunto: ¿qué pasaría si utilizara el bean '@ SessionScoped' en un entorno donde no existe tal alcance (es decir, REST WS como se menciona en la pregunta). ¿Cada solicitud se trata como una nueva sesión? ¿Qué hay de SFSB, como mencionó LightGuard? ¿El '@ SessionScoped' se referirá a la sesión' HttpSession' o a la sesión de SFSB? –

Cuestiones relacionadas