Почему хитрость не внедряет ранее созданный объект @SessionScoped? - PullRequest
1 голос
/ 04 февраля 2011

У меня есть @SessionScoped?DAO, который внедряется в конструктор перехватчика Stripes Framework, который, кажется, обнаружен от перехватчика (при последующих вызовах), но не внедряется в сервис в том же запросе (и сеансе).Почему один и тот же экземпляр (инициализированный в перехватчике) не используется повторно в службе (которая находится в другом пакете в том же проекте)?

Создание DAO @Singleton делает свое дело, но недопустимопоскольку DAO хранит информацию, которая должна оставаться непротиворечивой в течение сеанса пользователя, в приложении с несколькими пользователями, которые будут совместно использовать один и тот же экземпляр DAO.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

хорошо, я понял это.Я изменил @SessionScoped на bind(DAO.class).in(ServletScopes.SESSION) оператор, с которым работает инъекция.Насколько я понимаю, они должны быть эквивалентны, но в моем случае они дают разные результаты.

Один аспект, который меня беспокоил на этом пути, заключался в том, что Stripes создал перехватчик, который вводил DAO при запуске, вызываяошибки, поскольку это произошло вне области сеанса (для DAO это @SessionScoped.). Контекстная информация ActionBeanContext необходима для инициализации контекста сеанса DAO, который я установил в методе SetContext AbstractActionBean, который вызывается во время конструирования компонента действия.1006 *

Спасибо за ваш интерес и помощь.

0 голосов
/ 05 февраля 2011

Если Interceptor не является объектом области сеанса, то вам нужно ввести Provider<YourDaoType> в Interceptor.Это общая схема, которую следует использовать, когда объект с более длительным сроком службы зависит от другого объекта с более коротким сроком службы.

...