Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что такое SessionBean, концептуальное фиаско!!! 
:(
    Опции темы
sith
Дата 27.10.2010, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



... друзья... вообщем то я довольно опытный программист ... не первый год работаю... раньше так поверхностно сталивался с  EJB ... а тут решил наверстать пробелы в знаниях и занялся версий 3.0 

... никак не укладываеться в моей голове что такое этот Session Bean... чем стэйтфул от лэса отлечаеться... время жизни их.. .допустим в спринге было просто хочу синглтон пожалуйста... бин на сессию (и тут понятно что это веб сессия) пожалуйста... а в егб??? чем эти два вида бинов отличаються... как быть если мне нужен синглтон ( миграцию на версию 3,1 не предлогать :]]]])...  по каким идентификатором контейнер понимает что именно этот бин нужно мне вирнуть... или этот бин нужно в кэш засунуть... я уже перечитал спеку официальную но все равно какого то ощущения что я четко понимаю эти вещи нету...

... плиззз хелп... обьясните


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
eros2
Дата 28.10.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Чтайте доки, там всё расписано - http://download.oracle.com/javaee/6/tutorial/doc/gipjg.html
С веб-сессиями сессионные EJB не связаны.
Для связи сессионных EJB с веб-сессиями есть Seam, а в java ee 6 есть CDI.

Синглтона в 3 нет. Если нужен синглтон в 3 - то можно юзать специфичные фичи AS, например @Service у JBoss.
PM MAIL WWW   Вверх
Vasay
Дата 28.10.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



sith

Сессия создается для клиента. Только клиент не всмысле - посетитель сайта, а программа этот бин у апликейшен сервера запрашивающая.

Т.е. запустили Вы Web приложение - для него создался один бин, запустили другое вебприложение - для него другой бин. Запустили SE приложение и обратились к бину на сервере - для него создан 3 бин. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
eros2
Дата 28.10.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата(sith @ 27.10.2010,  17:43)
по каким идентификатором контейнер понимает что именно этот бин нужно мне вирнуть...

Получить ссылку на бин можно двумя путями, через DI и через JNDI.

Stateful бины инжектить не стоит, так как при каждом инжекте мы имеем ссылку на новый instance.

Пример инжекта stateless-бина:

@EJB
private MyBean myBean;

myBean.myMethod1(...);
myBean.myMethod2(...);


поскольку это stateless-бин - методы 1 и 2 могут быть вызваны для разных instance, какой instance будет под рукой (в пуле) ближе - тот и будет использован.

В случае stateful-бина (ссылку на него следует полчить через jndi lookup) методы будут вызваны для одного и того же инстанса.


Стало понятней?
PM MAIL WWW   Вверх
sith
Дата 28.10.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



понятнее но не все...

... как контейнер понимает что запрос пришел из разных клиентов... допустим с вебом понятно... туда возвращаеться id сессии... а тут как???...

... дальше клиент это что... отдельный джарник... или это только веб приложения... ??? 

... если инжектить нерекомендованно то зачем тогда вообще есть возможность эта для стэйтфул бинов. как то это не очень... наверно что в одном месте инжектим а вот тут не рекомендуеться и мне нужно постоянно делать лукап нужного бина...


... пример... допустим есть приложение под кодовым названием  "ведро-1"... есть бин стэйтфул ... бин хранит некий обьект ведро и есть бизнес метод по заполнению этого ведра. получаеться если различные пользователи этого приложения будут вызывать этот метод они все будут работать с одним ведром и заполнять одно ведро.... если будет запущенно два приложения "ведро-1" то укаждых пользователей будет по своему ведру??? 

... 


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
eros2
Дата 28.10.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата
... как контейнер понимает что запрос пришел из разных клиентов... допустим с вебом понятно... туда возвращаеться id сессии... а тут как???...

хранится некий контекст сессии, неважно как это реализуется в протоколе.

Цитата
... дальше клиент это что... отдельный джарник... или это только веб приложения... ??? 

Это может быть клиент внутри сервера приложений, а может быть отдельное приложение на свингах, например.

Цитата
... если инжектить нерекомендованно то зачем тогда вообще есть возможность эта для стэйтфул бинов. как то это не очень... наверно что в одном месте инжектим а вот тут не рекомендуеться и мне нужно постоянно делать лукап нужного бина...

почему постоянно? когда нужен новый инстанс, тогда и лукапим.
ЗЫ: стейтфул бины используются РЕДКО.

Цитата
... пример... допустим есть приложение под кодовым названием  "ведро-1"... есть бин стэйтфул ... бин хранит некий обьект ведро и есть бизнес метод по заполнению этого ведра. получаеться если различные пользователи этого приложения будут вызывать этот метод они все будут работать с одним ведром и заполнять одно ведро.... если будет запущенно два приложения "ведро-1" то укаждых пользователей будет по своему ведру???

Не так. Это никак не зависит от приложения.

Ещё раз повторю - при КАЖДОМ лукапе мы получаем НОВЫЙ ИНСТАНС стейтфул бина.

MyBean b = (MyBean)ctx.lookup("MyBean/remote");
b.putOrder(...);
b.putOrder(...);
b.countOrders();

