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

StackOverflow https://stackoverflow.com/questions/29734

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Погуглив, я смог найти причину, по которой в спецификации Java EE говорится, что они должны быть однопоточными.Но я не могу понять причину, по которой указано, что они ОДНОРЕЗЬБОВЫЙ?

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top