Используя EJB 3.0, по моему мнению, компоненты Stateless Session существуют для того, чтобы завершить ландшафт Enterprise Bean. Они действительно существуют для того, чтобы настроить Фасад для остальной части вашей бизнес-логики. Люди часто предполагают, что SLSB безопасны для потоков, но это, по меньшей мере, вводит в заблуждение.
Они определенно не являются поточно-ориентированными, если их кодовый путь включает в себя вызов не поточнобезопасного кода (например, общий не поточнобезопасный кеш). Единственная гарантия, которую дает SLSLB, состоит в том, что один экземпляр SLSB используется не более чем одним потоком одновременно время. Это в основном сводится к тому, что SLSB имеет синхронизированный доступ к методам, и что будет несколько экземпляров для обслуживания клиентских вызовов. Но наличие кода вызова метода SLSB из общего не поточно-безопасного класса из этих нескольких экземпляров может по-прежнему привести к хаосу и привести к тому, что рассматриваемый SLSB будет не поточно-безопасным.
Поскольку контексты EE (транзакции, ресурсы безопасности и т. Д.) Уже связаны с потоком, я не вижу необходимости в SLSB, скажем, в Spring Singletons. Они дополняют компоненты Statefull Session в приложении, предназначенном только для EJB.
По моему мнению, маршрут, который они выбирают с помощью SLSB, и новые настройки параллелизма блокировки для EJB 3.1 - это попытка сбить с толку программиста и заставить Mighty Container удовлетворить ваши потребности. Сделайте себе одолжение и прочитайте Java Concurrency in Practice и начните использовать синглтоны в сочетании со стандартными конструкциями параллелизма java-потоков. (синхронизированные, изменчивые, одновременные коллекции и т. д.)