Если я хочу отслеживать состояние разговоров с каждым клиентом с помощью моего веб-приложения, что является лучшей альтернативой - сеансом Bean или сеансом HTTP - для использования?
Использование сеанса HTTP:
//request is a variable of the class javax.servlet.http.HttpServletRequest
//UserState is a POJO
HttpSession session = request.getSession(true);
UserState state = (UserState)(session.getAttribute("UserState"));
if (state == null) { //create default value .. }
String uid = state.getUID();
//now do things with the user id
Использование сеанса EJB:
В реализации ServletContextListener, зарегистрированного как прослушиватель веб-приложений, в WEB-INF/web.xml
:
//UserState NOT a POJO this this time, it is
//the interface of the UserStateBean Stateful Session EJB
@EJB
private UserState userStateBean;
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("UserState", userStateBean);
...
В JSP:
public void jspInit() {
UserState state = (UserState)(getServletContext().getAttribute("UserState"));
...
}
В другом месте в теле того же JSP:
String uid = state.getUID();
//now do things with the user id
Мне кажется, что они почти одинаковы, причем основное отличие состоит в том, что экземпляр UserState переносится в HttpRequest.HttpSession
в первом, а в ServletContext
в случае последнего.
Какой из двух методов более надежный и почему?