Внедрение CDI в сервлет не работает

У меня есть контроллер с производителем.

@Named
@SessionScoped
public class UserController{

    private User user;

    //other methods

    @Produces
    @User
    public User produceUser() {
        return user;
    }
}

Если я ввожу пользователя в сервлет, я всегда получаю одного и того же пользователя (я сравнивал идентификаторы объектов) - также в разных сеансах. Если я ввожу пользователя в CDI Bean, он работает, и я получаю пользователя текущего сеанса.


person mp5    schedule 09.07.2014    source источник
comment
Не очень хорошо знаком с CDI, но сервлеты сохраняются во многих разных сеансах; вам нужно либо ввести прокси, который выбирает текущего пользователя, либо ввести UserService   -  person Tassos Bassoukos    schedule 09.07.2014
comment
Пожалуйста, предоставьте больше информации. Какой контейнер вы используете? Какая версия CDI и т.д.?   -  person John Ament    schedule 09.07.2014
comment
Можете ли вы показать, как вы создаете объект User и сервлет с точкой внедрения?   -  person Yuri    schedule 09.07.2014


Ответы (1)


UserController относится к области сеанса, а производитель — нет. т.е. производитель имеет область действия @Dependent, поэтому bean-компонент User вводится один раз при инициализации сервлета.

Попробуйте добавить @SessionScoped в метод производителя.

person Harald Wellmann    schedule 10.07.2014