¿Cómo funciona @SessionScoped con EJB? ¿CDI es solo para web-tier?
servlets java-ee-6 (1)
¿Cómo se define la sesión en @SessionScoped
CDI Bean?
¿Es válida esta anotación solo cuando se llama desde el contenedor del servlet, donde la sesión está bien definida en forma de HttpSession
?
Si no, ¿cómo puede un EJB con @Inject @SessionScoped MyBean myBean
saber cuá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 de MyBean
para cada solicitud o quizás debería conservar la misma instancia en todas las solicitudes?
Tomado de la especificación @SessionScoped
El alcance de la sesión está activo:
durante el método service () 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 se producen en la misma sesión HTTP. El contexto de la sesión se destruye cuando la sesión HTTPS termina, después de que se haya llamado a todos los HttpSessionListeners, y al final de cualquier solicitud en la que se invocó invalidate (), después de haber llamado a todos los filtros y ServletRequestListeners.