Я новичок в EJB, поэтому, пожалуйста, не возражайте против глупого вопроса.Зачем использовать сессионный компонент вообще, если в конечном счете его HttpSession, который содержит состояние
У меня есть сомнение в том, что кто-то может решить с надеждой.
У меня есть следующий Stateful Bean:
@Stateful
public class SessionBean implements SessionBeanRemote {
private int count = 0;
@Override
public int getCount(){
count++;
return count;
}
}
И это клиент, который вызывает Bean (Servlet)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InitialContext ctx;
HttpSession session = null;
SessionBeanRemote obj;
try {
if (session.getAttribute("myBean") == null) {
ctx = new InitialContext();
obj = (SessionBeanRemote) ctx.lookup("SessionBean/remote");
session.setAttribute("myBean", obj);
} else {
obj = (SessionBeanRemote) session.getAttribute("myBean");
}
System.out.println(obj.getCount());
} catch (NamingException ex) {
Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
Теперь мне было интересно, если это в конечном счете HttpSession, который должен держать в конце концов, зачем использовать EJB вообще, почему бы просто не хранить то, что мы хотим в сеансе, а не сначала в сеансовом компоненте, а затем сохранить этот бит в сеансе.
А также мне было интересно, если можно сказать, что я изменяю аннотацию @Stateful на @Stateless, а затем выполняю тот же код на стороне клиента и сохраняю компонент в сеансе, а затем я могу извлечь тот же компонент из сеанса, затем в чем разница между лицами без состояния и состояниями, я знаю, что когда новый поиск выполняется, есть вероятность, что тот же самый факсимильный компонент может быть возвращен мне, где, как и в случае с компонентом stateful, он всегда является новым, когда мы выполняем поиск. Но так ли это?
P.S. Как я упоминал ранее, я новичок в EJB, и все сомнения основаны на том, что я понял из нескольких обучающих онлайн, и некоторых вопросов о SO. Я также пытался запустить его локально, но, к сожалению, я не могу развернуть приложение на GlassFish из-за ошибки «Исключение при загрузке приложения: ошибка инициализации EJB-контейнера». Я пытаюсь изучить это.
В дополнение к хорошему ответу ниже, никогда не недооценивайте значение «это автоматически для меня». – chrylis
@chrylis Но это не обрабатывается автоматически, после поиска я должен хранить его в HttpSession, чтобы всегда получать один и тот же экземпляр. Тогда почему бы не сохранить простой объект вместо bean-компонента. или почему бы не сохранить фасоль без состояния. –