Как вызвать EJB 3.1 конструктор без нулевого аргумента из сервлета? - PullRequest
2 голосов
/ 16 марта 2011

У меня есть сервлет login.java и, как следует из его названия, он предоставляет средства входа в мое веб-приложение.

Я новичок и использую EJB 3.1 и EE 6. В моемLoginBean.java EBJ У меня есть конструктор без аргументов, а другой - с некоторыми параметрами (электронная почта, пароль и т. Д.).

В определенный момент в коде сервлета у меня есть вызов для создания экземпляра моего EJB:

@EJB LoginBean loginBean;

Я хотел бы знать, возможно ли (и как) вызвать другой конструктор вместо одного с нулевым аргументом.

Большое спасибо.Приветствия.

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Ты не хочешь этого делать.Один и тот же сервлет является общим для всех пользователей, поэтому EJB также является общим для всех пользователей.Вы не хотите хранить пользовательские данные в качестве переменной экземпляра сервлета или класса EJB.Он будет доступен всем посетителям веб-страницы.

Вместо этого переместите аргументы в метод EJB, который вы вызываете в методе doPost() сервлета входа.

User user = loginBean.login(username, password);

, а затем сохраните егов сеансе HTTP, когда он прошел успешно

request.getSession().setAttribute("user", user);

, так что остальная часть вашего веб-приложения может перехватить это, чтобы определить, вошел ли пользователь в систему или нет.

if (request.getSession().getAttribute("user") != null) {
    // User is logged in.
} else {
    // User is not logged in.
}
1 голос
/ 17 марта 2011

Я на 100% согласен с BalusC. В дополнение к его ответу я хотел бы добавить, что обычно * никогда не ссылаются явно на конструктор EJB-компонента, даже если это теоретически имеет смысл (например, при передаче некоторых зависимостей или некоторого параметра конфигурации). ).

EJB-компоненты являются управляемыми объектами, и в аннотированном поле @EJB вы получаете не реальный объект, а stub (прокси). Фактический экземпляр объекта, на который указывает заглушка, скорее всего создан задолго до того, как вы передадите ему эту заглушку, а также, скорее всего, он получен из пула.

(*) Некоторые виды юнит-тестов могут быть исключением из этого правила.

...