EJB с отслеживанием состояния и один и тот же сеанс реплицируются между клиентами

У меня есть 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-компоненты с отслеживанием состояния, чтобы не сохранять одинаковое состояние для всех клиентов?

Спасибо.

5
задан FAtBalloon 16 December 2011 в 16:00
поделиться