Объединение экземпляров помогает не только потому, что вы можете повторно использовать объекты (и избежать дорогостоящего создания объектов), но и позволяет приложению. сервер правильно управляет загрузкой . Это приложение. для конкретного сервера, но обычно вы можете указать max-pool-size
, min-pool-size
, pool-resize
и timeout
.
Когда пул достигнет емкости max-pool-size
, запросы обслуживаются с использованием существующих экземпляров и истекают, если ни один экземпляр не доступен в течение ожидаемого периода времени. Это может ухудшить качество обслуживания приложения, но, по крайней мере, оно не подрывает приложение. сам сервер. Это так же, как с веб-сервером.
Несколько замечаний о безопасности потоков :
Секта. 4.3.13 «Сериализация методов сессионных компонентов»
Контейнер сериализует вызовы для каждого экземпляра сессионного компонента. Большинство контейнеров будет поддерживать много
экземпляры сессионного компонента, выполняющиеся одновременно; однако каждый экземпляр видит только сериализованный
последовательность вызовов методов. Поэтому сессионный компонент не обязательно должен быть закодирован как входящий.
Согласно спецификации EJB, все запросы к конкретному экземпляру bean-компонента синхронизируются приложением. сервер. Это, например, позволяет сессионному компоненту без состояния (SLSB) сохранять соединение с базой данных в одном из его полей. Поля SLSB должны быть кратковременными. (Экземпляр компонента может быть уничтожен / создан заново в любое время.) Благодаря синхронизации приложение. сервер гарантирует, что SLSB является поточно-ориентированным. Без синхронизации с приложением. сервер, разработчик должен убедиться, что SLSB является поточно-ориентированным, то есть он не должен иметь полей.
Примечание. Редко иметь поля в SLSB. Большинство SLSB по своей природе потокобезопасны. Я бы не рекомендовал хранить соединение в поле, например. Лучше получить один в методе и выпустить его как можно скорее.