@ Синглтон в Java EJB - PullRequest
       41

@ Синглтон в Java EJB

10 голосов
/ 01 марта 2012

У меня есть EJB, который должен быть одноэлементным и с состоянием, так как он будет своего рода пул соединений.Мои вопросы:

  • Если я определю EJB с аннотацией @Singleton, будет ли он по умолчанию с сохранением состояния или мне нужно будет также определить с @Stateful?
  • Может ли это быть для @Stateless аннотации?

Пытался найти документацию по этому вопросу, но пока не повезло, поэтому всем, у кого есть знания, поделитесь своей мудростью и, возможно, одной или двумя ссылками.

1 Ответ

13 голосов
/ 01 марта 2012

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

По этой ссылке:

Сессионные компоненты Singleton поддерживают свое состояние между клиентскими вызовами

Итак, на ваш вопрос:

если я определю EJB с аннотацией @Singleton, тогда он будет по умолчанию с состояниемили я должен также определить его с помощью @Stateful?

Если для Stateful вы подразумеваете возможность поддерживать свое состояние, ответом будет: да, Singleton будет Stateful по умолчанию.

Имейте в виду, что есть некоторые конкретные ситуации, в которых синглтон не ведет себя как синглтон, прочитайте эту статью об этом.Как правило, вы не рискуете такого рода, если находитесь за пределами кластера и избегаете использования конструктора по умолчанию: вам всегда нужно использовать ссылки на EJB, вставляя его в другой EJB или веб-клиент, используя:

@EJB MyEJB myEJB;

Наконец, взгляните на эту часть руководства по Java EE 6, касающуюся жизненного цикла EJB, объясняя, что основное отличие между Stateful и другими EJB заключается в способности пассивироваться контейнером во времяэто жизнь.Это различие является основной причиной того, что утверждение «Singleton является Stateful по умолчанию», строго говоря, не является правильным, но является правильным в контексте вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...