Бин @Stateless или @Singleton может быть явно ограничен для предотвращения автоматического изменения его области действия на область, которая может быть недопустимой.Например, оба этих типа бинов не могут быть @RequestScoped.Посмотрите эту ссылку для получения дополнительной информации: http://docs.jboss.org/resteasy/docs/2.0.0.GA/userguide/html/CDI.html
@ Stateful имеет большой смысл (явно) ограничивать.А именно, без области видимости вы, как программист, должны позаботиться о вызове аннотированного метода @Remove.Это может быть проблематично с гарантией, так как такой bean-компонент обычно не используется ни в одном методе, где вы можете вызвать метод @Remove в блоке finally.С областью действия бин точно удаляется по окончании области действия.
Кроме того, без области действия вы не всегда можете использовать инъекцию для получения ссылки на заглушку бина с состоянием.А именно, каждый раз, когда происходит инъекция, вы получаете новый экземпляр.Это особенно проблематично при внедрении bean-компонента с состоянием в резервный EJB-компонент с областью запросов (JSF), где у вас есть намерение сохранить bean-компонент с состоянием в нескольких запросах.
Затем, в сочетании с @Named, вытакже можно использовать сессионный компонент напрямую в качестве вспомогательного компонента для выравнивания уровней приложения (см., например, http://jaxenter.com/java-ee-6-overview-35987-2.html).. Очевидно, что в этом случае вам нужна явная область действия. Теперь выравнивание слоев может быть не лучшим решением в больших приложениях, нодля небольших приложений и / или людей, только начинающих работать с Java EE, определенно желательно поместить бизнес-логику непосредственно в компонент поддержки, а затем требуется, чтобы компоненты поддержки имели доступ к сервисам (в основном транзакциям) того же типа, что и бизнес-компонентыобычно имеют.
Наконец, Гэвин Кинг (ведущий спецификатор CDI) предложил всегда использовать @Inject вместо @EJB. Единственное исключение касается удаленных EJB, где @EJB все еще используется.
Часть путаницы вокруг EJB и CDI заключается в том, что CDЯ - новая компонентная модель в Java EE и все еще относительно новая.Хотя они довольно хорошо интегрируются друг с другом, они по-прежнему являются двумя различными компонентными моделями, и еще не все лучшие практики были продуманы.Реза Рахман (член EG, автор книг EJB и автор CanDI по внедрению CDI) предположил, что модель EJB в будущем может быть модифицирована как набор служб CDI.Действительно, в Java EE 7 делается шаг, отделяя транзакционные сервисы от EJB и делая их доступными через (CDI) аннотации.