Управляемый компонент JSF SessionScoped - после перезагрузки сервера внедрение пружинного компонента становится пустым - PullRequest
0 голосов
/ 25 марта 2012

В приложении JSF 2, разработанном на tomcat, у меня есть следующий управляемый компонент SessionScoped:

@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String login;
    private String password;

    @ManagedProperty(value = "#{authenticationService}")
    transient private AuthenticationService authenticationService;

    public String login() {

        boolean success = authenticationService.login(login, password); // after restarting tomcat, authenticationService is null here!

        //........
    }
}

authenticationService - это весенний @Service:

@Service("authenticationService")
public class AuthenticationServiceImpl implements AuthenticationService, Serializable {

    private static final long serialVersionUID = 1L;

    //....
}

Кроме того, я определил сеанс, который будет сохранен на стороне клиента:

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
</context-param>

ПРОБЛЕМА:

LoginBean работает нормально, когда я запускаю tomcat в первый раз утром. Но если я затем перезагружаю tomcat и сразу пытаюсь получить доступ к LoginBean.login(), я получаю исключение NullPointerException для authenticationService.

Я определил authenticationService как временный, чтобы он не сохранялся в сеансе. Но при перезапуске кота он не впрыскивается снова со ссылкой на боб весны authenticationService.

Вопросы:

  1. Почему он не вводится повторно при запуске?
  2. Почему определение authenticationService как переходного процесса не сигнализирует JSF повторно вводить authenticationService?
  3. На проблему влияет установка javax.faces.STATE_SAVING_METHOD как client?
  4. Как я могу решить эту проблему? Если на ваше решение влияет значение javax.faces.STATE_SAVING_METHOD, пожалуйста, объясните как.

1 Ответ

2 голосов
/ 25 марта 2012

Скорее всего, это связано с сериализацией сеанса, выполняемой tomcat.Он пытается восстановить сериализованный сеанс, но не вводит аутентификационный сервис.Вы можете безопасно отключить эту функцию, она редко используется.Чтобы отключить его, найдите в файле tomcat файл conf / context.xml и раздел uncomment, описанный как ответственный за управление сохранением сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...