Т.е. здесь вызов методов произойдёт как будто MyBean - обычный класс. Вот примерно как если бы вместо (MyBean)ctx.lookup("MyBean/remote"); тут был new MyBean();, с той лишь разницей что методы отработают на сервере, а не локально.

А если бы MyBean был стейтлесс - то все вызовы методов были бы направлены на произвольные инстансы из пула.
PM MAIL WWW   Вверх
sith
Дата 28.10.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



так... подожди 

Цитата(eros2 @  28.10.2010,  10:58 Найти цитируемый пост)
Stateful бины инжектить не стоит, так как при каждом инжекте мы имеем ссылку на новый instance.


так при инжекте или лукапе будет создаваться новый инстанс?... если я в классе своем пижу анатацию @EJB ... создасться новый или вызоветься старый...


... конкурентный доступ к стэйтфул бинам - я так понимаю что эти бины могут иметь внутренние поля... контейнер обеспечивает конкурентный доступ или это все ложиться на мои хрупкие плечи???


зачем иметь милион стэйтлесс бинов если они не гарантируют состояние обьекта а значит имеют только сервисные методы... почему не сделать один синглтон... для всех обращений???


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
eros2
Дата 28.10.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата
так при инжекте или лукапе будет создаваться новый инстанс?...

Именно.

Цитата
если я в классе своем пижу анатацию @EJB ... создасться новый или вызоветься старый...

посмотрите тут, например - http://forums.java.net/jive/thread.jspa?threadID=13439

Цитата
... конкурентный доступ к стэйтфул бинам - я так понимаю что эти бины могут иметь внутренние поля... контейнер обеспечивает конкурентный доступ или это все ложиться на мои хрупкие плечи???

конкурентный доступ имеет смысл для синглтона, при работе же со стэйтфул бином работа с ним идёт в том же треде, в котором был лукап, а по каждому лукапу создаётся отдельный инстанс.

Цитата
зачем иметь милион стэйтлесс бинов если они не гарантируют состояние обьекта а значит имеют только сервисные методы... почему не сделать один синглтон... для всех обращений???

Потому что стэйтлесс бины работают очень быстро и легко масштабируются и кластеризуются. Состояние же следует хранить в БД, например.




Может быть вы пытаетесь взвалить на Stateful бины ту задачу что выполняют Entity?
PM MAIL WWW   Вверх
sith
Дата 28.10.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



Цитата(eros2 @  28.10.2010,  15:24 Найти цитируемый пост)
Цитата
так при инжекте или лукапе будет создаваться новый инстанс?...

Именно.


... что именно?... я понимаю инжект это когда я имею переменную в классе и всовываю в нее значение бина по средством анотации @EJB  - при этом будет новый бин или уже до этого созданный???


...

Цитата(eros2 @  28.10.2010,  15:24 Найти цитируемый пост)
Цитата
зачем иметь милион стэйтлесс бинов если они не гарантируют состояние обьекта а значит имеют только сервисные методы... почему не сделать один синглтон... для всех обращений???

Потому что стэйтлесс бины работают очень быстро и легко масштабируются и кластеризуются. Состояние же следует хранить в БД, например.


и все же... к примеру есть инстанс сервиса А у которого есть бизнес метод перевестиНаАнглийский - зачем контейнеру создавать 2,3 милион обьектов... если у этого инстанса нет состояния... и мето вызванный что у одного... что у двух инстансов будет будет выполнять тоже самое... в чем при рост... чем это отличаеться от бычного сервисного синглтона который отдаеться всем кто попросит... в чем приемущества???



--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
sith
Дата 29.10.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



какие нибудь мысли еще???


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
stron
Дата 29.10.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



Не путайте statefull и stateless
stateless - не обязательно будет создавать новый инстанс, может быть использован уже существующий.
Кол-вом инстансов управляет контейнер.
statefull - даёт гарантию работы с одним и тем же инстансом

Посмотрите EJB 3 in action - сразу тьма вопросов отпадёт

Это сообщение отредактировал(а) stron - 29.10.2010, 16:57


--------------------
подписи нет
PM ICQ   Вверх
sith
Дата 29.10.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



ну а зачем для стэйтлесс вообще разные инстансы?



--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
eros2
Дата 29.10.2010, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата(sith @ 29.10.2010,  18:46)
ну а зачем для стэйтлесс вообще разные инстансы?

Ну это же очевидно!
Имеется пул инстансов, так что запрос от клиента отрабатывает на первом свободном инстансе. Это гарантирует, что в момент вызова бизнес-метода только один клиент (тред) использует стейтлесс-бин, т.е. не нужно никакой синхронизации и конкурентности, накладные расходы минимальные. А поскольку все инстансы одинаковые - то они легко масштабируются и запросы могут направляться на любую машину из кластера.

Это вроде как даже само понятно, но можно и книжки почитать, "EJB3 in Action" - то что надо.
PM MAIL WWW   Вверх
sith
Дата 29.10.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



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


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
eros2
Дата 29.10.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 31.5.2010

Репутация: нет
Всего: нет



Цитата(sith @ 29.10.2010,  22:44)
если его используют как сервисную заглушку

Его используют для реализации бизнес-методов.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0841 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.