![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Atum |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Добрый день !
Вопрос такой : хочется создать свою аннотацию для Stateful Бина - чтобы можно было его инжектировать по средствам ее в Сервлете ! Хочется написать такую аннотакцию которая бы позволяла добиться такого же эффекта как и для Stateless бинов при их инжектировании в сервлет по средствам @EJB аннотации Называется к примеру @EJBStateful Вопрос : Как еще реализовать? servlet 3 + Stateful EJB 3.1 что есть : 1.Stateful Бин с бизнеес логикой , который хочется привязать к сессии пользователя. 2.Сервлет в котором этот бин получается из атрибута сессии ! 3.ServletContextListener, HttpSessionListener которые и добавляют в сессию пользователя этот бин как атрибут сейчас поиск происходит через InitialContext(). Хочется реализовать это все так чтобы я просто в сервлете мог написать
и работать с таким бином по привычной схеме. Возможно ли создать такую аннотацию? Реализация того как это работает сейчас :
сервлет который обслуживает запросы клиента
создание новой сессии кладем ссылку на этот бин в сессию пользователя , при уничтожении ... удаляем , высвобождая ресурсы.
|
||||||||
|
|||||||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
Я возможно чего-то не понимаю, но Stateless от Stateful ничем не отличается в данном случае. Т.е. если у вас работает инъекты со Stateless, то должны работать и со Stateful. |
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Хм, т.е. вы предлагаете в servlete просто написать
@EJB private FacadeStatefulBean facadeStatefulBean; для Stateful бина? сомневаюсь что это пройдет . |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
||||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Насколько я понимаю текущую схему работы Сервлета и EJB. экземпляр сервлета всегда один но сервлет многопоточный - и когда мы в нем инжектируем Stateless бин - мы фактически создаем ссылку на EJB-контейнер который нам выдает экземпляры Stateless бинов . Для каждого пользователя -потока будет создаваться свой бин или браться из Пула EJB контейнера. Для Stateful такая схема не подходит - потому что Stateful бин хранит состояние . Простой пример - два одновременных запроса от двух пользователей оба хотят поменять значение переменной в Stateful бине - дергают функцию setName(name); какой будет результат и механизм вызова Stateful бина в Сервлете ? |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
В месте инъекции хранится не сам объект, а прокси-объект. Он то и разгуливает, для какого объекта вызвать setName.
|
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Пример! создайте два бина Stateless и Stateful . Поставьте в них счетчик int count =0; и увеличивайте его при вызове функции info() public int info(){ return ++count; } два сервлета s1Stateless и s1Stateful с @EJB этих бинов. для Stateless - должен быть уникальный счетчик для каждого пользователя на его сессию. для s1Stateful - будет каша в выводе - если будет несколько клиентов и несколько браузеров. Если просто добавить Stateful - как вы описали - то будет такая же каша как и со Stateless бином. |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
Если это то, как должно быть - то вы перепутали их местами.
Сессия создается? Если сессия не создается, то Stateful может работать как Stateless, потому как будет создаваться каждый раз. Ну и вообще, какой контейнер и окружение используется? |
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
glassfish 3 jboss 7 что то вы лукавите по поводу Stateful как Stateless. |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
Короче я частично перепутал то, как оно работает с CDI.
В принципе, можно его и использовать: https://vaadin.com/wiki/-/wiki/Main/Creatin...%20Applications |
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Есть такой вопрос ,а если использовать аннотации из Context & Dependency Injection
@Named @SessionScoped такой бин будет равняться Stateful бину ? или я путаю контексты EJB -servlet Context & Dependency Injection - SessionScoped - в JSF ?! Это сообщение отредактировал(а) Atum - 28.2.2013, 16:27 |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |