2014-09-01 2 views
0

Использование: EJB 3.1, JBoss AS 7, RestEasy.EJB 3.1 - Область применения для ввода Pojo

У меня есть сеанс, который я хочу, чтобы пользователь мог хранить информацию о пользователе для сеанса.

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped 
@SessionScoped 
public class LoggedInUser implements Serializable { 
    private String id; 
    ... 
} 

Если пользователь открывает мое веб-приложение, информация заголовка фильтра извлекается (приложение выполняется за веб-сайтом), которое содержит идентификатор пользователя. Мне нужно создать зарегистрированный пользовательский объект (см. LoggedInUser выше) там (после вызова ldap). Впоследствии я хочу ввести этот объект LoggedInUser в разные @Stateless Beans, но LoggedInUser всегда «пуст» (члены имеют значение null).

Вводят образец:

@Path("/country") 
@Stateless 
public class CountryController extends AbstractController { 
@Inject 
private Logger LOGGER; 
@Inject 
private LoggedInUser loggedInUser; 
//@Inject dont work too.. 
//private Instance<LoggedInUser> loggedInstance 

Что Im неправильно?

+0

Вы должны показать код, который, по вашему мнению, должен заполнить поля LoggedInUser. – Deltharis

+0

Код для заполнения полей LoggedInUser еще не существует. Можно ли изменить поля LoggedInUser после запуска компонента? Или мне нужно добавить метод @PostContruct в LoggedInUser (так что мне тоже нужно было прочитать заголовок). – user2983732

ответ

0

Судя по комментарию и вопросу - вам нужна помощь с концепциями EJB.

@SessionScoped beans - это компоненты, которые имеют один экземпляр за сеанс. Каждый @Inject с бином, подобным этому, в течение одного сеанса будет ссылаться на один и тот же объект. Однако, если вы хотите, чтобы ваш bean-компонент содержал некоторую информацию, относящуюся к этому сеансу, вам нужно поместить его туда сами, используя сеттеры или другие методы, как вы бы делали в каждом нормальном классе Java.

+0

Я знаю, что у компонента, имеющего сеанс, есть один экземпляр за сеанс, моя проблема в том, что я не могу изменить значения LoggedInUser. Например, если я вызываю loggedInUser.setId («myNewId») в CountryController, значение не будет изменено. Я могу посмотреть его во время отладки с помощью eclipse, я вызываю setId, но значение не изменяется. Начальный объект получает instanced с конструктором по умолчанию. – user2983732

+0

Таким образом, вы можете вызвать 'loggedInUser.setId (« myNewId »);' 'System.out.println (loggedInUser.getId());' и Id не установлен? Кроме того, это именно та часть, которую я изначально хотел, чтобы вы добавили к вопросу - код, который заполняет loggedInUser и не работает. – Deltharis

+0

Ну, я пробовал заполнять LoggedInUser по-разному. Пробовал установить id в LoggedInUser # LoggedInUser (конструктор), LoggedInUser # initial (@PostConstruct) или просто попытался установить значения в CountryController # someMethod() с этим.loggedInUser.setId ("testId"). Это поможет, если вы просто скажете мне, как я должен хранить информацию о пользователях, я не знаю, правильно ли я это делаю. Лучшая практика? – user2983732