Сведения о вопросе

Faridun

11:18, 1st August, 2020

Теги

java   ejb    

Почему сеансовые компоненты без сохранения состояния являются однопоточными?

Просмотров: 344   Ответов: 2

В соответствии с моим пониманием сеансовые компоненты без состояния используются для кодирования бизнес-логики. Они не могут хранить данные в своих переменных экземпляра, поскольку их экземпляр совместно используется несколькими запросами. Таким образом, они больше похожи на классы Singleton. Однако разница заключается в том, что contain создает (или повторно использует из пула) отдельный экземпляр сеансовых компонентов без сохранения состояния для каждого запроса.

После поиска в Google я мог бы найти рассуждение о том, что спецификация Java EE говорит, что они должны быть однопоточными. Но я не могу понять причину, по которой указаны однопоточные ?



  Сведения об ответе

FAriza

20:10, 18th August, 2020

SLSBs являются однопоточными из-за контекста TX, Принципал связан с экземпляром bean, когда он вызывается. Эти бобы объединяются в пул и, если не достигнут максимальный размер пула, обрабатываются в отдельных потоках ( в зависимости от поставщика).

Если бы SLSBs был спроектирован потокобезопасным, каждый вызов выглядел бы как сервлет doGet/Post с информацией запроса , содержащей контекст Tx, информацию о контексте безопасности и т. д. Так что, по крайней мере, код выглядит чистым (зависит от разработчика).


  Сведения об ответе

baggs

02:24, 9th August, 2020

Основная причина, по которой объекты сеансов без сохранения состояния являются однопоточными, заключается в том, что они являются высоко масштабируемыми для контейнера. Контейнер может сделать много упрощающих предположений о среде выполнения. Вторая причина заключается в том, чтобы облегчить жизнь разработчику, потому что разработчику не нужно беспокоиться о какой-либо синхронизации или повторном входе в его бизнес-логику, потому что Боб никогда не будет вызван в другом контексте потока.

Я помню, что рассуждение обсуждалось в обзорах оригинальной спецификации EJB 1.0. Я бы посмотрел на раздел целей спецификации. Смотрите http://java.sun.com/products/ejb/docs.html для получения списка спецификаций.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться