У меня есть EJB с отслеживанием состояния, который я использую для хранения информации о текущем пользователе в моем приложении. Этот EJB вводится в контроллер сервлета и используется для хранения последнего пользователя, вошедшего в систему. Однако сеанс кажется одинаковым для каждого отдельного клиента.
Пример кода EJB:
Stateful
@LocalBean
public class CurrentUserBean {
private string Username;
public void setUser(String un)
{
Username = un;
}
....
Пример кода сервлета:
public class MainController extends HttpServlet {
@EJB private CurrentUserBean userBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String name = session.getAttribute("username");
userBean.setUser(name);
......
Теперь, когда приложение развернуто на моем сервере, и у меня есть много разных людей, разговаривающих с сервером с нескольких разных клиентов, имя пользователя всегда устанавливается на последнее пользователь, который вошел в систему. Другими словами, создается впечатление, что сессионный компонент с отслеживанием состояния сохраняет одно и то же состояние для всех клиентов. Это меня сильно сбило с толку, поскольку я прочитал в руководстве по java 6 ee следующую цитату со страницы 247:
В сессионном компоненте с отслеживанием состояния переменные экземпляра представляют состояние уникального сеанса клиента / компонента. Потому что клиент взаимодействует («Разговаривает») со своим bean-компонентом, это состояние часто называют разговорным штат. Как следует из названия, сессионный компонент похож на интерактивная сессия. Сессионный компонент не используется совместно; это может быть только один клиент, точно так же, как интерактивный сеанс может иметь только один пользователь. Когда клиент завершает свою работу, его сессионный компонент выглядит как прекращается и больше не связан с клиентом.
Может ли кто-нибудь объяснить, почему это происходит, а также объяснить, как правильно использовать bean-компоненты с отслеживанием состояния, чтобы не сохранять одинаковое состояние для всех клиентов?
Спасибо.