|
|
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Вот такой клиент: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вот такой Session Bean: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Запускаю GlassFish - на нём Session Bean работает. Запускаю 2 разных клиента на разных компах (1 виртуальный, а другой реальный) - 1 клиент видит то, что в переменную debug_str (которая на сервере), написал другой клиент. Почему так? @Stateless не должен сохранять своё состояние между вызовами. А он ведёт себя как @Singleton. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:10:15 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000 @Stateless не должен сохранять своё состояние между вызовами. А он ведёт себя как @Singleton. Маленькая поправка, контейнер не гарантирует что вы будете получать всегда один и тот-же бин. У вас так получилось что два клиента получили в разное время один и тот же бин и это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:28:30 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
А если мне хочется получить точно 2 разных SessionBean, то что делать? Если хочется получить ссылки на 1 и тот же SessionBean, то его надо объявить @Singleton и он будет существовать в единственном экземпляре в пределах всего сервера. Это понятно. А если надо так: Сколько экземпляров клиентов - столько разных экземпляров SessionBean'ов. А какой смысл тогда в этих аннотациях если контейнер не гарантирует то, что @Stateless будет @Stateless? Я тогда вообще не вижу разницы между @Stateless, @Stateful и @Singleton - ведут они себя одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:36:36 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000, Есть такая штука как пул ejb объектов, так вот пре старте(deploy) какого либа stateless bean. Контейнер создать несколько инстансов и будет вам их выдавать по мере требования. Взаимодействие происходит через прокси объекты и каждый раз вам выдает разные инстансты при каждом новом вызове метода бина. Со stateful бин работа идет немного иначе, когда вы получили прокси объект на него , вызываемы методы этого бина всегда будут передаваться одному и тому же инстансу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:46:24 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000, Контейнер также гарантирует что один клиент работает всегда с одним бином, поэтому ejb beans thread-safe. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:49:09 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000Я тогда вообще не вижу разницы между @Stateless, @Stateful - ведут они себя одинаково.нет stateless может хранить состояние и "шарить" его между разными клиентами. об этом сказано вообще-то. но это "шарить" не гарантируется. Niky4000А если мне хочется получить точно 2 разных SessionBean, то что делать?использовать stateful, не? Niky4000@Stateless не должен сохранять своё состояние между вызовамиstateless хранит своё состояние. stateful хранит состояние для клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:53:00 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
GregTkВзаимодействие происходит через прокси объекты и каждый раз вам выдает разные инстансты при каждом новом вызове метода бина.нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 10:53:47 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
stateless может хранить состояние и "шарить" его между разными клиентами. об этом сказано вообще-то. но это "шарить" не гарантируется. Мне надо бы 2 случая: 1 Чтобы "шарить" между клиентами было - тогда я использую @Singleton. 2 Чтобы никакого "шарить" между клиентами не было никоим образом - тогда получает мне нужен @Stateful (ещё не проверил это). А зачем тогда нужен @Stateless не понятно, если я точно не знаю будет ли он разделён между клиентами или нет, сохранит он своё состояние после того как его поиспользовал другой клиент или нет и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:04:20 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000stateless может хранить состояние и "шарить" его между разными клиентами. об этом сказано вообще-то. но это "шарить" не гарантируется. Мне надо бы 2 случая: 1 Чтобы "шарить" между клиентами было - тогда я использую @Singleton. 2 Чтобы никакого "шарить" между клиентами не было никоим образом - тогда получает мне нужен @Stateful (ещё не проверил это). А зачем тогда нужен @Stateless не понятно, если я точно не знаю будет ли он разделён между клиентами или нет, сохранит он своё состояние после того как его поиспользовал другой клиент или нет и т.д.? ещё раз ) stateless хранит (может сохранить, и клиент это может узнать, но не гарантируется) своё состояние. stateful хранит состояние для клиента. http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:09:34 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Кстати, сейчас проверил эту теорию с @Stateful - вроде работает как надо - один клиент пишет что-то в текстовую переменную, а другой не видит что при этом первый написал туда. Если я объявлю SessionBean как @Singleton - то получается то, что мне надо - второй случай - данные клиентов в переменных пересекаются. А зачем нужен @Stateless, если непонятно как он работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:09:48 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000 А зачем нужен @Stateless, если непонятно как он работает? даже ссылка на jee6 tutorial не объясняет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:13:20 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Я сейчас просто с этим столкнулся... И я перестал понимать зачем нужен @Stateless, а везде пишут, что @Stateless используется повсемесно, а @Stateful почти не используется, а @Singleton - это новинка в EJB3, раньше его не было. Я раньше думал, что @Stateless - это когда состояние не сохраняется и с ним несколько клиентов могут работать, никак не взаимодействуя друг с другом. А сейчас у меня Мир перевернулся - оказывается это не так, да к тому же не понятно (не гарантируется контейнером) что за Session Bean я получаю - новый чистенький или тот, который поимел другой клиент, то ли они shared между клиентами, то ли не shared - это тоже не гарантируется контейнером. Я вот это не понимаю. Сейчас ссылочку почитаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:17:06 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
То что вы добавляете состояние в Stateless это ваши личные проблемы. Он сделан для того чтобы не хранить состояния. А гарантирует он лишь то что два параллельных клиента не будут использовать один и тот же экземпляр. Должен согласиться что всё это не логично и не очевидно, как и весь EJB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:20:25 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Как я понял @Stateless берутся из пула - их там может быть несколько. Какой Session Bean будет использоваться каким клиентом решает контейнер. Может так получиться что 1 и тот же @Stateless Session Bean могут поиспользовать 2 разных клиента, а 3-й клиент может получить не тот же самый Session Bean, что первые 2 клиента. Соответственно если рассматривать Web - то там @Stateless Session Bean эффективнее, чем @Staful Session Bean, так как меньше нагружают сервер. Число @Stateless Session Bean может быть меньше числа клиентов, а в случае с @Staful Session Bean, их число = числу клиентов. @Singleton cуществует в единственном экземпляре в пределах всего сервера и очищают своё состояние только если сервер перезагрузился или грохнулся. Я вот только не очень понял: A stateless session bean can implement a web service, but a stateful session bean cannot. ... Like stateless session beans, singleton session beans can implement web service endpoints. Stateless session beans и singleton session beans могут реализовать web-сервес, а stateful не может. Почему? Если у нас на 1 клиента 1 stateful, почему нельзя? Типа stateless берётся из пула и их число меньше числа пользователей, а stateful = числу пользователей, как бы менее эффективно расходуется память. Или что? Я вот этот момент как-то не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 11:46:21 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
экземпляр stateful привязывается к единственному клиенту. Спека Web Service почти полнотью stateless. Она не подразумевает никаких "сессий" с клиентом. Поэтому никакого смысла использовать stateful для Web Service нет - нет никаких стандартов для этого. HTTP сам по себе тоже stateless. jsessionid это уже отсебятина сервлетов. Web Service даже не обязательно должен работать по HTTP. Cходу даже не гуглиться какая-нибудь w3c спека для сессия в Web Service. Поэтому если вам нужно явно связывать Web Service и сессии, это приходится делать руками, так как механизмы поддержки сессии не стандартизированы и у всех разные. Например те же куки поддерживаются браузерами, а не толстыми клиентами. Поэтому делать сессии на jsessionid тоже особого смысла нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:08:59 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000, Расскажу про веб-сервисы. Тут есть много вариантов. С одной стороны stateful бин не может реализовывать web-service потому что вебсервисы по природе stateless - они не сохраняют состояние, они содержат операции. И еще, нет возможности определить от одного и того же клиента пришло два вызова вебсервиса или от разных. Поэтому не понятно, какой экземпляр stateful бина должен принимать вызов. Но, строго говоря, это не совсем так. Вы можете в soap передавать руками sessionid и таким образом определять клиента - но это кустарный способ, statful bean тут не подключить, так как контейнер не знает, откуда брать тот sessionid, чтобы определить клиента и соответственно подсунуть ему тот или иной stateful bean. И опять же - используя WS-Addressing можно и stateful бин использовать как ws-endpoint, так как WS-Addressing позволяет определять клиентов (погуглите на эту тему и вы найдете). Или же так - если вы уверены что у вас вебсервисы будут работать только по http, а в большинстве ситуаций так и бывает, то можно использовать стандартный JSESSIONID, который приходит в http headers запроса. И в этом случае вы можете использовать stateless bean как ws-endpoint и в него инжектить CDI SessionScoped bean или RequestScoped bean - контейнер будет инжектить инстансы относящиеся к вызываемому клиенту (клиента он определит по JSESSIONID в http headers) Ох, надеюсь понятно что я тут написал, спешил я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:16:03 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
rabiterОх, надеюсь понятно что я тут написал, спешил я. Всё верно. Сессии в Web Service не стандартизированы. Поэтому дефолтной реализации нет. Но бюбую кустарную сделать не сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:17:48 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
rabiter, Если не сложно, подскажите, пожалуйста каким боком тут WS-Addressing? Это через replyto что ли сессию трекать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:19:49 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrabiter, Если не сложно, подскажите, пожалуйста каким боком тут WS-Addressing? Это через replyto что ли сессию трекать? На практике с WS-Addressing не работал. Но как я понял, этот фреймворк позволяет идентифицировать узлы. Таким образом можно определить от какого конкретно клиента пришел запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:27:14 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Хотя, может я поспешил с выводами. Узел-то определить WS-Addressing может и позволяет, но самого вызываемого, под вопросом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 12:37:36 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Stateful удобно использовать в Application Client'ах. Но если надо будет потом в перспективе прикрутить параллельно ещё и Web модуль, который был бы тонким клиентом, то получается, что не не может использовать те же Stateful Session Bean'ы, что и Application Client. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 13:26:18 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000Stateful удобно использовать в Application Client'ах. Но если надо будет потом в перспективе прикрутить параллельно ещё и Web модуль, который был бы тонким клиентом, то получается, что не не может использовать те же Stateful Session Bean'ы, что и Application Client. Может, но HTTPSession и Stateful bean нужно будет подружить руками. Сам сервер этого не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 13:33:53 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Niky4000Stateful удобно использовать в Application Client'ах. Но если надо будет потом в перспективе прикрутить параллельно ещё и Web модуль, который был бы тонким клиентом, то получается, что не не может использовать те же Stateful Session Bean'ы, что и Application Client. Не хотите попробовать в Application Client'ах использовать CDI бины? Мы вообще отказались от EJB бинов в пользу CDI. CDI бины и с HTTPSession хорошо дружат в отличии от stateful. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 14:08:10 |
|
||
|
@Stateless Session Bean работает как @Singleton почему-то...
|
|||
|---|---|---|---|
|
#18+
Кто такие CDI бины? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2012, 14:08:46 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37858811&tid=2131451]: |
0ms |
get settings: |
17ms |
get forum list: |
28ms |
check forum access: |
9ms |
check topic access: |
9ms |
track hit: |
83ms |
get topic data: |
24ms |
get forum data: |
6ms |
get page messages: |
130ms |
get tp. blocked users: |
3ms |
| others: | 315ms |
| total: | 624ms |

| 0 / 0 |
