вкратце: вы даже можете смешивать это ( @Singleton
и @ApplicationScoped
), и это имеет смысл в некоторых сценариях.
(и работает как положено в моем!)
В дополнение к другим ответам я хотел бы добавить еще несколько моментов для пояснения в реальных сценариях.
Для меня этот вопрос возник из статьи « Как заставить bean-компонент с областью действия приложения создавать экземпляр при запуске приложения?»
В некоторой дискуссии я заявил об этом и пока не могу найти веского аргумента против этого:
Во многих реальных сценариях / установках я бы сказал, что трудно однозначно сказать - с абстрактной точки зрения / точки зрения моделирования - является ли что-то (или станет / будет рассматриваться как) EJB или управляемый компонент с областью действия приложения.
(спорные, но не окончательные) аргументы (с моей точки зрения) против этого до сих пор: (@BalusC и все другие: я бы хотел, чтобы они были убедительными, но если нет, то приведенное выше может быть верным, и тем не менее аргументы могут по-прежнему помогают читателю понять различия / преимущества / недостатки / плохие / хорошие практики)
EJB против управляемого компонента
BalusC : Это EJB, а не управляемый компонент, что совсем другое. EJB-компоненты запускаются в бэкэнде, а управляемые бины - во внешнем интерфейсе. EJB-компоненты также работают в транзакционном контексте. [...] Вы просто перепутали корпоративные компоненты с управляемыми компонентами, и я только что указал на это.
но:
Я : Я думаю, что вы не совсем правы и переоцениваете значение / использование, и мне это кажется спорным. http://en.wikipedia.org/wiki/Enterprise_JavaBeans
Enterprise JavaBeans (EJB) - это управляемое серверное программное обеспечение для модульного построения корпоративного программного обеспечения и один из нескольких Java API. EJB - это программный компонент на стороне сервера, который инкапсулирует бизнес-логику приложения.
Типы корпоративных бинов
Сессионные бины [3], которые могут иметь статус "Stateful", "Stateless" или "Singleton" [...]
Бины, управляемые сообщениями [...]
... что все еще верно в моем случае.
Singleton EJB против компонента с областью действия приложения
Блокировка
BalusC : Singleton EJB - это не то же самое, что bean-компонент с областью действия приложения. Одноэлементный EJB заблокирован для чтения / записи и, следовательно, потенциально неэффективен / чрезмерно свернут для задачи, которую вы имели в виду. Короче говоря: возьмите хорошую книгу по Java EE и научитесь использовать правильный инструмент для работы. Один способ определенно не является другим. То, что это работает, не означает, что это правильный инструмент. Кувалда способна прикрутить винт, но это не обязательно подходящий инструмент :)
но:
(Я не вижу здесь кувалду - извините ...) Хорошо знать значения блокировки по умолчанию (я не знал об этом), но это снова кажется неверным: Oracle Java EE 6 Tutorial on Managing Concurrent Access in a Сессионный компонент Singleton
При создании одноэлементного сеансового компонента параллельный доступ к бизнес-методам одноэлементного объекта можно контролировать двумя способами: параллелизм, управляемый контейнером, и параллелизм, управляемый компонентом. [...]
Хотя по умолчанию синглтоны используют управляемый контейнером параллелизм, аннотация @ConcurrencyManagement (CONTAINER) может быть добавлена на уровне класса синглтона, чтобы явно установить тип управления параллелизмом.
@ApplicationScoped
и@Singleton
в разделе 5.4 (стр. 36).